前段时间遇到一个诡异的问题,连接走 NAT
转发会出现偶尔连接不通的情况,后来检查发现,NAT
加 tcp_timestamps
和 tcp_tw_recycle
会造成后端服务器丢包。
1 问题现象
有几个内网服务器,需要通过特定外网服务器做 NAT
去访问,这个 NAT
做的是 FULL NAT
,不仅替换了连接的 dst ip
,还替换了连接的 src ip
。然后发现 telnet
同一个 NAT
服务器的 IP 端口时,部分服务器能够连接,部分卡在那里,最后报一个连接超时的错误
telnet: connect to address xxx.xxx.xxx.xxx: Connection timed out
2 定位原因
在测试服务器上模拟现象
- 10.0.1.24: 连接端
- 192.168.41.34:
NAT
所在机器 - 192.168.41.31: 后端服务器所在机器
测试的时候触发连接不通的现象,在 NAT
服务器上使用 tcpdump
捉包,在 Wireshark
上查,发现从 Client
出来的握手包都已经转发到 Server
端