iptables v1.4.14: can't initialize iptables table `nat': 表不存在(需要insmod吗?)

Posted

技术标签:

【中文标题】iptables v1.4.14: can\'t initialize iptables table `nat\': 表不存在(需要insmod吗?)【英文标题】:Iptables v1.4.14: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)iptables v1.4.14: can't initialize iptables table `nat': 表不存在(需要insmod吗?) 【发布时间】:2014-03-25 20:48:53 【问题描述】:

我正在尝试设置 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

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

我能做些什么来解决这个问题?

【问题讨论】:

也许您的内核是在没有 NAT 支持的情况下编译的?您的服务提供商是否允许您更换内核? 【参考方案1】:

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

【讨论】:

我昨天刚刚应用的 Arch linux 更新也是如此。重启/重启 = 成功! apt dist-upgrade 之后,Raspbian 也是如此。重启就可以了。【参考方案2】:

我也遇到了同样的问题,但是成功了:

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

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

【讨论】:

对于 LXC/containers,您需要在主机上执行此操作,因为容器无法加载模块。【参考方案3】:

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

【讨论】:

当我执行modinfo iptable_nat 时,我得到libkmod: ERROR ../libkmod/libkmod.c:586 kmod_search_moddep: could not open moddep file '/lib/modules/4.2.0-25-generic/modules.dep.bin' modinfo: ERROR: Module alias iptable_nat not found. 。但我不知道如何解决这个问题。版本来自uname -r 重新生成 modules.dep.bin 运行:sudo depmod 然后重新运行 modinfo 命令。 我已经能够解决它。无论如何谢谢:serverfault.com/questions/780980/…【参考方案4】:

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

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

如果这确实是个问题,我们可以为您提供迁移到其他 我们开始为客户提供系统虚拟化 (KVM)。

所以我不得不将我的服务器迁移到新系统...

【讨论】:

【参考方案5】:

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

如果以上所有方法都不起作用,您可以考虑真正升级您的内核...

【讨论】:

拯救了我的一天,我的系统管理员将 iptable-nat 放入 /etc/modprobe.d/nf-blacklist.conf。【参考方案6】:

短版:

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

长版:

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

来自官方 wiki 的解决方案:

vzctl set $CTID --netfilter full --save

https://openvz.org/***_via_the_TUN/TAP_device#Troubleshooting

【讨论】:

【参考方案10】:

在 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?)

重启解决了问题

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

请确保在编译 Linux 内核时设置了IP_NF_NAT [=y]

【讨论】:

您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引用或文档【参考方案13】:

检查是否启用了 tun/tap:

cat /dev/net/tun

如果好的会看到一些东西:

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

【讨论】:

tun/tap 与 iptables NAT 表有什么关系?【参考方案14】:
uname -av;
sudo apt install --reinstall (output from uname -av)

【讨论】:

以上是关于iptables v1.4.14: can't initialize iptables table `nat': 表不存在(需要insmod吗?)的主要内容,如果未能解决你的问题,请参考以下文章

2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)" i

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when I

Can't install pip with get-pip, zipimport.ZipImportError: can't decompress data; zlib 不可用

Can't find mysqld.sock: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.s

iptables设置

iptables