Networking

本地 DNS 啟動時,40 個節點的網路速度大幅下降

  • April 2, 2013

我們有一個帶有大約 40 個工作站(主要是 Windows)和幾台伺服器的 LAN。它們都使用一個內部 DNS(196.168.0.4執行BIND 9.5.0-P2)和一個網關(192.168.0.1執行 OpenBSD 包過濾器),它是一臺本地 PC,充當路由器。

在過去的幾個月裡,在工作日的某些時候,網路速度變慢到無法進行任何與網際網路相關的事情的程度。在那些糟糕的時期,ping8.8.8.8給出:

12:16:12.078: Timeout waiting for seq=11a1
12:16:13.484: From 8.8.8.8: bytes=60 SEQ=11a9 TTL=48 ID=0000 time=399.334ms
12:16:15.078: Timeout waiting for seq=11a4
12:16:15.437: From 8.8.8.8: bytes=60 SEQ=11ab TTL=48 ID=0000 time=355.409ms
12:16:18.078: Timeout waiting for seq=11a8
12:16:19.453: From 8.8.8.8: bytes=60 SEQ=11af TTL=48 ID=0000 time=376.317ms
12:16:21.078: Timeout waiting for seq=11aa
12:16:21.078: Timeout waiting for seq=11ac
12:16:21.390: From 8.8.8.8: bytes=60 SEQ=11b1 TTL=48 ID=0000 time=306.727ms
12:16:22.437: From 8.8.8.8: bytes=60 seq=11b2 TTL=48 ID=0000 time=364.351ms
12:16:23.453: From 8.8.8.8: bytes=60 seq=11b3 TTL=48 ID=0000 time=371.944ms
12:16:24.078: Timeout waiting for seq=11ad
12:16:24.078: Timeout waiting for seq=11ae
12:16:26.390: From 8.8.8.8: bytes=60 SEQ=11b6 TTL=48 ID=0000 time=307.729ms
12:16:27.078: Timeout waiting for seq=11b0
12:16:29.437: From 8.8.8.8: bytes=60 SEQ=11b9 TTL=48 ID=0000 time=361.575ms
12:16:30.078: Timeout waiting for seq=11b4
12:16:30.453: From 8.8.8.8: bytes=60 seq=11ba TTL=48 ID=0000 time=367.647ms
12:16:33.078: Timeout waiting for seq=11b5
12:16:33.078: Timeout waiting for seq=11b7

在那個確切的情況下,如果我關閉 DNS (at .0.4),那麼幾秒鐘後,網路的健康狀況再次變得非常好:

12:47:43.046: From 8.8.8.8: bytes=60 seq=190b TTL=48 ID=0000 time=70.555ms
12:47:44.046: From 8.8.8.8: bytes=60 seq=190c TTL=48 ID=0000 time=82.684ms
12:47:45.046: From 8.8.8.8: bytes=60 seq=190d TTL=48 ID=0000 time=72.368ms
12:47:46.062: From 8.8.8.8: bytes=60 seq=190e TTL=48 ID=0000 time=84.310ms
12:47:47.046: From 8.8.8.8: bytes=60 seq=190f TTL=48 ID=0000 time=75.137ms
12:47:48.046: From 8.8.8.8: bytes=60 seq=1910 TTL=48 ID=0000 time=75.791ms
12:47:49.062: From 8.8.8.8: bytes=60 seq=1911 TTL=48 ID=0000 time=94.252ms
12:47:50.046: From 8.8.8.8: bytes=60 seq=1912 TTL=48 ID=0000 time=76.547ms
12:47:51.046: From 8.8.8.8: bytes=60 seq=1913 TTL=48 ID=0000 time=70.251ms
12:47:52.046: From 8.8.8.8: bytes=60 seq=1914 TTL=48 ID=0000 time=83.033ms
12:47:53.046: From 8.8.8.8: bytes=60 seq=1915 TTL=48 ID=0000 time=76.589ms
12:47:54.046: From 8.8.8.8: bytes=60 seq=1916 TTL=48 ID=0000 time=82.060ms

這是非常一致和可重複的。我 ping (Google的公共 DNS)的事實8.8.8.8是完全隨機的,只是我必須測試網際網路連接的一種方式。我可能正在ping 206.190.36.45(雅虎公共網站的IP)。

DNS 不對外界開放。因此,我認為可能有一個(或多個)工作站非常糟糕地使用了 DNS(可能間接通過病毒)並用請求或其他東西淹沒了它。問題是我無法追溯。在0.4機器top上沒有給我任何 CPU 可疑活動,並且在0.1(網關)上使用dst host 192.168.0.4in過濾pftop不會給我任何使用 DNS 的內部 IP。

我已經嘗試將工作站的乙太網電纜一個接一個地拔掉,以找到一個可能有問題的工作站,但這個過程不是非常快速和準確,當網路穩定時,我不確定這是否是由於最後一個工作站我拔掉了電源,或者網路是否又好了。

關於下一步看哪裡的任何想法?

根據提供的資訊,我個人傾向於在 DNS 伺服器上使用 L2 交換循環和/或錯誤配置的鏈路聚合。它也可能是 L3 路由循環,但這似乎不太可能。但是,如果沒有更多資訊,我根本無法確定。

catch-22 是我沒有聲譽來評論這個問題,以澄清問題並在我發布之前確定這個答案是否有任何價值。希望這將為您指明正確的方向,並且您很快就會找到答案。

引用自:https://serverfault.com/questions/495075