仮想ネットワーク上でネットワーク仮想アプライアンスを使用する

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI バージョン 21H2 および 20H2

このトピックでは、テナントの仮想ネットワーク上にネットワーク仮想アプライアンスを展開する方法について説明します。 これらのネットワーク仮想アプライアンスは、ユーザー定義のルーティングおよびポート ミラーリング機能を実行するネットワークに追加できます。

ネットワーク仮想アプライアンスの種類

次の 2 種類の仮想アプライアンスのどちらかを使用できます。

  1. ユーザー定義のルーティング - 仮想ネットワーク上の分散ルーターを仮想アプライアンスのルーティング機能に置き換えます。 ユーザー定義のルーティングを使用すると、仮想アプライアンスは仮想ネットワーク上の仮想サブネット間のルーターとして使用されます。

  2. ポート ミラーリング - 監視対象のポート上で送受信されるすべてのネットワーク トラフィックが複製され、分析のために仮想アプライアンスに送信されます。

ネットワーク仮想アプライアンスの展開

ネットワーク仮想アプライアンスを展開するには、まずそのアプライアンスが含まれている VM を作成してから、その VM を適切な仮想ネットワーク サブネットに接続する必要があります。 詳細については、テナント VM の作成およびテナントの仮想ネットワークまたは VLAN への接続に関するページを参照してください。

アプライアンスによっては、複数の仮想ネットワーク アダプターが必要になる場合があります。 通常は、1 つのネットワーク アダプターがアプライアンス管理専用であるのに対して、追加のアダプターはトラフィックを処理します。 アプライアンスに複数のネットワーク アダプターが必要な場合は、ネットワーク コントローラーで各ネットワーク インターフェイスを作成する必要があります。 また、異なる仮想サブネット上に存在する追加のアダプターごとに、各ホストでインターフェイス ID を割り当てることも必要です。

ネットワーク仮想アプライアンスを展開したら、そのアプライアンスを定義されたルーティングまたはポート ミラーリング、あるいはその両方に使用できます。

例: ユーザー定義のルーティング

ほとんどの環境では、仮想ネットワークの分散ルーターによって既に定義されているシステム ルートだけが必要です。 ただし、次のような特定のケースでは、ルーティング テーブルを作成し、1 つ以上のルートを追加することが必要になる場合があります。

  • インターネットへのオンプレミス ネットワークを介した強制トンネリング。
  • 環境内での仮想アプライアンスの使用。

これらのシナリオでは、ルーティング テーブルを作成し、そのテーブルにユーザー定義ルートを追加する必要があります。 複数のルーティング テーブルを作成し、同じルーティング テーブルを 1 つ以上のサブネットに関連付けることができます。 各サブネットは、1 つのルーティング テーブルにしか関連付けることができません。 サブネット内のすべての 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
    

ルーティング テーブルを仮想ネットワークに適用するとすぐに、トラフィックが仮想アプライアンスに転送されます。 環境に適した方法でトラフィックを転送するように仮想アプライアンス内のルーティング テーブルを構成する必要があります。

例: ポート ミラーリング

この例では、Appliance_Ethernet1 をミラーリングするように MyVM_Ethernet1 へのトラフィックを構成します。 ここでは、2 つの VM が 1 つはアプライアンスとして、もう 1 つはミラーリングで監視する VM として展開されていることを前提にしています。

このアプライアンスには、管理のための 2 つ目のネットワーク インターフェイスが必要です。 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 インターフェイスからのトラフィックがミラーリングされます。