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

Dou*_*las 30 debian iptables linux-kernel

我正在尝试设置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.
Run Code Online (Sandbox Code Playgroud)

我正在使用 :

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
Run Code Online (Sandbox Code Playgroud)

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

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

con*_*rad 17

我有同样的问题,这有效:

sudo modprobe ip_tables
sudo echo 'ip_tables' >> /etc/modules
Run Code Online (Sandbox Code Playgroud)

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


Jay*_*Kay 15

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

  • 我昨天刚刚申请的 Arch linux 更新也是如此。重启/重启 = 成功! (3认同)

Pie*_*erz 8

如果您看到此错误消息并且您没有使用某种受限制的容器托管(例如OpenVZ),那么问题可能是内核缺少nat模块.要检查运行:

modinfo iptable_nat
Run Code Online (Sandbox Code Playgroud)

哪个应该打印出模块的位置,如果它打印出错误,那么你知道这是你的问题.还有像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/
Run Code Online (Sandbox Code Playgroud)

如果您正在运行IPv6,请查看此处:

ls /lib/modules/`uname -r`/kernel/net/ipv6/netfilter/
Run Code Online (Sandbox Code Playgroud)


Ano*_*usX 6

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

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

Perhaps iptables or your kernel needs to be upgraded.
Run Code Online (Sandbox Code Playgroud)

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

cd /etc/modprobe.d/ && grep -nr iptable_nat
Run Code Online (Sandbox Code Playgroud)

如果命令显示任何匹配的规则,例如blacklist iptable_natinstall iptable_nat /bin/true,则将其删除。由于 iptalbes 会消耗一些性能,所以在没有必要的情况下禁止它并不奇怪。

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

modprobe iptable-nat
Run Code Online (Sandbox Code Playgroud)

如果以上都不起作用,你可以考虑真正升级你的内核......


Dou*_*las 5

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

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

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

因此,我不得不将服务器迁移到新系统...


phe*_*hep 5

精简版 :

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

长版:

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