使用虛擬網路上的網路虛擬設備

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI 21H2 和 20H2 版本

在本主題中,您將瞭解如何在租用戶虛擬網路上部署網路虛擬設備。 您可以將網路虛擬設備新增至執行使用者定義路由和連接埠鏡像功能的網路。

網路虛擬設備類型

您可以使用兩種類型的虛擬裝置其中之一:

  1. 使用者定義的路由 - 以虛擬設備的路由功能取代虛擬網路上的分散式路由器。 透過使用者定義的路由,虛擬設備會當作虛擬網路上虛擬子網路之間的路由器來使用。

  2. 連接埠鏡像 - 所有進入或離開受監視連接埠的網路流量都會被複製,並傳送到虛擬設備進行分析。

部署網路虛擬設備

若要部署網路虛擬設備,您必須先建立包含該設備的 VM,然後將 VM 連線到適當的虛擬網路子網路。 如需詳細資訊,請參閱建立租用戶 VM 並連線至租用戶虛擬網路或 VLAN

某些設備需要多個虛擬網路介面卡。 通常,一張網路介面卡專用於設備管理,其他介面卡則處理流量。 如果您的設備需要多個網路介面卡,您必須在網路控制站中建立每個網路介面。 您也必須為每個位於不同虛擬子網路的其他介面卡,在每個主機上指派介面識別碼。

部署網路虛擬設備之後,您將設備使用於已定義路由、連接埠鏡像或兩者。

範例:使用者定義的路由

針對大部分的環境,您只需要虛擬網路分散式路由器已定義的系統路由。 不過,您可能需要建立路由表,並在特定情況下新增一個或多個路由,例如:

  • 強制透過內部部署網路作為通道連接到網際網路。
  • 在您的環境中使用虛擬設備。

在這些案例中,您必須建立路由表,並將使用者定義的路由新增至該表。 您可以有多個路由表,而且您可以將相同的路由表與一個或多個子網路關聯。 您只能將每個子網路與單一路由表關聯。 子網路中的所有 VM 都會使用與子網路關聯的路由表。

路由表與子網路關聯之前,該子網路會依賴系統路由。 關聯存在之後,會根據使用者定義的路由和系統路由之間的最長前置詞匹配 (LPM) 來完成路由。 如果有多個路由與相同的 LPM 相符,則會先選取使用者定義的路由,再選取系統路由。

程序:

  1. 建立路由表屬性,其中包含所有使用者定義的路由。

    系統路由仍會根據上面定義的規則套用。

     $routetableproperties = new-object Microsoft.Windows.NetworkController.RouteTableProperties
    
  2. 將路由新增至路由表屬性。

    任何目的地為 12.0.0.0/8 子網的路由,都會在 192.168.1.10 路由傳送至虛擬設備。 該設備必須具有連結至虛擬網路的虛擬網路介面卡,且該 IP 已指派給網路介面。

     $route = new-object Microsoft.Windows.NetworkController.Route
     $route.ResourceID = "0_0_0_0_0"
     $route.properties = new-object Microsoft.Windows.NetworkController.RouteProperties
     $route.properties.AddressPrefix = "0.0.0.0/0"
     $route.properties.nextHopType = "VirtualAppliance"
     $route.properties.nextHopIpAddress = "192.168.1.10"
     $routetableproperties.routes += $route
    

    提示

    如果您想要新增更多路由,請針對您想要定義的每個路由重複此步驟。

  3. 將路由表新增至網路控制站。

     $routetable = New-NetworkControllerRouteTable -ConnectionUri $uri -ResourceId "Route1" -Properties $routetableproperties
    
  4. 將路由表套用至虛擬子網路。

    當您將路由表套用至虛擬子網路時,Tenant1_Vnet1 網路中的第一個虛擬子網路會使用路由表。 您可以視需要將路由表指派給虛擬網路中任意數目的子網路。

     $vnet = Get-NetworkControllerVirtualNetwork -ConnectionUri $uri -ResourceId "Tenant1_VNet1"
     $vnet.properties.subnets[0].properties.RouteTable = $routetable
     new-networkcontrollervirtualnetwork -connectionuri $uri -properties $vnet.properties -resourceId $vnet.resourceid
    

一旦您將路由表套用至虛擬網路,流量就會轉送至虛擬設備。 您必須在虛擬設備中設定路由表,以適合您環境的方式轉寄流量。

範例:連接埠鏡像

在此範例中,您會將 MyVM_Ethernet1 的流量設定為鏡像 Appliance_Ethernet1。 我們假設您部署了兩個 VM,一個作為設備,另一個部署為 VM,以使用鏡像功能來監視。

該設備必須有第二個網路介面才能管理。 當您在 Appliciance_Ethernet1 上啟用鏡像作為目的地之後,它就不會再接收目的地為該處設定之 IP 介面的流量。

程序:

  1. 取得 VM 所在的虛擬網路。

    $vnet = Get-NetworkControllerVirtualNetwork -ConnectionUri $uri -ResourceId "Tenant1_VNet1"
    
  2. 取得鏡像來源和目的地的網路控制站網路介面。

    $dstNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "Appliance_Ethernet1"
    $srcNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  3. 建立 serviceinsertionproperties 物件,以包含連接埠鏡像規則和代表目的地介面的元素。

    $portmirror = [Microsoft.Windows.NetworkController.ServiceInsertionProperties]::new()
    $portMirror.Priority = 1
    
  4. 建立 serviceinsertionrules 物件,以包含必須匹配,才能將流量傳送至設備的規則。

    以下定義的規則符合所有流量,包含輸入流量和輸出流量,這代表傳統的鏡像。 如果您想要鏡像特定連接埠或特定來源/目的地,您可以調整這些規則。

    $portmirror.ServiceInsertionRules = [Microsoft.Windows.NetworkController.ServiceInsertionRule[]]::new(1)
    
    $portmirror.ServiceInsertionRules[0] = [Microsoft.Windows.NetworkController.ServiceInsertionRule]::new()
    $portmirror.ServiceInsertionRules[0].ResourceId = "Rule1"
    $portmirror.ServiceInsertionRules[0].Properties = [Microsoft.Windows.NetworkController.ServiceInsertionRuleProperties]::new()
    
    $portmirror.ServiceInsertionRules[0].Properties.Description = "Port Mirror Rule"
    $portmirror.ServiceInsertionRules[0].Properties.Protocol = "All"
    $portmirror.ServiceInsertionRules[0].Properties.SourcePortRangeStart = "0"
    $portmirror.ServiceInsertionRules[0].Properties.SourcePortRangeEnd = "65535"
    $portmirror.ServiceInsertionRules[0].Properties.DestinationPortRangeStart = "0"
    $portmirror.ServiceInsertionRules[0].Properties.DestinationPortRangeEnd = "65535"
    $portmirror.ServiceInsertionRules[0].Properties.SourceSubnets = "*"
    $portmirror.ServiceInsertionRules[0].Properties.DestinationSubnets = "*"
    
  5. 建立 serviceinsertionelements 物件,以包含鏡像設備的網路介面。

    $portmirror.ServiceInsertionElements = [Microsoft.Windows.NetworkController.ServiceInsertionElement[]]::new(1)
    
    $portmirror.ServiceInsertionElements[0] = [Microsoft.Windows.NetworkController.ServiceInsertionElement]::new()
    $portmirror.ServiceInsertionElements[0].ResourceId = "Element1"
    $portmirror.ServiceInsertionElements[0].Properties = [Microsoft.Windows.NetworkController.ServiceInsertionElementProperties]::new()
    
    $portmirror.ServiceInsertionElements[0].Properties.Description = "Port Mirror Element"
    $portmirror.ServiceInsertionElements[0].Properties.NetworkInterface = $dstNic
    $portmirror.ServiceInsertionElements[0].Properties.Order = 1
    
  6. 在網路控制站中新增服務插入物件。

    當您發出此命令時,流向上一個步驟所指定設備網路介面的所有流量都會停止。

    $portMirror = New-NetworkControllerServiceInsertion -ConnectionUri $uri -Properties $portmirror -ResourceId "MirrorAll"
    
  7. 將來源的網路介面更新為鏡像。

    $srcNic.Properties.IpConfigurations[0].Properties.ServiceInsertion = $portMirror
    $srcNic = New-NetworkControllerNetworkInterface -ConnectionUri $uri  -Properties $srcNic.Properties -ResourceId $srcNic.ResourceId
    

完成這些步驟之後,Appliance_Ethernet1 介面會鏡像來自 MyVM_Ethernet1 介面的流量。