Configurare più interfacce di rete nelle macchine virtuali Linux su Azure

Si applica a: ✔️ macchine virtuali di Linux

Note

CentOS a cui si fa riferimento in questo articolo è una distribuzione Linux e raggiungerà End Of Life (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per altre informazioni, vedere Indicazioni sulla fine della vita di CentOS.

Riepilogo

Questo articolo illustra come configurare più interfacce di rete virtuale in Azure macchine virtuali Linux che eseguono le distribuzioni Linux più comuni.

È possibile creare una macchina virtuale Azure con più interfacce di rete collegate. Uno scenario comune consiste nell'avere subnet diverse per la connettività front-end e back-end o una rete dedicata a una soluzione di monitoraggio o backup.

Questo articolo fornisce la configurazione necessaria per il funzionamento di più interfacce di rete in una macchina virtuale Linux Azure basata sullo scenario di esempio seguente:

  • La macchina virtuale ha due o più interfacce di rete nella stessa subnet.
  • La macchina virtuale ha due o più interfacce di rete in subnet diverse, ma nella stessa Rete virtuale (VNET).

Per informazioni dettagliate, vedere gli screenshot seguenti:

In ogni scenario, la connettività può essere testata da qualsiasi macchina virtuale nella stessa rete virtuale.

Importante

Questo stesso processo può essere seguito anche nelle macchine virtuali con più di due schede di interfaccia di rete.

Configurare il sistema operativo guest per più interfacce di rete

Quando si aggiungono più interfacce di rete a una macchina virtuale Linux, è necessario creare regole di routing. Queste regole consentono alla macchina virtuale di inviare e ricevere traffico appartenente a un'interfaccia di rete specifica. In caso contrario, il traffico non può essere elaborato correttamente. Ad esempio, il traffico appartenente a eth1 non può essere elaborato correttamente dalla route predefinita definita.

Le sezioni seguenti forniscono la configurazione necessaria per due interfacce di rete che funzionano nelle macchine virtuali Linux che eseguono le distribuzioni Linux più comuni.

Note

Eseguire tutti i comandi nelle sezioni seguenti usando i privilegi di root (passando all'utente root o utilizzando il comando sudo).

In ogni sezione si supponga che la macchina virtuale abbia due interfacce di rete con una delle impostazioni seguenti:

  • Routing (output del comando sudo ip route show):

    • Due schede di interfaccia di rete nella stessa subnet:

      default via 10.0.1.1 dev eth0 proto static metric 100
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.4 metric 100
      10.0.1.0/24 dev eth1 proto kernel scope link src 10.0.1.5 metric 101
      168.63.129.16 via 10.0.1.1 dev eth0 proto dhcp metric 100
      169.254.169.254 via 10.0.1.1 dev eth0 proto dhcp metric 100
      
    • Due NIC in subnet diverse ma nella stessa VNET:

      default via 10.0.1.1 dev eth0 proto static metric 100
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.4 metric 100
      10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.5 metric 101
      168.63.129.16 via 10.0.1.1 dev eth0 proto dhcp metric 100
      169.254.169.254 via 10.0.1.1 dev eth0 proto dhcp metric 100
      
  • Interfacce (output del sudo ip address show comando):

    • Due schede di interfaccia di rete (NIC) nella stessa subnet:

      lo: inet 127.0.0.1/8 scope host lo
      eth0: inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0
      eth1: inet 10.0.1.5/24 brd 10.0.1.255 scope global eth1
      
    • Due NIC in subnet diverse ma nella stessa VNET.

      lo: inet 127.0.0.1/8 scope host lo
      eth0: inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0
      eth1: inet 10.0.2.5/24 brd 10.0.2.255 scope global eth1
      
  1. Aggiungere due tabelle di routing al file /etc/iproute2/rt_tables eseguendo i comandi seguenti (è necessaria una voce per scheda di interfaccia di rete):

    sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
    sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
    

    Se alla macchina virtuale sono collegate più interfacce di rete, aggiungere tabelle di routing aggiuntive, ad esempio 202 eth2-rt, 203 eth3-rt e così via.

  2. Assicurarsi che esista un file di configurazione per ogni interfaccia di rete nella directory /etc/sysconfig/network-scripts/ . È possibile creare nuovi file di configurazione dell'interfaccia di rete in base al file di configurazione ifcfg-eth0 (modificare la DEVICE riga e rimuovere le DHCP_HOSTNAME righe e HWADDR dal nuovo file). A tale scopo, eseguire i seguenti comandi:

    sudo cat /etc/sysconfig/network-scripts/ifcfg-eth0 > /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i 's/DEVICE=eth0/DEVICE=eth1/' /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i '/DHCP_HOSTNAME/d' /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth1
    
  3. Per rendere persistente e applicata la modifica durante l'attivazione dello stack di rete, modificare i file /etc/sysconfig/network-scripts/ifcfg-eth0 e /etc/sysconfig/network-scripts/ifcfg-eth1 (ifcfg-eth2, ifcfg-eth3 e così via, se la macchina virtuale ha più di due interfacce di rete) e modificare il valore di NM_CONTROLLED da yes a no. A tale scopo, eseguire i seguenti comandi:

    sudo cp -rp /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ifcfg-eth0.bkp
    sudo cp -rp /etc/sysconfig/network-scripts/ifcfg-eth1 /tmp/ifcfg-eth1.bkp
    sudo sed -i 's/NM_CONTROLLED=yes/NM_CONTROLLED=no/' /etc/sysconfig/network-scripts/ifcfg-eth0
    sudo sed -i 's/NM_CONTROLLED=yes/NM_CONTROLLED=no/' /etc/sysconfig/network-scripts/ifcfg-eth1
    

    Note

    Verificare che la NM_CONTROLLED=no riga venga aggiunta sia ai file /etc/sysconfig/network-scripts/ifcfg-eth0 e /etc/sysconfig/network-scripts/ifcfg-eth1 usando il cat /etc/sysconfig/network-scripts/ifcfg-eth* comando . Se la riga non è presente nei file, aggiungerla manualmente usando i sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0 comandi e sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth1 .

  4. Dopo aver modificato questa configurazione, riavviare i servizi di rete per applicare le modifiche eseguendo il comando seguente:

    sudo systemctl restart network
    
  5. Creare file di regola e route corrispondenti usando qualsiasi editor di testo (negli esempi seguenti viene usato l'editor vi) e aggiungere regole e route appropriate a ogni file. Usare la procedura seguente per creare un set di file rule-eth# e route-eth# per ogni interfaccia di rete. Sostituire l'indirizzo IP e le informazioni sulla subnet di conseguenza in ogni passaggio. Se sono presenti più interfacce di rete, creare lo stesso set di file rule-eth# e route-eth# per ogni interfaccia usando l'indirizzo IP, la rete e i dettagli del gateway corrispondenti.

    • Creare regole e route per eth0:

      1. Per creare il file della regola per eth0, aprire il file /etc/sysconfig/network-scripts/rule-eth0.

        sudo vi /etc/sysconfig/network-scripts/rule-eth0
        
      2. Aggiungere il contenuto seguente al file della regola. Sostituire di conseguenza l'indirizzo IP, assicurarsi di specificare l'indirizzo IPv4 nella configurazione e mantenere il valore a 32 bit:

        from 10.0.1.4/32 table eth0-rt
        to 10.0.1.4/32 table eth0-rt
        
      3. Per creare il file di route per eth0, aprire il file /etc/sysconfig/network-scripts/route-eth0.

        sudo vi /etc/sysconfig/network-scripts/route-eth0
        
      4. Aggiungere il contenuto seguente al file di route. Sostituire di conseguenza i valori di rete e gateway.

        10.0.1.0/24 dev eth0 table eth0-rt
        default via 10.0.1.1 dev eth0 table eth0-rt
        
    • Creare regole e route per eth1:

      1. Per creare il file della regola per eth1, aprire il file /etc/sysconfig/network-scripts/rule-eth1.

        sudo vi /etc/sysconfig/network-scripts/rule-eth1
        
      2. Aggiungere il contenuto seguente al file della regola. Sostituire di conseguenza l'indirizzo IP, assicurarsi di specificare l'indirizzo IPv4 nel comando e mantenere il valore a 32 bit.

        • Due schede di interfaccia di rete (NIC) nella stessa subnet:

          from 10.0.1.5/32 table eth1-rt
          to 10.0.1.5/32 table eth1-rt
          
        • Due NIC in subnet diverse ma nella stessa VNET.

          from 10.0.2.5/32 table eth1-rt
          to 10.0.2.5/32 table eth1-rt
          
      3. Per creare il file di route per eth1, aprire il file /etc/sysconfig/network-scripts/route-eth1.

        sudo vi /etc/sysconfig/network-scripts/route-eth1
        
      4. Aggiungere il contenuto seguente al file di route. Sostituire di conseguenza i valori di rete e gateway.

        • Due schede di interfaccia di rete (NIC) nella stessa subnet:

          10.0.1.0/24 dev eth1 table eth1-rt
          default via 10.0.1.1 dev eth1 table eth1-rt
          
        • Due NIC in subnet diverse ma nella stessa VNET.

          10.0.2.0/24 dev eth1 table eth1-rt
          default via 10.0.2.1 dev eth1 table eth1-rt
          
  6. Per applicare le modifiche, eseguire il comando seguente per riavviare il servizio di rete:

    sudo systemctl restart network
    

    Le regole di routing sono ora impostate correttamente e la connettività dovrebbe funzionare da qualsiasi interfaccia di rete. È possibile testare la connettività usando Secure Shell (SSH) o eseguendo il ping di entrambi gli indirizzi IP da una macchina virtuale nella stessa rete virtuale.

  7. Verificare che le route e le regole correnti vengano caricate usando i comandi seguenti:

    sudo ip route show
    sudo ip rule show
    

Importante

Se si verificano ancora problemi durante la comunicazione con la seconda scheda di interfaccia di rete, riavviare la macchina virtuale usando il comando , ripetere il sudo reboot passaggio 7 e testare nuovamente la connettività.