linux 丢弃SYN包的原因

作者: admin 分类: linux 发布时间: 2014-12-14 10:32 ė 6 没有评论

监控系统反复TELNET 多次以后导致无法TELNET通。
解决办法
当客户端发出的syn包带有时间戳的情况下,经过NAT转换后,如果使用的端口被之前使用过,而且时间戳大于本次syn包中的时间戳。系统将会直接丢弃。造成本次链接无法正常完成TCP/IP的3次握手。【该功能和rfc1323有关,后面有链接】
解决的方法很简单,分为两种:
在客户端:关闭rfc1323
在服务端:设置sysctl.conf里面tcp_timestamps=0也可以只用命令sysctl -w net.ipv4.tcp_timestamps=0

我运行后,奇迹出现了,通了。然后我检查其他能通的服务器,发现其他的服务器tcp_timestamps设置的就是1.
答案呼之欲出了.

因为我们的NRPE服务端是装在我们公司内部的服务器,而被监控端是在外地,而我们内部的服务器没有做时间同步,这个时间比当前时间(外部服务器时间)要大 ,当内部发出一个IP包到F5后,F5只对该包的源地址和目标地址进行修改,包的时间不会改(这个可以见 nat转发原理),F5把包转到后端后,由于后端的net.ipv4.tcp_timestamps这个参数是开启的,它会复用链接,并去检查这个IP包里面的时间是不是比当前的时间大,如果大,那么就丢弃该包(见rfc1323,TCP相关的,网上查到的),从而造成SYN-SENT发送后,没有回应。

本文出自 小Q,转载时请注明出处及相应链接。

本文永久链接: http://www.linuxqq.com/archives/1404.html

0
更多
Ɣ回顶部