天天看點

rp_filter導緻的網絡異常

問題背景如下:

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,如需轉載請自行聯系原作者

繼續閱讀