2014-02-24 83 views
20

我想設置iptable規則,並且當我使用iptable時出現以下錯誤信息:iptables v1.4.14:無法初始化iptables表'nat':表不存在(你需要insmod嗎?)

iptables v1.4.14: can't initialize iptables table `nat': Table does not exist (do you need to insmod?) 
Perhaps iptables or your kernel needs to be upgraded. 

我使用:

cat /etc/debian_version 
7.4 

uname -a 
Linux myserver 2.6.32-22-pve #1 SMP Mon Jul 15 08:36:46 CEST 2013 x86_64 GNU/Linux 

uname -r 
2.6.32-22-pve 

這是由服務提供商託管的虛擬服務器。

我能做些什麼來解決這個問題?

+0

也許你的內核編譯時沒有NAT支持?您的服務提供商是否允許您更換內核? – cnicutar

回答

3

Finaly,我的服務提供商回答:

This is a limitation of the virtualization system we use (OpenVZ), basic iptables rules are possible but not those who use the nat table.

If this really is a problem, we can offer you to migrate to a other system virtualization (KVM) as we begin to offer our customers.

,所以我不得不到我的服務器遷移到新的系統...

0

檢查是否啓用了TUN/TAP:

cat /dev/net/tun 

如果確定將會看到:

cat: /dev/net/tun: File descriptor in bad state 
+1

tun/tap與iptables NAT表有什麼關係? – womble

2

短版:

之前在運行在主機上運行的iptables虛擬服務器(我很確定這是某種LXC或OpenVZ容器)。

龍版本:

的問題是由於該ip_table模塊按需加載的事實。因此,在重啓後,在任何沒有在啓動時加載iptables規則的機器上,ip_tables模塊不會被加載(不需要模塊==模塊未加載)。因此,在主機以某種方式加載ip_tables模塊之前,LXC或OpenVZ容器不能使用iptables(因爲它們共享主機內核,但無法修改哪些模塊被加載)。

0

如果您正在運行puppet它可能會將/proc/sys/kernel/modules_disabled設置爲1,禁止進一步的模塊加載。 當機器重新啓動時,它被設置回0,允許更改,例如加載iptables模塊。經過一段時間木偶將其設置爲1以保護系統免受內核root套件的影響。 因此,無論我們需要的模塊應該在啓動時間期間或之後不久加載。

6

它也許有用的補充,如果您看到此錯誤消息,並且你沒有使用某種限制容器的基於主機(如OpenVZ的),那麼問題也許這內核缺少nat模塊。要檢查運行:

modinfo iptable_nat 

哪應該打印出模塊的位置,如果它打印一個錯誤,那麼你知道這是你的問題。還有像nf_nat這樣的依賴模塊可能會丟失,所以如果iptable_nat模塊在那裏但是失敗了,你將不得不深入挖掘。如果缺失,則需要獲取另一個內核和模塊,或者如果您自己開發,請確保內核配置包含CONFIG_IP_NF_NAT=m(用於IPv4 NAT)。

對於信息相關的內核模塊在這些位置之一,通常發現:

ls /lib/modules/`uname -r`/kernel/net/netfilter/ 
ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ 

如果你正在運行IPv6還看這裏:

ls /lib/modules/`uname -r`/kernel/net/ipv6/netfilter/ 
+0

當我做'modinfo iptable_nat'時,得到'libkmod:ERROR ../libkmod/libkmod.c:586 kmod_search_moddep:無法打開moddep文件'/lib/modules/4.2.0-25-generic/modules.dep.bin ' modinfo:錯誤:未找到模塊別名iptable_nat。 '。但我不知道如何解決這個問題。版本來自'uname -r' – kwoxer

+0

重新生成modules.dep.bin運行:'sudo depmod'然後重新運行modinfo命令。 – Pierz

+0

我已經能夠解決它。無論如何,謝謝:http://serverfault.com/questions/780980/error-could-not-open-directory-lib-modules-4-2-0-25-generic-no-such-file-or-d/782884 – kwoxer

0

表名是大小寫所以你應該使用小寫nat而不是大寫NAT。例如, ;

iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -o eth0 -j MASQUERADE 
+1

無關的答案。 'nat'已經寫成小寫。 – Douglas

3

我有同樣的問題在Debian 8.我可以通過重新啓動系統修復它。看起來,如果內核映像已更新並且此後系統不重新啓動,則可能會發生此錯誤。

+0

解決了我,謝謝 – mhmxs