Networking

Hyper-V 託管不一致的網路連接

  • March 21, 2019

我的兩台伺服器無法通信(以一種奇怪的方式),我遇到了問題。

伺服器都是 Microsoft Hyper-V Server 2012(沒有 GUI 的伺服器)。

名稱:HVS1

Ip 地址:10.0.0.11

託管名為 servidor 的 VM

名稱:HVS2

Ip 地址:10.0.0.12託管

名為 WMS-1 的 VM

每個都在從另一個複制虛擬機,直到大約一個月前,這一直執行良好。

我在這裡對這個問題的測試都具有以下特徵:

  1. 兩個防火牆都被禁用(帶有netsh advfirewall set allprofiles state off)所以我知道這些不是防火牆問題。
  2. 我總是按 IP 地址 ping(雖然我hosts在每台伺服器上都有他們名字的條目,所以這不是 DNS 問題)
  3. 我總是在兩個方向上ping,所以要麼都工作,要麼都不工作。我沒有任何 ping 僅以一種方式工作的情況。
  4. 所有主機都配置為響應 Ping。
  5. 一切都是 IP v4

我嘗試過的事情:

  1. 我無法在 10.0.0.11 和 10.0.0.12 之間 ping 通。這是我試圖解決的基本問題,正如我所期望的那樣,如果我可以讓這個連接正常工作,我的其他問題就會消失。
  2. 我可以從他們的虛擬機 ping 到主機並返回。所以,servidor可以ping HVS1。
  3. 我嘗試了不同的硬體開關,但沒有任何區別。
  4. 更高級別的服務也不起作用:Hyper-V 管理器無法在兩台主機之間連接,給出 RPC 錯誤(RPC 服務正在執行)。
  5. 進入 HVS1 的 RDP 可以工作,只要它不是來自 HVS2,但它非常慢,經常出現 10 秒的延遲。我沒有註意到伺服器中其他任何緩慢的地方。
  6. 從我的筆記型電腦 ping 到 HVS2 工作正常。
  7. 從我的筆記型電腦 Ping 到 HVS1 會造成 77% 的損失。大量數據包超時。這解釋了 RDP 滯後。HVS1 上的 NIC 或電纜出現故障,我聽說您認為?但…
  8. 從我的筆記型電腦 pingservidor可以完美執行。請注意,這是 HVS1 主機上的 VM,因此它通過與上述相同的 NIC 和電纜…所以???
  9. 從 HVS2 到 HVS1 的 Ping 是 100% 失去。反方向也一樣。
  10. ping from servidortowms-1工作正常。因此,從一台主機到另一台主機的虛擬機可以 ping,但主機不能。

那麼,有人可以向我解釋一下連接如何在相同的物理連接上工作,在某些情況下完美,在其他情況下不完美,而在其他情況下則完全不?

以及我接下來可以嘗試的任何建議?謝謝!

更新- 評論中要求的一些額外細節:

C:\>netsh int tcp show global Querying active state...

TCP Global Parameters  
----------------------------------------------  
Receive-Side Scaling State          : enabled  
Chimney Offload State               : disabled  
NetDMA State                        : disabled  
Direct Cache Access (DCA)           : disabled  
Receive Window Auto-Tuning Level    : normal  
Add-On Congestion Control Provider  : none  
ECN Capability     : enabled  
RFC 1323 Timestamps                 : disabled  
Initial RTO   : 3000  
Receive Segment Coalescing State    : enabled

查看我的適配器,我發現了一些我沒有預料到的東西 - 出於某種原因,那裡的適配器似乎有了一個新名稱,Ethernet 4. 我不記得這個編號了,聽起來好像是 Windows 自己重新做了一些事情並給出了一個新的編號。

PS C:\> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       
----                      --------------------                    ------- ------         
Ethernet 4                Realtek PCI GBE Family Controller            21 Up            
vEthernet (External)      Hyper-V Virtual Ethernet Adapter #2          23 Up           

更改為這個“新”適配器可能會導致 LSO 的不同行為:

PS C:\> Get-NetAdapterLso

Name                           Version         V1IPv4Enabled  IPv4Enabled  IPv6Enabled  
----                           -------         -------------  -----------  -----------  
Ethernet 4                     LSO Version 1   True           False        False  
vEthernet (External)           LSO Version 2   False          True         True  

司機資訊:

PS C:\> Get-NetAdapter -Physical | fl

Name                       : Ethernet 4  
InterfaceDescription       : Realtek PCI GBE Family Controller  
InterfaceIndex             : 21  
MacAddress                 : 00-14-D1-1D-57-11    
MediaType                  : 802.3  
PhysicalMediaType          : 802.3  
InterfaceOperationalStatus : Up 
AdminStatus                : Up  
LinkSpeed(Gbps)            : 1  
MediaConnectionState       : Connected  
ConnectorPresent           : True    
DriverInformation          : Driver Date 2011-10-20 Version 8.1.1020.2011 NDIS 6.30  

我嘗試為兩個適配器完全禁用 Lso,但問題似乎仍然存在:-(

更新 2:我注意到我有一個備用 NIC,與已有的完全相同,並嘗試交換它。問題仍然存在。我懷疑 Hyper-V 網路堆棧以某種方式損壞……

回答我自己的問題…

在根據收到的有用意見進行進一步診斷並嘗試使用新的 NIC 後,我排除了硬體原因。

對 Hyper-V 網路的一些研究讓我注意到 Hyper-V 不直接將主機連接到網路,而是通過虛擬化網路堆棧轉移它。所以上面描述的神秘行為並不那麼神秘,它們與我的管理主機虛擬適配器中的問題一致。

這可以通過 HVS1 上的適配器列表看到:

PS C:\Users\Administrator> Get-VMNetworkAdapter -all

Name                  IsManagementOs VMName    SwitchName MacAddress   Status IPAddresses
----                  -------------- ------    ---------- ----------   ------ -----------
External_InternalPort True                     External   00155DC08706 {Ok}
Network Adapter       False          servidor  External   00155DC08705 {Ok}   {10.0.0.10, fe80::a40d:a9b3:6a6c,...
Network Adapter       False          vm-linux2 External   00155DC08708        {}
Network Adapter       False          Win7Eval  External   00155DC08709        {}
Network Adapter       False          wms-1     External   00155DC08707        {}

問題在於External_InternalPort由 Hyper-V 自動創建並IsManagementOS設置為true的那個,當我勾選該複選框說該適配器可以由主機作業系統共享時。

將此與 HVS2 中的列表進行比較:

PS C:\Windows\system32> Get-VMNetworkAdapter -all

Name                  IsManagementOs VMName         SwitchName MacAddress   Status IPAddresses
----                  -------------- ------         ---------- ----------   ------ -----------
External_InternalPort True                          External   50465DB2CA1C {Ok}
Network Adapter       False          servidor       External   00155DC08705        {}
Network Adapter       False          SuiteCRM       External   00155DC08705        {}
Network Adapter       False          Ubuntu Desktop External   00155DC08706 {Ok}   {}
Network Adapter       False          vm-linux2      External   00155DC08708        {}
Network Adapter       False          wms-1          External   00155DC08707 {Ok}   {10.0.0.21, fe80::d920:9f00:59de:...

所以我的問題原來是那個重複的 MAC 地址00155DC08706

請注意,其他一些副本沒有問題,因為其中一些是 VM 在它們之間進行的複制。但是使用 ManagementOS 適配器的副本是有問題的(順便說一句,我不知道它是怎麼來的……)。我現在認識到這Ubuntu Desktop台機器是在我的問題開始時創建的,我只是從未關聯過這些事件。

自動關閉這台機器讓我的伺服器的連接再次正常執行。

我現在需要做的進一步工作:

  • 修復重複的 MAC 地址
  • 區分兩台伺服器上的 MAC 地址池配置,以避免將來發生事故

感謝您收到的幫助。

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