在办公室,我们遇到了一个有趣的情况:任何计算机与我们的测试服务器(托管在 AWS 上)建立连接(即使只是刷新网页)后,另一台计算机在一段时间内(大约 30 秒)将无法再连接。
第一台计算机仍然能够连接,并且第二台计算机的所有已经打开的连接仍然可以工作(如 SSH)。
仅当两台计算机位于同一网络/外部 IP 地址时才会发生这种情况。例如,如果第二台计算机使用 VPN - 它将能够连接。
显然,这远非最佳。
我正在尝试找出问题所在。Iptables 规则表完全是空的,除了一条规则,我添加了这条规则来记录 SSH 的传入连接(用于调试目的):
iptables -I INPUT -p tcp --dport 22 --syn -j LOG --log-prefix "22 SSH: "
这表明,虽然第二台计算机无法连接到 SSH,但数据包仍可到达服务器(并由 iptables 记录,数据如下:“LEN=48 TOS=0x00 PREC=0x00 TTL=49 ID=18889 DF PROTO=TCP SPT=54750 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0”)。
我还可以检查什么来找出这种奇怪行为的原因?
答案1
找到了。sysctl tcp_tw_recycle 设置为 1。显然,这会导致 NAT 后面的客户端出现问题(参考:https://stackoverflow.com/questions/8893888/dropping-of-connections-with-tcp-tw-recycle)