Traceroute:有時路由器不回應並且使用者看到超時

Traceroute:有時路由器不回應並且使用者看到超時

我是小型網路的管理員,我正在調查用戶抱怨的問題。他們抱怨的根源是traceroute:有時路徑上的路由器根本不會回應traceroute探測,使用者會看到逾時(這些*逾時取代了 RTT)。

該網路由一些透過乙太網路/無線連接的 Linux 路由器組成。 Linux 路由器 99% 空閒,連結使用率 20 Mbit/s,2000 個資料包/秒。無線堅如磐石。路徑上所有路由器的 PING 時間為 10 毫秒,當然會有一些變化。對任何這些主機的 Flood PING 運行幾分鐘,沒有任何資料包遺失(我的意思是 0 個資料包遺失)。透過網路下載一些大檔案:平均 10.2 MB/s。

這個例子正確的 traceroute看起來像這樣:

# traceroute -nI 10.0.0.2
traceroute to 10.0.0.2 (10.0.0.2), 30 hops max, 60 byte packets
 1  192.168.0.1  3.919 ms  3.866 ms  4.117 ms
 2  10.41.13.1  4.149 ms  6.714 ms  6.707 ms
 3  10.41.1.11  8.475 ms  8.468 ms  8.705 ms
 4  10.0.0.2  8.697 ms  9.428 ms  9.707 ms

有問題的 traceroute看起來像這樣:

# traceroute -nI 10.0.0.2
traceroute to 10.0.0.2 (10.0.0.2), 30 hops max, 60 byte packets
 1  192.168.0.1  3.190 ms  3.140 ms  3.128 ms
 2  10.41.13.1  3.119 ms  3.113 ms *
 3  10.41.1.11  3.697 ms *  3.683 ms
 4  10.0.0.2  4.531 ms  4.524 ms  5.171 ms
# traceroute -nI 10.0.0.2
traceroute to 10.0.0.2 (10.0.0.2), 30 hops max, 60 byte packets
 1  192.168.0.1  3.471 ms  3.405 ms  3.388 ms
 2  10.41.13.1  3.372 ms  3.359 ms  3.350 ms
 3  10.41.1.11  5.039 ms * *
 4  10.0.0.2  5.105 ms  5.484 ms  5.473 ms

我調查了一下tcpdump,發現它的traceroute工作原理是這樣的:

  1. 首先發送一堆TTL為1,2,3,4,5,6的ICMP請求。那是 18 個資料包:)
  2. 所有回覆都會等待一段時間 ( Time Exceeded)。
  3. 當所有回復返回後,顯示結果。
  4. ..或等待超時並顯示缺少回應並標有星號的結果。

逾時的原因是 - 路由器收到所有 3 個相應的請求,但有時不回應,它們不發送 ICMP 逾時。

我懷疑有一些設定在路由器上設定了此行為。即icmp_速率限制,icmp_速率掩碼,icmp_msgs_per_secicmp_msgs_burst。一切都以某種方式描述在 kernel.org 文件中。這就是我失敗的地方。我沒有提供這些變數的任何值來traceroute始終完成工作。

我嘗試在所有路由器上進行此設定:

  • icmp_ratelimit設定為0(不限制任何內容)
  • icmp_msgs_per_sec設定為10000(應該足夠高)
  • icmp_msgs_burst設定為5000(南高)

這對我沒有幫助,我看到了同樣的行為,隨機超時。我沒有搞亂icmp_ratemask,因為我不完全理解如何Time Exceeded從限制中排除 's 。

最後,問題是:

  1. 如果您熟悉此類traceroute問題,您是如何解決的?
  2. 如果您熟悉上述內核設置,那麼什麼是“足夠好”值?
  3. icmp_ratemask修改不限制Time Exceeded訊息以使traceroute工作順利進行的正確方法是什麼?
  4. 另外 - 更改這些(或任何相關)設定時是否存在任何安全漏洞?我不想受到 DoS 攻擊,也不想成為任何人的 DDoS 攻擊來源。

答案1

作為跳數控制平面策略的一部分,ICMP 探測大多被忽略。如果您想在指標和趨勢、歷史數據方面獲得更全面的信息,我建議您使用專門的本地吸煙實例。

相關內容