NAT 路由器向 NAT 客户端所连接的服务器发送 RST

NAT 路由器向 NAT 客户端所连接的服务器发送 RST

当我尝试移除家庭网络中的一些以太网线时,我拿了一台装有 Linux 的旧笔记本电脑,并尝试将其用作某种以太网 2 WiFi NAT 路由器(Wi-Fi 卡不能充当桥接器,所以我不得不做 NAT)。基本上,这是可行的,但此 NAT 路由器后面的所有客户端在 TCP 连接上都会不时出现网络错误。

首先,这是完整的设置:

INTERNET > wire > Standard Wi-Fi Router > air > Linux Router > Clients

在对 Linux 路由器和客户端进行一些嗅探之后,我发现了以下情况:

  1. 客户端照常连接到远程服务器并检索一些数据
  2. 客户端变得繁忙(例如,将数据写入磁盘)并且接收窗口已满
  3. 然后客户端基本上告诉服务器等待;在我的例子中,在连接断开之前,我在捕获中看到的最后一个 ACK​​ 要么是 win=0,要么是 win < MTU
  4. 在最后一个 ACK​​ 传输过程中,仍有一些数据包从远程服务器到达
  5. Linux 路由器对每个数据包都发送 RST 消息给远程服务器,从而破坏连接
  6. 客户端感到困惑,因为它在响应客户端发送的下一个数据包时从服务器获得了 RST

所以 [5] 是我这里的问题,我想知道为什么会发生这种情况以及如何解决它。

其他值得一提的事情:

  • 无线网络本身运行良好
  • 所有不在 Linux 机器后面的客户端都工作正常
  • 据我所知,UDP 工作正常
  • iptables在 Linux 路由器上
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -I FORWARD -i eth1 -o eth0 -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT #用于静态路由
iptables -I FORWARD -i eth0 -o eth1 -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT #用于静态路由

我还发现将输入链的策略设置为丢弃有帮助,因为它会丢弃导致重置的不需要的数据包,但在我看来这只是一个肮脏的修复。

相关内容