iptables nat 不存在
今天我在主機系統上的 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.
沒有進一步的更新可用。我還使用幾個較舊的核心重新啟動了伺服器,但我總是收到相同的錯誤消息。
我的伺服器在 CentOS 上執行,帶有最新版本的官方 OpenVZ 核心。
$ uname -r 2.6.32-042stab088.4
還測試了核心版本: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 conntrack 功能對 venet 性能有一些負面影響(uo 到大約 10%),因此最好預設禁用它們。
…
(來源:http ://git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee )
解決方案:
根據分佈,它位於 /etc 目錄中的某個位置。找到它:
$ sudo grep -R “選項 nf_conntrack ip_conntrack_disable_ve0=1” /etc/modprobe.d/
並將“1”替換為“0”:
選項 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
和 nat 現在工作
所有來源:
vzctl 4.7 的更新日誌:https ://openvz.org/Download/vzctl/4.7/changes
帶有解決方案的錯誤報告:https ://bugzilla.openvz.org/show_bug.cgi?id=2943
帶有縮短解決方案描述的錯誤報告:https ://bugzilla.openvz.org/show_bug.cgi?id=2755#c4
對應的 GIT 送出:http ://git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee
相關 Wiki 文章:https ://openvz.org/NAT#IP_conntracks