我正在尝试设置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
这是由服务提供商托管的虚拟服务器。
我该怎么做才能解决这个问题?
答案 0 :(得分:14)
我遇到了同样的问题,这很有效:
sudo modprobe ip_tables
sudo echo 'ip_tables' >> /etc/modules
答案 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_nat
或install 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)