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