Linux iptables DNAT在一段时间后停止工作

3最喜欢的

我在我的服务器设置中有一个奇怪的行为。 看起来像这样

client1 192.168.11.2/24 192.168.11.7/24(br1 / vlan1)服务器192.168.21.1/24(br21 / vlan21)<—> 192.168.21.101/24 client2

在服务器上,我已经将DNAT设置为两个端口到另一个目的地。

〜> sudo iptables -t nat -nL -v链PREROUTING(策略ACCEPT 3631数据包,220K字节)pkts字节目标protselect输出目标
5332 320K DNAT tcp – * * 0.0.0.0/0 192.168.11.7多端口端口5308,21至:192.168.2.19

〜> ip r通过192.168.11.1获得192.168.2.19 192.168.2.19 dev br1 src 192.168.11.7

这从两个客户端工作了一段时间,但在未指定的时间之后,只有来自客户端2的数据包被转发了。 当我尝试从client1连接但是没有NAT时,数据包计数器增加。 有时几个小时后它又开始工作了。

防火墙中没有任何内容被阻塞,因为所有的策略都在接受状态,没有规则设置。 conntrack也不满。 我已经尝试了rp_filter等多个东西,但这应该是没有问题的这些设置。

当我将br1设置为promisc模式时,它开始工作,但我想了解为什么接口不接受没有promisc模式的数据包。

希望有人有一个想法。

尝试降低您的客户端接口上的MTU大小,以防万一丢失碎片数据包。 在任何情况下,你都应该在客户端和服务器上运行tcpdump / wireshark,看看是哪一个导致了这个问题。