NAT網路部分客戶端無法連線Server的解決方法
阿新 • • 發佈:2018-11-07
客戶端通過NAT連線上網,有的客戶端可以訪問server端,有的不可以,通過訪問固定請求的URL抓包排查和解決問題。
解決方法:
# sysctl -a |egrep "timest|recycle"
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_recycle = 1
在/etc/sysctl.conf檔案中新增
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 0
原因分析
1、http contains “/frontend” 過濾出來客戶端請求的這個URL。
2、跟蹤一下流(follow stream),看請求是否正常。
3、開啟客戶端的包,發現請求失敗的是重傳包,過濾一下 tcp.analysis.retransmission
可以看到有四次請求重傳
思考:
A、不是雲盾問題,因為雲盾是基於ip的;
B、檢查系統內沒有云鎖之類的軟體,iptables也沒開;
C、檢查系統引數 sysctl –p (-a列印所有)看到有timestamp;
4、對比timestamp
失敗的截圖
成功的截圖
成功的timestamp都很大,修改/etc/sysctl.conf檔案裡面得net.ipv4.tcp_timestamps=0即可
timestamp擴充套件:
同時開啟timestamp(時間戳)和tw_recycle(快速回收),會導致在一個MSL(多層資料交換)時間內只響應timestamp遞增的請求,對於時間戳較小的請求都拋棄了(不響應ack)。
MSL擴充套件: RFC793中規定MSL為2分鐘,也就是說2分鐘內同一個ip的請求的時間戳要求遞增,不是遞增的話伺服器不予響應。