在使用 iptables 做 nat 時(shí)鞭光,發(fā)現(xiàn)內(nèi)網(wǎng)機(jī)器 ping 某個(gè)域名 ping 的通,而使用 curl 測(cè)試不通
原來(lái)是 net.ipv4.tcp_timestamps 設(shè)置了為 1 植康,即啟用時(shí)間戳
cat /proc/sys/net/ipv4/tcp_timestamps
這時(shí)將其關(guān)閉
修改 /etc/sysctl.conf 中
net.ipv4.tcp_timestamps = 0
sysctl -p
生效
原理
問(wèn)題出在了 tcp 三次握手,ping 的通 icmp ok 展懈,http ssh mysql 都不 ok
經(jīng)過(guò)nat之后销睁,如果前面相同的端口被使用過(guò),且時(shí)間戳大于這個(gè)鏈接發(fā)出的syn中的時(shí)間戳存崖,服務(wù)器上就會(huì)忽略掉這個(gè)syn冻记,不返會(huì)syn-ack消息,表現(xiàn)為用戶無(wú)法正常完成tcp3次握手来惧,從而不能打開web頁(yè)面冗栗。在業(yè)務(wù)閑時(shí),如果用戶nat的端口沒(méi)有被使用過(guò)時(shí),就可以正常打開隅居;業(yè)務(wù)忙時(shí)钠至,nat端口重復(fù)使用的頻率高,很難分到?jīng)]有被使用的端口胎源,從而產(chǎn)生這種問(wèn)題棉钧。
只有客戶端和服務(wù)端都開啟時(shí)間戳的情況下,才會(huì)出現(xiàn)能ping通不能建立tcp三次握手的情況
netstat -s | grep timestamp