
我從追蹤路由得到這個輸出:
#traceroute -i eth1 -s 192.168.12.14 192.168.1.72
1 192.168.12.1 (192.168.12.1) 1.410 ms 2.076 ms 2.251 ms
2 * * *
3 * * *
etc..
但在另一個終端中,我可以看到來自目標主機的正確回應(連接埠無法存取):
9.964867 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable)
9.964879 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable)
9.964886 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable)
9.964904 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable)
9.964923 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable)
9.964927 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable)
起初我以為這是防火牆問題,但我檢查後發現沒有封包被丟棄。唯一想到的是這是第二個網卡...
如果我在第一個網卡上對同一台主機運行traceroute,我會得到與上面相同的wireshark跟踪(顯然具有不同的來源IP)——但是traceroute命令會成功。
我不明白wireshark如何看到回复,但traceroute在第二個網卡上失敗。
我想我在這裡錯過了一些非常基本的東西...
答案1
Wireshark 將顯示到達網路介面的內容。核心顯然已經看到了這些資料包,但由於某種原因決定不將它們傳遞給traceroute命令。
有一些事情可能會出錯,導致核心決定不傳送這些資料包。
- 您可能有不適合反向路徑過濾的非對稱路由,但已
rp_filter
啟用。 - 核心可能無法將 ICMP 錯誤訊息的內容與本機套接字進行比對。發生這種情況的原因可能是封包已被截斷,而沒有足夠的資訊可用於做出此類決定。發生這種情況也可能是由於某些 NAT 配置損壞,其中一個方向的資料包會透過 NAT 路由,但另一個方向則不路由。
- 由於校驗和錯誤,核心可能會丟棄資料包。
我認為這rp_filter
聽起來是最有可能的解釋。您沒有指定作業系統,但看起來可能是 Linux 系統,所以請嘗試以下命令:head /proc/sys/net/ipv4/conf/*/rp_filter
。您可能會1
在其中每一個上看到,這表示過濾器已啟用。嘗試將 a 寫入0
與丟棄資料包的介面相對應的介面以及all
設備名稱。
答案2
你能在這裡發布每個盒子的路由表的輸出嗎?如果預設路由無效/缺失,封包將沒有返迴路徑。請發布以下輸出:
#ip路由列表
在每個 Linux 機器上。