Debian 机器上的 Iptables,删除命令需要重新启动网络才能工作吗?

Debian 机器上的 Iptables,删除命令需要重新启动网络才能工作吗?

我在使用 iptables 时遇到了很大的问题,这是我尝试解决的问题:

PC windows (192.168.1.1) -> (192.168.1.2) PC Linux (192.168.2.1) -> (192.168.2.2) 网卡

我想将消息从 Windows 转发到卡。我写了以下规则:

iptables -t nat -A PREROUTING -d 192.168.1.2 -p udp --dport 49000 -j DNAT --to-destination 192.168.2.2:49000
iptables -t nat -A PREROUTING -d 192.168.2.1 -p udp --dport 49001 -j DNAT --to-destination 192.168.1.1:49001
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

如果我创建规则后重新启动卡,它就会起作用,这不是一个大问题。

更大的问题是,如果我删除一条规则,该规则不会出现:

iptables -t nat --list

但它仍然有效,消息继续转发......

如果我真的想删除一条规则,我需要刷新表格(iptables -t nat -F),然后重新启动网络(/etc/init.d/networking restart),最后重新创建我不想删除的规则......

我在论坛上发现了这一点,但就我而言,这是错误的: 我在这里找到的页面

您有什么想法吗?:)

编辑1:

net.ipv4.ip_forward=1 OK

没有比我写的 4 条更多的 iptables 规则。

编辑2:

当我删除 iptables 中的规则时,我可以在 conntrack 中看到它,因此我尝试删除该规则,我刷新了 conntrack,它是空的,但它仍然不起作用:当包到达时,规则会在 conntrack 中返回。

似乎规则被保存在某个地方,并且 conntrack 可以找到它,但我找不到...删除它的唯一方法是刷新 itables,然后重新启动网络...

答案1

这是 conntrack 问题。一旦连接被视为“已建立”,NAT 表甚至不会被查询,流量将继续通过。重新启动网络是刷新 conntrack 表的一种粗暴方式(因为当它们相关的地址被删除时,条目也会被删除);更微妙的是,有可用的 conntrack 表操作工具,但我从未使用过它们,所以我无法就此提供具体建议。

答案2

您使用 iptables 应用的任何规则都会立即生效(加载到内核中)。最有可能的是您的防火墙和/或网络配置存在逻辑问题。转储您的 iptables 规则会很有帮助。

相关内容