Linux服務器可以ping,但是telnet端口超時,網站wget超時,訪問超時的解決辦法


 

最近無法通過SSH連接Linux服務器,訪問該服務器上的HTTP服務也出現異常。可以ping,但是telnet端口超時,網站wget超時,訪問超時。

最后排查是內核配置問題

原來是 net.ipv4.tcp_timestamps 設置了為 1 ,即啟用時間戳

cat /proc/sys/net/ipv4/tcp_timestamps

這時將其關閉

修改 /etc/sysctl.conf 中

net.ipv4.tcp_timestamps = 0

sysctl -p

生效

原理:

問題出在了 tcp 三次握手,ping 的通 icmp ok ,http ssh mysql 都不 ok

經過nat之后,如果前面相同的端口被使用過,且時間戳大於這個鏈接發出的syn中的時間戳,服務器上就會忽略掉這個syn,不返會syn-ack消息,表現為用戶無法正常完成tcp3次握手,從而不能打開web頁面。在業務閑時,如果用戶nat的端口沒有被使用過時,就可以正常打開;業務忙時,nat端口重復使用的頻率高,很難分到沒有被使用的端口,從而產生這種問題。

只有客戶端和服務端都開啟時間戳的情況下,才會出現能ping通不能建立tcp三次握手的情況

netstat -s | grep timestamp

在同一個內網環境下,多人使用同一個公網IP進行上網,這樣NAT之后是大大增加了端口的重復使用的概率,Centos7默認開起了TCP/IP建立的timestamp,所有導致TCP三次握手失敗。

cat /proc/sys/net/ipv4/tcp_tw_recycle
cat /proc/sys/net/ipv4/tcp_timestamps

net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_timestamps=0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM