Debian

嘗試辨識 Linux Debian VM 上的頻寬使用/峰值

  • April 3, 2020

我正在嘗試確定在 Windows Server 2016 上的 Hyper-V 下執行的 Linux (Debian) VM 的問題。

問題是,在隨機的時間間隔內,我看到大量的頻寬峰值使物理伺服器網路埠最大化,從而導致與物理伺服器的連接失去。

在此處輸入圖像描述

我已經嘗試在 Hyper-V 伺服器的“頻寬管理”部分中限制虛擬機的頻寬,但它沒有任何效果。

在此處輸入圖像描述

我也嘗試過使用 Wondershaper ( https://github.com/magnific0/wondershaper ),雖然它似乎限制了“一些”流量,但我仍然看到巨大的峰值,所以它無法拾取導致這種情況的任何原因.

我也嘗試過使用 ethtool 來更改介面速度,但問題仍然存在。

在這個階段,我不知道是什麼原因造成的,以及如何預防。

任何人都可以提出其他建議,我可以嘗試找出可能導致這種情況的原因嗎?

謝謝。

更新:我在 VM 上安裝了 netatop 並發現了正在發生的問題(如下),但同樣,它沒有顯示正在發生的事情以及正在消耗頻寬的位置(除非我遺漏了一些東西)。您可以看到問題,但是如何超過我設置的 300Mbps 的網路介面速度?它正在錄製965Mbps,這怎麼可能?

在此處輸入圖像描述

更新 :

這是問題發生時在 tcpdump 擷取中看到的流量,因此絕對是惡意攻擊,有數千個這樣的條目,來自許多不同的 IP 地址,但都針對同一個 website.com 域並且都具有幾乎相同的有效負載.

0.000013 31.xxx.xxx.xxx 185.xxx.xxx.xxx DNS 1034 Standard query response 0x9764 ANY website.com RRSIG RRSIG RRSIG NSEC3PARAM website.com DNSKEY DNSKEY DNSKEY RRSIG RRSIG RRSIG RRSIG AAAA 2600:1f18:46d5:xxxx:xxxx:xxxx:91c8:a5b DNSKEY RRSIG RRSIG RRSIG RRSIG RRSIG SOA ns0.website.com TXT TXT TXT TXT TXT TXT TXT

我是否正確假設藍線代表入站流量(從外部下載到 VM)而紫線代表出站(從 VM 上傳到外部)?如果是這樣,則支持 Hyper-V 頻寬管理的 Windows 服務質量 (QoS) 功能將無法減少入站峰值

**注意:**您可以使用 QoS 來控制出站流量,但不能控制入站流量。例如,使用 Hyper-V 副本,您可以使用 QoS 來控制出站流量(來自主伺服器),但不能控制入站流量(來自副本伺服器)。

另請參閱此TechNet 討論,它加強了與 Hyper-V 的相關性:

我可以確認,

$$ Hyper-V maximum bandwidth $$僅適用於 VM 的出站流量。但是文件中沒有提到這個事實。這是錯誤還是功能?

嘗試辨識正在消耗頻寬的特定應用程序或服務。一種方法是使用Debian 儲存庫中提供的atop。但是,您需要手動安裝netatop核心模組,該模組啟用每個程序的網路記帳,但未包含在 Debian 軟體包中。完整的說明在網站上,並在此處進行了總結:

  1. 下載最新的netatop-xxtar.gz
  2. 安裝包zlib1g-devbuild-essentiallinux-headers-amd64(假設是 64 位架構)
  3. 建構並安裝模組和守護程序。從提取的存檔的頂級目錄並執行以下命令:
make
sudo make install
  1. 載入模組並啟動守護程序:
systemctl start netatop
  1. 載入模組並在啟動後自動啟動守護程序:
systemctl enable netatop

在虛擬機上執行sudo atop -n並等待網路峰值。您可能能夠通過其較高的 BANDWI 和 NET 值來發現有問題的服務,例如本例中的 sshd:

在此處輸入圖像描述

順便說一句,我假設您的網路圖專門測量虛擬機的網路適配器。如果不是——例如,如果它正在測量 Hyper-V 伺服器上的物理適配器——那麼它實際上可能是導致峰值的 Windows 程序。解決這個問題的方法是類似的,您首先要找到一個適用於 Windows 的頂級類似物。

更新:

您的螢幕截圖表明,在此時間段內第 3 層 IP 數據包的數量 ( ipi = 866802) 大大超過了 ICMP 數據包 ( icmpi = 199) 加上第 4 層 TCP/UDP 數據包 ( tcpi =4316, udpi =47) 的總和。這一點,再加上沒有任何正在執行的程序參與,表明虛擬機正被外部來源的格式錯誤(惡意?)流量淹沒。

您需要應用davidgo 的建議來使用 tcpdump。您可以使用它的一種方法是執行 bash 循環以等待每秒傳入的數據包超過門檻值:

#!/bin/bash
threshold=10000   # packets/sec; note that atop(1) reports packets per 10sec by default
waiting=1
while [[ $waiting -eq 1 ]]
do
   atopsar -w 10 1 | tail -n1 | awk "\$2 < $threshold {exit 1}"
   waiting=$?
done
tcpdump -ieth0 -w out.pcap

出現問題後,您可以將生成的out.pcap文件複製到另一台電腦,然後使用 Wireshark 打開它。從那裡,應用Statistics -> Endpoints以查看多餘流量的來源。如果您本地網路中的設備(甚至可能是 Hyper-V 伺服器)正在生成流量,那麼您可以重新配置它以停止。如果 Internet 上的單個 IP 正在生成流量,那麼您可以找到一種使用防火牆將其列入黑名單的方法。如果它有很多 IP,那麼您可能需要閱讀有關分佈式拒絕服務攻擊 (DDoS) 以及如何使用防火牆和/或 ISP 來阻止流量的資訊。許多 DDoS 文章都可以線上獲得,例如來自 Amazon 的這篇文章。

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