Creare route definite dall'utente (UDR) usando PowerShell

Sebbene l'utilizzo di route del sistema faciliti il traffico automaticamente per la distribuzione, esistono casi in cui si desidera controllare il routing dei pacchetti tramite un dispositivo virtuale. Questo è possibile tramite la creazione di route definite dall'utente che specifichino l'hop successivo per i pacchetti che passano a una subnet specifica per accedere all'applicazione virtuale e tramite l’attivazione dell'inoltro IP per la macchina virtuale in esecuzione come dispositivo virtuale.

Alcuni dei casi in cui possono essere utilizzati dispositivi di rete:

  • Monitoraggio del traffico con un sistema di rilevamento delle intrusioni (ID)
  • Controllo del traffico con un firewall

Per altre informazioni su UDR, l’inoltro IP vedere Route e inoltro IP definiti dall'utente.

Importante

Prima di iniziare a usare le risorse di Azure, è importante comprendere che Azure al momento offre due modelli di distribuzione, la distribuzione classica e Azure Resource Manager. È importante comprendere i modelli e strumenti di distribuzione prima di lavorare con le risorse di Azure. È possibile visualizzare la documentazione relativa a diversi strumenti facendo clic sulle schede nella parte superiore di questo articolo.

Questo articolo illustra il modello di distribuzione Gestione risorse. È possibile anche creare route definite dall'utente nel modello di distribuzione classica.

Scenario

Per illustrare meglio come creare un UDR, in questo documento verrà utilizzato lo scenario seguente.

DESCRIZIONE DELL’IMMAGINE

In questo scenario si creerà un UDR per la subnet front-end e un altro UDR per la subnet back-end, come descritto di seguito:

  • UDR-FrontEnd. Il front-end UDR verrà applicato per il subnet front-end , e contiene una route:
    • RouteToBackend. Questa route invia tutto il traffico nella subnet di back-end per la macchina virtuale FW1 .
  • Back-end di UDR. Il back-end UDR verrà applicato per il subnet back-end , e contiene una route:
    • RouteToFrontend. Questa route invia tutto il traffico nella subnet di front-end per la macchina virtuale FW1 .

La combinazione di queste route garantisce che tutto il traffico destinato da una subnet a un’altra venga indirizzato alla macchina virtuale FW1 , che viene utilizzato come un dispositivo virtuale. È inoltre necessario attivare l'inoltro IP per tale macchina virtuale, per garantire che possa ricevere il traffico destinato ad altre macchine virtuali.

I comandi di esempio PowerShell riportati di seguito prevedono un ambiente semplice già creato in base allo scenario precedente. Se si desidera eseguire i comandi così come sono visualizzati in questo documento, creare innanzitutto l'ambiente di test distribuendo questo modello, fare clic su Distribuisci in Azure, sostituire i valori di parametro predefiniti, se necessario e seguire le istruzioni nel portale.

Prerequisito: installare il modulo Azure PowerShell.

Per realizzare la procedura descritta in questo articolo, è necessario installare e configurare Azure PowerShell e seguire le istruzioni fino al termine della procedura per accedere ad Azure e selezionare la sottoscrizione desiderata.

Nota

Se non si dispone di un account Azure, è necessario procurarsene uno. Usare la versione di valutazione gratuita.

Creare la route definita dall'utente per la subnet front-end

Per creare la tabella di route e la route necessarie per la subnet front-end in base allo scenario precedente, seguire questa procedura:

  1. Creare una route usata per inviare tutto il traffico destinato alla subnet front-end (192.168.2.0/24) da instradare al dispositivo virtuale di rete FW1 (192.168.0.4).

    $route = New-AzureRmRouteConfig -Name RouteToBackEnd `
    -AddressPrefix 192.168.2.0/24 -NextHopType VirtualAppliance `
    -NextHopIpAddress 192.168.0.4
    
  2. Creare una tabella di route denominata UDR-FrontEnd nell'area westus contenente la route.

    $routeTable = New-AzureRmRouteTable -ResourceGroupName TestRG -Location westus `
    -Name UDR-FrontEnd -Route $route
    
  3. Creare una variabile contenente la rete virtuale in cui si trova la subnet. In questo scenario, la rete virtuale è denominata TestVNet.

    $vnet = Get-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name TestVNet
    
  4. Associare la tabella di route creata in precedenza alla subnet FrontEnd .

    Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name FrontEnd `
    -AddressPrefix 192.168.1.0/24 -RouteTable $routeTable
    
    Avviso

    L'output per il comando precedente mostra il contenuto per l'oggetto di configurazione della rete virtuale, che esiste solo nei computer in cui si esegue PowerShell. È necessario eseguire il cmdlet Set-AzureVirtualNetwork ,per salvare queste impostazioni in Azure.

  5. Salvare la nuova configurazione di subnet in Azure.

    Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
    

    Output previsto:

     Name              : TestVNet
     ResourceGroupName : TestRG
     Location          : westus
     Id                : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet
     Etag              : W/"[Id]"
     ProvisioningState : Succeeded
     Tags              : 
                         Name         Value
                         ===========  =====
                         displayName  VNet 
    
     AddressSpace      : {
                           "AddressPrefixes": [
                             "192.168.0.0/16"
                           ]
                         }
     DhcpOptions       : {
                           "DnsServers": null
                         }
     NetworkInterfaces : null
     Subnets           : [
                             ...,
                           {
                             "Name": "FrontEnd",
                             "Etag": "W/\"[Id]\"",
                             "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/FrontEnd",
                             "AddressPrefix": "192.168.1.0/24",
                             "IpConfigurations": [
                               {
                                 "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICWEB2/ipConfigurations/ipconfig1"
                               },
                               {
                                 "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICWEB1/ipConfigurations/ipconfig1"
                               }
                             ],
                             "NetworkSecurityGroup": {
                               "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd"
                             },
                             "RouteTable": {
                               "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/routeTables/UDR-FrontEnd"
                             },
                             "ProvisioningState": "Succeeded"
                           },
                             ...
                         ]    
    

Creare la route definita dall'utente per la subnet back-end

Per creare la tabella di route e la route necessarie per la subnet back-end in base allo scenario precedente, seguire questa procedura.

  1. Creare una route usata per inviare tutto il traffico destinato alla subnet front-end (192.168.1.0/24) da instradare al dispositivo virtuale di rete FW1 (192.168.0.4).

    $route = New-AzureRmRouteConfig -Name RouteToFrontEnd `
    -AddressPrefix 192.168.1.0/24 -NextHopType VirtualAppliance `
    -NextHopIpAddress 192.168.0.4
    
  2. Creare una tabella di route denominata UDR-BackEnd nell'area uswest contenente la route creata in precedenza.

    $routeTable = New-AzureRmRouteTable -ResourceGroupName TestRG -Location westus `
    -Name UDR-BackEnd -Route $route
    
  3. Associare la tabella di route creata in precedenza alla subnet BackEnd .

    Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name BackEnd `
    -AddressPrefix 192.168.2.0/24 -RouteTable $routeTable
    
  4. Salvare la nuova configurazione di subnet in Azure.

    Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
    

    Output previsto:

     Name              : TestVNet
     ResourceGroupName : TestRG
     Location          : westus
     Id                : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet
     Etag              : W/"[Id]"
     ProvisioningState : Succeeded
     Tags              : 
                         Name         Value
                         ===========  =====
                         displayName  VNet 
    
     AddressSpace      : {
                           "AddressPrefixes": [
                             "192.168.0.0/16"
                           ]
                         }
     DhcpOptions       : {
                           "DnsServers": null
                         }
     NetworkInterfaces : null
     Subnets           : [
                           ...,
                           {
                             "Name": "BackEnd",
                             "Etag": "W/\"[Id]\"",
                             "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/BackEnd",
                             "AddressPrefix": "192.168.2.0/24",
                             "IpConfigurations": [
                               {
                                 "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICSQL2/ipConfigurations/ipconfig1"
                               },
                               {
                                 "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICSQL1/ipConfigurations/ipconfig1"
                               }
                             ],
                             "NetworkSecurityGroup": {
                               "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-BacEnd"
                             },
                             "RouteTable": {
                               "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/routeTables/UDR-BackEnd"
                             },
                             "ProvisioningState": "Succeeded"
                           }
                         ]
    

Abilitare l'inoltro dell'indirizzo IP su FW1

Per abilitare l'inoltro dell'indirizzo IP nella scheda di interfaccia di rete usata da FW1, attenersi alla procedura seguente.

  1. Creare una variabile contenente le impostazioni per la scheda di interfaccia di rete usata da FW1. In questo scenario, la scheda di interfaccia di rete è denominata NICFW1.

    $nicfw1 = Get-AzureRmNetworkInterface -ResourceGroupName TestRG -Name NICFW1
    
  2. Attivare l'inoltro dell'indirizzo IP e salvare le impostazioni della scheda di interfaccia di rete.

    $nicfw1.EnableIPForwarding = 1
    Set-AzureRmNetworkInterface -NetworkInterface $nicfw1
    

    Output previsto:

     Name                 : NICFW1
     ResourceGroupName    : TestRG
     Location             : westus
     Id                   : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICFW1
     Etag                 : W/"[Id]"
     ProvisioningState    : Succeeded
     Tags                 : 
                            Name         Value                  
                            ===========  =======================
                            displayName  NetworkInterfaces - DMZ
    
     VirtualMachine       : {
                              "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/FW1"
                            }
     IpConfigurations     : [
                              {
                                "Name": "ipconfig1",
                                "Etag": "W/\"[Id]\"",
                                "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICFW1/ipConfigurations/ipconfig1",
                                "PrivateIpAddress": "192.168.0.4",
                                "PrivateIpAllocationMethod": "Static",
                                "Subnet": {
                                  "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/DMZ"
                                },
                                "PublicIpAddress": {
                                  "Id": "/subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/PIPFW1"
                                },
                                "LoadBalancerBackendAddressPools": [],
                                "LoadBalancerInboundNatRules": [],
                                "ProvisioningState": "Succeeded"
                              }
                            ]
     DnsSettings          : {
                              "DnsServers": [],
                              "AppliedDnsServers": [],
                              "InternalDnsNameLabel": null,
                              "InternalFqdn": null
                            }
     EnableIPForwarding   : True
     NetworkSecurityGroup : null
     Primary              : True