Usare le appliance di rete virtuali in una rete virtuale

Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016, Azure Stack HCI, versioni 21H2 e 20H2

In questo argomento si apprenderà come distribuire appliance virtuali di rete nelle reti virtuali tenant. È possibile aggiungere appliance virtuali di rete alle reti che eseguono funzioni di routing e mirroring delle porte definite dall'utente.

Tipi di appliance virtuali di rete

È possibile usare uno dei due tipi di appliance virtuali:

  1. Routing definito dall'utente: sostituisce i router distribuiti nella rete virtuale con le funzionalità di routing dell'appliance virtuale. Con il routing definito dall'utente, l'appliance virtuale viene usata come router tra le subnet virtuali nella rete virtuale.

  2. Mirroring delle porte: tutto il traffico di rete che entra o esce dalla porta monitorata viene duplicato e inviato a un'appliance virtuale per l'analisi.

Distribuzione di un'appliance virtuale di rete

Per distribuire un'appliance virtuale di rete, è prima necessario creare una macchina virtuale contenente l'appliance e quindi connettere la macchina virtuale alle subnet di rete virtuale appropriate. Per altre informazioni, vedere Creare una macchina virtuale tenant e connettersi a una rete virtuale tenant o a VLAN.

Alcune appliance richiedono più adapter di rete virtuale. In genere, un adapter di rete dedicato alla gestione dell'appliance e adapter aggiuntivi che elaborano il traffico. Se l'appliance richiede più adapter di rete, è necessario creare ogni interfaccia di rete nel controller di rete. È inoltre necessario assegnare un ID di interfaccia in ogni host per ognuno degli adapter aggiuntivi presenti in subnet virtuali diverse.

Dopo aver distribuito l'appliance virtuale di rete, è possibile usare l'appliance per il routing definito, il mirroring delle porte o entrambi.

Esempio: Routing definito dall'utente

Per la maggior parte degli ambienti, sono necessarie solo le route di sistema già definite dal router distribuito della rete virtuale. Potrebbe tuttavia essere necessario creare una tabella di routing e aggiungere una o più route in casi specifici, ad esempio:

  • Il tunneling forzato a Internet tramite la rete locale.
  • Uso di appliance virtuali nell'ambiente in uso.

Per questi scenari, è necessario creare una tabella di routing e aggiungere route definite dall'utente alla tabella. È possibile avere più tabelle di routing ed è possibile associare la stessa tabella di routing a una o più subnet. È possibile associare ogni subnet a una singola tabella di routing. Tutte le macchine virtuali in una subnet usano la tabella di routing associata alla subnet.

Le subnet si basano sulle route di sistema fino a quando non viene associata una tabella di routing alla subnet. Dopo l'esistenza di un'associazione, il routing viene eseguito in base alla corrispondenza con prefisso più lungo (LPM) tra route definite dall'utente e route di sistema. Se sono presenti più route con la stessa corrispondenza LPM, viene selezionata la route definita dall'utente prima della route di sistema.

Procedura:

  1. Creare le proprietà della tabella di route, che contiene tutte le route definite dall'utente.

    Le route di sistema vengono comunque applicate in base alle regole definite in precedenza.

     $routetableproperties = new-object Microsoft.Windows.NetworkController.RouteTableProperties
    
  2. Aggiungere una route alle proprietà della tabella di routing.

    Qualsiasi route destinata alla subnet 12.0.0.0/8 viene instradata all'appliance virtuale alla 192.168.1.10. L'appliance deve avere un adapter di rete virtuale collegato alla rete virtuale con tale indirizzo IP assegnato a un'interfaccia di rete.

     $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
    

    Suggerimento

    Per aggiungere altre route, ripetere questo passaggio per ogni route che si vuole definire.

  3. Aggiungere la tabella di routing al controller di rete.

     $routetable = New-NetworkControllerRouteTable -ConnectionUri $uri -ResourceId "Route1" -Properties $routetableproperties
    
  4. Applicare la tabella di routing alla subnet virtuale.

    Quando si applica la tabella di route alla subnet virtuale, la prima subnet virtuale nella rete Tenant1_Vnet1 usa la tabella di route. È possibile assegnare la tabella di route a tutte le subnet della rete virtuale desiderate.

     $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
    

Non appena si applica la tabella di routing alla rete virtuale, il traffico viene inoltrato all'appliance virtuale. È necessario configurare la tabella di routing nell'appliance virtuale per inoltrare il traffico in modo appropriato per l'ambiente in uso.

Esempio: Mirroring delle porte

In questo esempio si configura il traffico per MyVM_Ethernet1 per eseguire il mirroring di Appliance_Ethernet1. Si presuppone che siano state distribuite due macchine virtuali, una come appliance e l'altra come macchina virtuale da monitorare con il mirroring.

L'appliance deve avere una seconda interfaccia di rete per la gestione. Dopo aver abilitato il mirroring come destinazione in Appliciance_Ethernet1, non riceve più traffico destinato all'interfaccia IP configurata.

Procedura:

  1. Ottenere la rete virtuale in cui si trovano le macchine virtuali.

    $vnet = Get-NetworkControllerVirtualNetwork -ConnectionUri $uri -ResourceId "Tenant1_VNet1"
    
  2. Ottenere le interfacce di rete del controller di rete per l'origine e la destinazione del mirroring.

    $dstNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "Appliance_Ethernet1"
    $srcNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  3. Creare un oggetto serviceinsertionproperties per contenere le regole di mirroring delle porte e l'elemento che rappresenta l'interfaccia di destinazione.

    $portmirror = [Microsoft.Windows.NetworkController.ServiceInsertionProperties]::new()
    $portMirror.Priority = 1
    
  4. Creare un oggetto serviceinsertionrules per contenere le regole che devono essere abbinate affinché il traffico venga inviato all'appliance.

    Le regole definite di seguito corrispondono a tutto il traffico, sia in ingresso che in uscita, che rappresenta un mirror tradizionale. È possibile modificare queste regole se si è interessati al mirroring di una porta specifica o a una destinazione/origine specifica.

    $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. Creare un oggetto serviceinsertionelements per contenere l'interfaccia di rete dell'appliance con mirroring.

    $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. Aggiungere l'oggetto di inserimento del servizio in Controller di rete.

    Quando si esegue questo comando, tutto il traffico verso l'interfaccia di rete dell'appliance specificata nel passaggio precedente si arresta.

    $portMirror = New-NetworkControllerServiceInsertion -ConnectionUri $uri -Properties $portmirror -ResourceId "MirrorAll"
    
  7. Aggiornare l'interfaccia di rete dell'origine per il mirroring.

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

Dopo aver completato questi passaggi, l'interfaccia Appliance_Ethernet1 esegue il mirroring del traffico dall'interfaccia MyVM_Ethernet1.