iptables v1.4.14:无法初始化iptables表`nat':表不存在(你需要insmod吗?)

时间:2014-02-24 09:25:10

标签: linux-kernel debian iptables

我正在尝试设置iptable规则,当我使用iptable时,我收到以下错误消息:

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

这是由服务提供商托管的虚拟服务器。

我该怎么做才能解决这个问题?

13 个答案:

答案 0 :(得分:14)

我遇到了同样的问题,这很有效:

sudo modprobe ip_tables
sudo echo 'ip_tables' >> /etc/modules

http://www.howtoforge.com/forums/showthread.php?t=3196

答案 1 :(得分:12)

我遇到了与Debian 8相同的问题。我通过重启系统修复了它。如果更新了内核映像并且之后没有重新启动系统,则似乎会发生错误。

答案 2 :(得分:8)

如果您看到此错误消息并且您没有使用某种受限制的容器托管(例如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/

答案 3 :(得分:4)

最后,我的服务提供商回答说:

  

这是我们使用的虚拟化系统(OpenVZ)的限制,   基本的iptables规则是可能的,但不是那些使用nat的人   表。

     

如果确实存在问题,我们可以为您提供迁移到其他服务的权限   我们开始为客户提供系统虚拟化(KVM)。

所以我必须将我的服务器迁移到新系统......

答案 4 :(得分:2)

简短版本:

在主机上运行iptables然后在虚拟服务器上运行它(我很确定这是某种LXC或OpenVZ容器)。

长版:

问题是由于ip_table模块是按需加载的。因此,重新启动后,在启动时未加载任何iptables规则的任何计算机上,不会加载ip_tables模块(不需要模块==未加载模块)。因此,LXC或OpenVZ容器不能使用iptables(因为它们共享主机内核但不能修改加载的模块),直到主机以某种方式加载ip_tables模块。

答案 5 :(得分:2)

iptalbes工具依靠与netfilter交互的内核模块来控制网络流量。

当iptalbes在内核中找不到该模块时,会发生此错误,因此iptables建议您升级它:)

Perhaps iptables or your kernel needs to be upgraded.

但是,在大多数情况下,只是模块未添加到内核或被禁止,请尝试使用以下命令来检查是否被禁止:

cd /etc/modprobe.d/ && grep -nr iptable_nat

如果命令显示匹配的任何规则,例如blacklist iptable_natinstall iptable_nat /bin/true,则将其删除。由于iptalbes会花费一些性能,因此在不需要时禁止它并不奇怪。

如果黑名单中未找到任何内容,请尝试将iptable-nat添加到内核手册中:

modprobe iptable-nat

如果以上所有方法均无效,则可以考虑真正升级内核...

答案 6 :(得分:1)

“IP conntrack功能对venet性能有一些负面影响(uo到10%左右),因此最好默认禁用它们。” 这需要nat

https://serverfault.com/questions/593263/iptables-nat-does-not-exist

答案 7 :(得分:1)

来自官方维基的解决方案:

vzctl set $CTID --netfilter full --save

https://openvz.org/VPN_via_the_TUN/TAP_device#Troubleshooting

答案 8 :(得分:0)

检查是否启用了tun / tap:

cat /dev/net/tun

如果确定会看到一些东西:

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

答案 9 :(得分:0)

如果您正在运行 puppet ,则可能会将/proc/sys/kernel/modules_disabled设置为1,从而禁止进一步加载模块。 当机器重新启动时,它会被设置回0,允许更改,例如加载iptables模块。经过一段时间 puppet 会将其设置为1,以保护系统免受内核根工具包的侵害。  因此,我们将需要的任何模块应在启动时间或启动后不久加载

答案 10 :(得分:0)

表名区分大小写,因此您应该使用小写nat而不是大写NAT。 例如;

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

答案 11 :(得分:0)

在OpenSUSE 15.3 systemd日志中报告了此错误(insmod建议无济于事)。

Feb 18 08:36:38 vagrant-openSUSE-Leap dockerd[20635]: iptables v1.6.2: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)

重新启动已解决问题

答案 12 :(得分:-1)

uname -av;
sudo apt install --reinstall (output from uname -av)