今天我主机系统上的iptables nat停止工作,我不知道发生了什么! (这很糟糕,我知道)
所有命令都以root用户身份执行。
如果我运行$ iptables -t nat -L我得到以下错误信息:
$ iptables -t nat -L iptables v1.4.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.
没有更多可用的更新。 我也重新启动了几个较旧的内核的服务器,但我总是得到相同的错误信息。
我的服务器在最新版本的官方OpenVZ内核的CentOS上运行。
$ uname -r 2.6.32-042stab088.4
还testing了内核版本:2.6.32-042stab85.20和2.6.32-042stab084.26
grub.conf中的第一个内核:
title OpenVZ (2.6.32-042stab088.4) root (hd0,1) kernel /vmlinuz-2.6.32-042stab088.4 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=de initrd /initramfs-2.6.32-042stab088.4.img
已安装以下更新:
$ rpm -qa --last vzctl-4.7.2-1.x86_64 Mon 05 May 2014 03:25:16 AM CEST vzctl-core-4.7.2-1.x86_64 Mon 05 May 2014 03:25:14 AM CEST util-linux-ng-2.17.2-12.14.el6_5.x86_64 Wed 30 Apr 2014 11:37:19 PM CEST libuuid-2.17.2-12.14.el6_5.x86_64 Wed 30 Apr 2014 11:37:18 PM CEST libblkid-2.17.2-12.14.el6_5.x86_64 Wed 30 Apr 2014 11:37:18 PM CEST vzkernel-2.6.32-042stab088.4.x86_64 Mon 26 Apr 2014 09:01:00 AM CEST nss-softokn-freebl-3.14.3-10.el6_5.x86_64 Sat 26 Apr 2014 09:01:00 AM CEST nss-softokn-3.14.3-10.el6_5.x86_64 Sat 26 Apr 2014 09:01:00 AM CEST bridge-utils-1.2-10.el6.x86_64 Tue 15 Apr 2014 02:22:41 PM CEST openssl-1.0.1e-16.el6_5.7.x86_64 Wed 09 Apr 2014 10:14:03 AM CEST ...
lsmod给了我以下内容:
$ lsmod | grep ip iptable_nat 6302 0 nf_nat 23213 2 iptable_nat,vzrst nf_conntrack_ipv4 9946 3 iptable_nat,nf_nat nf_defrag_ipv4 1531 1 nf_conntrack_ipv4 nf_conntrack 80281 5 iptable_nat,vzrst,nf_nat,nf_conntrack_ipv4,vzcpt ip6t_REJECT 4711 0 ip6table_mangle 3669 0 ip6table_filter 3033 0 ip6_tables 18988 2 ip6table_mangle,ip6table_filter iptable_mangle 3493 0 iptable_filter 2937 0 xt_multiport 2716 0 ipt_REJECT 2399 0 ip_tables 18119 3 iptable_nat,iptable_mangle,iptable_filter ipv6 322519 35 vzrst,ip6t_REJECT,ip6table_mangle
运行modprobe给出以下错误:
$ modprobe /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko FATAL: Module /lib/modules/2.6.32_042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko not found.
但该文件确实存在:
$ ll /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko -rwxr--r-- 1 root root 16K Apr 3 16:20 /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko*
有任何想法吗?
由于vzctl从4.6更新到4.7,他们将nf_conntrack的设置更改为默认禁用。 ( https://openvz.org/Download/vzctl/4.7/changes )
相应的提交信息:
…
禁用VE0的conntrack默认
IP conntrackfunction对venet性能有一定的负面影响(uo到10%左右),所以最好在默认情况下禁用。
…
(来源: http : //git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee )
解:
依赖于分布,它在/ etc目录中。 find它:
$ sudo grep -R“options nf_conntrack ip_conntrack_disable_ve0 = 1”/etc/modprobe.d/
并用“0”代替“1”:
选项nf_conntrack ip_conntrack_disable_ve0 = 0
重新启动系统
(来源: https : //bugzilla.openvz.org/show_bug.cgi?id = 2943#c5 )
或者重新启动:
rmmod iptable_nat rmmod nf_nat rmmod nf_conntrack_ipv4 rmmod nf_conntrack
而且现在工作
所有来源:
vzctl 4.7的更新日志: https : //openvz.org/Download/vzctl/4.7/changes
错误报告与解决scheme的意见: https : //bugzilla.openvz.org/show_bug.cgi?id = 2943
错误报告与缩短的解决scheme说明: https : //bugzilla.openvz.org/show_bug.cgi?id = 2755#c4
相应的GIT提交: http ://git.openvz.org/?p=vzctl;a=commit;h= a191a462579ee
相关维基文章: https : //openvz.org/NAT#IP_conntracks
你应该是超级用户来运行iptables 。 因此,以root身份运行它。
$ iptables -t nat -L iptables v1.4.19.1: can't initialize iptables table `nat': Permission denied (you must be root) Perhaps iptables or your kernel needs to be upgraded. # iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination [...]
似乎有什么东西实际上是错误的文件? 如果你试图将modprobe /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko? 系统是否真的返回ENOENT(没有这样的文件或目录)? 我无法想象会是这样,但也许SELinux搞乱了这个文件? 最后,也许文件/文件系统已损坏。 md5sum它与一个已知的好版本。 或者只是删除它,并完全复制一个新的。 希望这不是文件系统。
试试这个: https : //stackoverflow.com/questions/3140478/fatal-module-not-found-error-using-modprobe
我发现这个问题的另一个解决scheme! 在节点上,我无法删除
rmmod iptable_nat rmmod nf_nat rmmod nf_conntrack_ipv4 rmmod nf_conntrack
在官方指南中,我发现:
vzctl设置VZID –netfilter已满 – 保存–setmode restart