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.
我尝试重新安装内核和 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
当我重新安装它(无需重新启动)时,iptables 在服务重新启动后即可工作。
当我重新启动机器时,我再次遇到相同的错误。
我注意到每次重新启动后,以下文件夹都会消失:
/lib/modules/4.13.0-16-generic/kernel/net/ipv4/netfilter
ipv4 文件夹中只剩下 2 个文件:gre.ko udp_tunnel.ko
将丢失的文件复制到此位置不起作用,将在下次重新启动时删除。
知道如何解决这个问题吗?
答案1
我在 Ubuntu 16.04 上也得到了同样的结果。我没有解决办法,但我对为什么会发生这种情况有一些了解。在本书过程中,系统最初在基于 RAM 的文件系统上启动:initramfs。稍后在引导过程中,硬盘接管,但 initramfs 中的 module 目录被挂载到硬盘的 module 目录上。请注意, 的输出mount
包括以下行:
copymods on /lib/modules type tmpfs (rw,relatime)
好的,对 /lib/modules 进行任何更改,例如通过执行
sudo apt-get install --reinstall linux-image-$(uname -r)
系统重启后将会丢失。那么这应该如何运作呢?好吧,当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 中创建,因而在系统重新启动时不会保留。
此时我被困住了。
答案2
正如 @scottwh2 所提到的,问题可能是copymods
ramfs 卷安装在/lib/modules
.要检查这一点,请运行mount | grep /lib/modules
.
要删除它,请运行
apt remove cloud-initramfs-copymods
然后重新启动。
重新启动后,仔细检查该copymods
条目是否已从mount
.
答案3
我在 Ubuntu Server 16.04 上遇到了同样的问题。命令:
mount | grep /lib/modules
显示:
copymods on /lib/modules type tmpfs (rw,relatime)
因此,首先我尝试删除 cloud-initramfs-copymods,但该软件包未安装在我的系统中。然后我安装了它:
apt-get install cloud-initramfs-copymods
之后我就把它删除了:
apt-get remove cloud-initramfs-copymods
重新启动后,我的服务器 copymods 消失了,并且重新启动后模块不会被删除!所以感谢斯科特WH2和假口袋我成功解决了我的问题。