問題背景如下:
1,公司内網到某機房公網不通(ping,traceroute,curl都不行)
2,在某機房此公網的機器到公司内網也不通(ping,traceroute,curl都不行)
3,但是某機房此公網哪個的機器可以通過網關通外網,并且外網環境也能通路某機房公網ip,隻有公司内網到這些ip不同。
4,公司内網到其它幾個機房的公網都沒問題
公司内網到某機房公網不通的traceroute結果:
$ traceroute x.x.x.x
traceroute to x.x.x.x (x.x.x.x), 30 hops max, 60 byte packets
1 * * *
2 10.x.253.1 (10.x.253.1) 7.092 ms 7.388 ms 7.384 ms
3 10.x.2.2 (10.x.2.2) 7.372 ms 7.615 ms 8.347 ms
4 10.x.1.2 (10.x.1.2) 7.595 ms 8.335 ms 8.331 ms
5 192.x.168.254 (192.x.168.254) 8.879 ms 9.325 ms 10.077 ms
6 * * *
......
30 * * *
公司内網到其它機房公網正常的traceroute結果:
$ traceroute xx.xx.xx.xx
traceroute toxx.xx.xx.xx (xx.xx.xx.xx), 30 hops max, 60 byte packets
5 * * *
6 111.111.111.111 (111.111.111.111) 8.879 ms 9.325 ms 10.077 ms
7 * * *
8 xx.xx.xx.xx
問題分析解決步驟:(發現這個問題之後,感覺和奇怪,雖然不影響服務,但是好奇心還是驅使着想把問題搞清楚)
一,分析了一下某機房機器的路由,都正常沒有發現異常
二,我測試了某機房和其它機房之間的網絡,外網到某機房的網絡都是正常的。第一個懷疑對象就是覺得公司内網有限制,因為看traceroute結果,資料包還沒有出公司内網。是以,就和公司IT部門排查了一番,發現并沒有任何限制
三,然後,懷疑公司機房是否有相關限制呢。是以,又找網絡組查了一番,結果仍然是沒有任何限制
四,排除外部因素之後,就懷疑可能是系統有問題了。并且,通過在某機房的外網機器上抓包能抓到公司内網送達的traceroute包,隻是某機房的機器沒有回複資料包,那就更确定是系統本身的問題了。通過強大的google發現了rp_filter這個參數導緻了這個問題,因為我們某機房機器此參數為1.
rp_filter參數的作用:
置為1的作用為:資料包從哪個網口進來從哪個網口出去,如果不比對 丢棄。
結論:
公司内網到某機房機器的request資料包從公網網卡進入,而reply的資料包根據機器的路由規則則從某機房機器的内網網卡流出。而某機房機器rp_filter為1,進而導緻資料包被系統丢棄。而rp_filter這個參數預設是0,由于曆史原因被調整成了1,我們重新把管理的所有機器都調整為了預設值以解決類似問題。
本文轉自 leejia1989 51CTO部落格,原文連結:http://blog.51cto.com/leejia/1758405,如需轉載請自行聯系原作者