window7的Tcp1323Opts與linux的net.ipv4.tcp_timestamps和NAT

最近遇到一個內網win7用戶無法上部分網站的問題,同網段的其他機器都是正常,出問題的機器訪問其他網站也是正常。
網絡結構簡單,client<->源地址轉換NAT<->網站
經過在server上抓包發現,server上有時會對client的syn包無響應。

依次排查了服務器的iptables\backlog\syncookies依然沒有效果,通過google查到了這樣一個鏈接

http://www.spinics.net/lists/linux-net/msg17195.html

這個上面出的問題和我們遇到的非常相似,測試了下,完全解決問題。
通過我們測試,部分win7系統中的註冊表中有Tcp1323Opts這個選項,會導致其在發包時加入時間戳,經過nat之後,如果前面相同的端口被使用 過,且時間戳大於這個鏈接發出的syn中的時間戳,就會導致在服務器上忽略掉這個syn。表現爲用戶無法正常完成tcp3次握手。方法是在服務器上禁止


1 

sysctl -w net.ipv4.tcp_timestamps=0

或者修改客戶端的註冊表Tcp1323Opts設置爲0。

rfc1323
http://www.faqs.org/rfcs/rfc1323.html
Tcp1323Opts
http://technet.microsoft.com/en-us/library/cc938205.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章