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

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

3 反对 收藏

我的服务器设置出现了奇怪的现象。它看起来像这样。

客户端 1 192.168.11.2/24 <----> 192.168.11.7/24 (br1/vlan1) 服务器 192.168.21.1/24 (br21/vlan21) <---> 192.168.21.101/24 客户端 2

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

~> sudo iptables -t nat -nL -v Chain PREROUTING (policy ACCEPT 3631 数据包, 220K 字节) pkts 字节目标 prot opt in out 源目标
5332 320K DNAT tcp -- * * 0.0.0.0/0 192.168.11.7 多端口 dports 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 的数据包才会被转发。当我尝试从客户端 1 连接时,数据包计数器会增加,但不再有 NAT。有时几个小时后它又开始工作了。

防火墙中没有任何东西被阻止,因为所有策略都处于“接受”状态,并且没有设置任何规则。conntrack 也未满。我已经尝试了 rp_filter 等多种方法,但在这些设置中这应该没有问题。

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

希望有人有一个想法。

答案1

尝试降低客户端接口的 MTU 大小,以防某些东西丢失碎片数据包。无论如何,您都应该在客户端和服务器上运行 tcpdump/wireshark,看看哪一个导致了这个问题。

相关内容