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,看看哪一个导致了这个问题。