我正在尝试设置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
这是由服务提供商托管的虚拟服务器。
我该怎么解决?
我遇到了同样的问题,并且可行:
sudo modprobe ip_tables
sudo echo 'ip_tables' >> /etc/modules
我在Debian 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/
最后,我的服务提供商回答了:
这是我们使用的虚拟化系统(OpenVZ)的局限性, 基本的iptables规则是可能的,但那些使用nat的人则不可能 表。
如果确实有问题,我们可以为您提供迁移到另一个 我们开始向客户提供系统虚拟化(KVM)。
所以我不得不将服务器迁移到新系统...
简短版:
先在主机上运行iptables,然后再在虚拟服务器中运行它(我很确定这是某种LXC或OpenVZ容器)。
长版:
问题是由于ip_table模块按需加载的事实。因此,重新引导后,在引导时未加载任何iptables规则的任何计算机上,都不会加载ip_tables模块(不需要模块==该模块未加载)。因此,在主机以某种方式加载了ip_tables模块之前,LXC或OpenVZ容器不能使用iptables(因为它们共享主机内核,但是不能修改加载的模块)。
表名称区分大小写,因此您应该使用小写的nat而不是大写的NAT。例如;
“ IP conntrack功能会对venet性能产生一些负面影响(大约10%),因此最好在默认情况下将其禁用。”需要nat
官方Wiki提供的解决方案:
在OpenSUSE 15.3 systemd日志上报告了此错误(insmod建议无济于事。
如果正在运行puppet
IP talbes只是一种管理工具,而不是处理规则的真正工具。真正的工人是iptables依赖的linux内核模块。当iptalbes在内核中找不到该模块时,会发生此错误,因此iptables建议您升级它:)
检查是否启用了tun / tap:
uname -av;
sudo apt install --reinstall (output from uname -av)