Dir*_*irk 7 ubuntu iptables netfilter
uname -r:4.13.0-16-generic(ubuntu 17.10 服务器)
我遇到一个问题,重启后 iptables 不起作用:
iptables-apply /etc/network/iptables
[ ok ] Stopping fail2ban (via systemctl): fail2ban.service.
Applying new iptables rules from '/etc/network/iptables'... modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.13.0-16-generic
iptables-restore v1.6.1: iptables-restore: unable to initialize table 'filter'
Error occurred at line: 3
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
failed.
Error: unknown error applying new iptables rules: /etc/network/iptables
Reverting to old iptables rules... done.
Run Code Online (Sandbox Code Playgroud)
我尝试重新安装内核和 iptables:
apt install --reinstall linux-generic linux-image-4.13.0-16-generic linux-image-extra-4.13.0-16-generic linux-headers-4.13.0-16-generic iptables
Run Code Online (Sandbox Code Playgroud)
当我重新安装它(无需重新启动)时,iptables 在服务重新启动后即可工作。
当我重新启动机器时,我再次遇到相同的错误。
我注意到每次重新启动后,以下文件夹都会消失:
/lib/modules/4.13.0-16-generic/kernel/net/ipv4/netfilter
Run Code Online (Sandbox Code Playgroud)
ipv4 文件夹中只剩下 2 个文件:gre.ko udp_tunnel.ko
将丢失的文件复制到此位置不起作用,将在下次重新启动时删除。
知道如何解决这个问题吗?
小智 6
我在 Ubuntu 16.04 上也得到了同样的结果。我没有解决办法,但我对为什么会发生这种情况有一些了解。在本书过程中,系统最初在基于 RAM 的文件系统上启动:initramfs。稍后在引导过程中,硬盘接管,但 initramfs 中的 module 目录被挂载到硬盘的 module 目录上。请注意, 的输出mount
包括以下行:
copymods on /lib/modules type tmpfs (rw,relatime)
Run Code Online (Sandbox Code Playgroud)
好的,对 /lib/modules 进行任何更改,例如通过执行
sudo apt-get install --reinstall linux-image-$(uname -r)
Run Code Online (Sandbox Code Playgroud)
系统重启后将会丢失。那么这应该如何运作呢?好吧,当apt install
命令添加新模块时,它应该在/usr/share/initramfs-tools/hooks
. apt install
然后调用运行的安装程序脚本update-initramfs
会生成 CPIO 存档/boot/initrd.img-(uname -r)
该存档是您的 initramfs 映像,该映像现在应该包含 iptables 在系统重新启动时工作所需的模块。
该错误是相关条目实际上从未在 中创建/usr/share/initramfs-tools/hooks
,因此相关条目并未在 initramfs 中创建,因此在系统重新启动时不会保留。
此时我被困住了。