公司内网是通过nat实现的,目前有同事反映其电脑可以正常访问其他网站,但不是能访问公司网站。公司的其他人员访问公司网站又正常。首先以为是公司网关的问题,看了下网关的规则里,没有屏蔽该机与公司网站相关的内容。公司内网的网络结构是:client<->源地址转换NAT<->网站 。通过查看server上的信息发现,server有时会对client的syn包无响应。
解决方法:通过网络搜索,发现了如下的链接。
http://www.spinics.net/lists/linux-net/msg17197.html
其提示如下
I've seen this. It happens only with NAT in the middle and OS X clients. It is cured by (1) setting tcp_timestamps off in Linux or (2) turning off rfc1323 on the Mac. sudo sysctl -w net.inet.tcp.rfc1323=0
通过测试发现可以通过以下方法解决:
1、在服务端(网站所在主机)解决
sysctl -w net.ipv4.tcp_timestamps=0 或 sudo sysctl -w net.inet.tcp.rfc1323=0
2、客户端解决
经网上查找发现,nat环境下出现该问题的机器多为win7系统。在win7的注册表中有Tcp1323Opts这个选项,会导致其在发包时加入时间戳,经过nat之后,如果前面相同的端口被使用 过,且时间戳大于这个链接发出的syn中的时间戳,就会导致在服务器上忽略掉这个syn。表现为用户无法正常完成tcp3次握手。
客户端解决的方法为修改注册表,将Tcp1323Opts设置为0 。
参考页面:
rfc1323
http://www.faqs.org/rfcs/rfc1323.html
Tcp1323Opts