Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come posso far funzionare la mia interfaccia di rete secondaria nella mia istanza Ubuntu di EC2?

7 minuti di lettura
0

Voglio far funzionare la mia interfaccia di rete secondaria nella mia istanza Ubuntu di Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrizione

Avvertenza: l'uso di una seconda interfaccia di rete elastica è destinato agli utenti esperti. Usa questa soluzione solo per il caso d'uso seguente: non puoi usare una singola interfaccia di rete. Devi collegare due interfacce di rete dalla stessa sottorete a un'unica istanza. Per evitare problemi di routing asimmetrico, usa un'unica interfaccia di rete elastica o posiziona interfacce di rete elastiche duplicate in sottoreti non sovrapposte. In alternativa, usa Ubuntu 24.04 LTS o versioni successive.

L'aggiunta di un'interfaccia di rete secondaria a un'istanza diversa da EC2 Amazon Linux causa problemi di flusso di traffico. Questi problemi si verificano perché le interfacce di rete primaria e secondaria si trovano nella stessa sottorete e c'è un'unica tabella di routing con un unico gateway. Il traffico che entra nell'interfaccia di rete secondaria utilizza l'interfaccia di rete primaria per uscire dall'istanza. Siccome l'indirizzo IP secondario non appartiene all'indirizzo MAC dell'interfaccia di rete primaria, l'interfaccia secondaria non funziona.

Nota: i seguenti passaggi non sono necessari con Ubuntu 24.04. Ubuntu 24.04 gestisce automaticamente tale configurazione avanzata.

Per fare funzionare l'interfaccia secondaria dopo averla creata, completa i seguenti passaggi:

  1. Configura la tabella di routing.
  2. Imposta le regole nel database delle policy della tabella di routing personalizzata in modo che il traffico per l'interfaccia secondaria utilizzi la nuova tabella di routing.

Prima di iniziare, tieni presente che le istanze Amazon EC2 si trovano nel cloud AWS, pertanto non tutti i casi d'uso traggono vantaggio dall'avere più interfacce. Gli esempi seguenti mostrano quando potrebbe non essere necessario l'uso di un'interfaccia di rete secondaria:

  • Per aumentare il throughput della rete: dato che i limiti sono impostati in base al tipo e alle dimensioni dell'istanza, il throughput della rete non aumenta. Per ulteriori informazioni, consulta Tipi di istanze Amazon EC2.
  • Per aumentare gli indirizzi IP elastici: non è necessario aggiungere indirizzi IP elastici alle istanze, perché la maggior parte delle applicazioni funziona bene con il DNS. Ad esempio, Apache può usare host virtuali basati sul nome. Per ulteriori informazioni, consulta Name-based Virtual Host Support sul sito web di Apache.

Nota: i passaggi per aggiungere un'interfaccia di rete secondaria sono diversi per ciascuna delle seguenti versioni di Ubuntu:

  • Ubuntu 14.04
  • Ubuntu 16.04
  • Ubuntu 18.04
  • Ubuntu 20.04
  • Ubuntu 22.04

Soluzione

Nota: sebbene i passaggi della risoluzione seguente siano testati sulle versioni Linux elencate, potrebbero essere necessarie modifiche alle impostazioni personalizzate della configurazione. Tutte le procedure devono essere eseguite con le autorizzazioni dell'utente root. Puoi diventare utente root con sudo -i o eseguire tutti i comandi con sudo.

Configura Ubuntu 14.04 o 16.04

Puoi usare un singolo file per creare il file di configurazione dell'interfaccia secondaria, configurare la tabella di routing e quindi impostare le regole della policy di routing per Ubuntu.

Per configurare Ubuntu 14.04 o 16.04, completa i seguenti passaggi:

  1. Per ottenere il nome dell'interfaccia di rete primaria, esegui il comando seguente:

    ip a | grep ^[[:digit:]]

    Riceverai un output simile al seguente esempio:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

    Importante: nell'esempio precedente, le interfacce primarie sono denominate eth0, eth1 e così via. Tuttavia, per le istanze che supportano reti avanzate, come i tipi di famiglia m4 e m5, potresti riscontrare un'incoerenza nella denominazione. Ad esempio, l'interfaccia primaria potrebbe essere denominata ens3 se quella secondaria è denominata eth0. Questa incoerenza nella denominazione si verifica quando si aggiunge l'interfaccia secondaria mentre l'istanza è in esecuzione. Per evitare incongruenze nella denominazione, aggiungi l'interfaccia al momento dell'avvio o riavvia l'istanza. In alternativa, se l'interfaccia è in esecuzione, usa il seguente comando per cambiare il nome:

    ip link set eth0 name ens4
    ip link set ens4 up
    ip link show ens4 --->verify
  2. Crea un file di configurazione per l'interfaccia secondaria:

    vi /etc/network/interfaces.d/51-eth1.cfg

    Nota: cambia eth1 in modo che corrisponda al nome della tua interfaccia secondaria.

    Il comando seguente è un esempio per un singolo indirizzo IP 172.31.21.115 con un gateway 172.31.16.1 sull'interfaccia secondaria:

    auto eth1  
    iface eth1 inet static address 172.31.21.115  
    netmask 255.255.240.0
    
    # Gateway configuration
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # Routes and rules
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip rule add from 172.31.21.115 lookup 1000

    Nota: sostituisci l'indirizzo IP e il gateway di esempio con i tuoi dati. Il gateway deve essere il primo indirizzo IP valido nella sottorete.

    Il comando seguente è un esempio per più indirizzi IP. In questo esempio, gli indirizzi IP sono 172.31.21.115 e 172.31.18.46 mentre il gateway è 172.31.16.1:

    auto eth1
    # Enter one or more IP settings
    iface eth1 inet static
    address 172.31.21.115
    netmask 255.255.240.0
    
    iface eth1 inet static
    address 172.31.18.46
    netmask 255.255.240.0
    
    # Default gateway for eth1
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # A route for every IP
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip route add 172.31.18.46 dev eth1 table 1000
    
    # A policy rule for every IP
    up ip rule add from 172.31.21.115 lookup 1000
    up ip rule add from 172.31.18.46 lookup 1000

    Nota: sostituisci gli indirizzi IP e il gateway di esempio con i tuoi dati.

  3. Crea il file restrict-default-gw per evitare che il gateway predefinito venga sovrascritto nella tabella principale:

    vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
  4. Aggiungi le seguenti righe al file restrict-default-gw:

    case ${interface} in  eth0)    ;;  *)
        unset new_routers
        ;;
    esac

    Nota: sostituisci eth0 con il nome della tua interfaccia primaria.

  5. Riavvia la rete.

    Per Ubuntu 14.04, esegui il seguente comando:

    (ifdown eth1 && ifup eth1)

    Per Ubuntu 16.04, esegui il seguente comando:

    systemctl restart networking

Configura Ubuntu 18.04, 20.04 e 22.04

Ubuntu 18.04, 20.04 e 22.04 utilizzano la configurazione di rete Netplan. Nota che Netplan utilizza il formato YAML. Questo formato YAML significa che l'indentazione è fondamentale. Il seguente esempio di Netplan utilizza l'indentazione a due spazi.

Per configurare Ubuntu 18.04, 20.04 e 22.04, completa i seguenti passaggi:

  1. Crea un file di configurazione per l'interfaccia secondaria:

    vi /etc/netplan/51-eth1.yaml
  2. Aggiungi le seguenti righe nel file 51-eth1.yaml:

    network:  version: 2  renderer: networkd    
     ethernets:
        eth1:
          addresses:
           - 172.31.24.153/20
           - 172.31.28.195/20
          dhcp4: no
          routes:
           - to: 0.0.0.0/0
             via: 172.31.16.1 # Default gateway
             table: 1000
           - to: 172.31.24.153
             via: 0.0.0.0
             scope: link
             table: 1000
           - to: 172.31.28.195
             via: 0.0.0.0
             scope: link
             table: 1000
          routing-policy:
            - from: 172.31.24.153
              table: 1000
            - from: 172.31.28.195
              table: 1000

    Nota: sostituisci le informazioni di esempio precedenti con informazioni specifiche per il tuo caso d'uso. Il file YAML dell'esempio precedente configura due indirizzi IP sull'interfaccia secondaria eth1.

Per trovare l'intervallo CIDR da utilizzare nel file YAML, completa i seguenti passaggi:

  1. Apri la console Amazon EC2, seleziona Istanze, quindi seleziona l'istanza.
  2. Nella scheda Rete, scorri fino a Interfacce di rete e annota l'ID di sottorete dell'interfaccia di rete secondaria.
  3. Apri la console Amazon Virtual Private Cloud (Amazon VPC), seleziona Sottoreti, quindi annota l'intervallo CIDR IPv4 elencato per l'ID della sottorete.
  4. Per applicare la configurazione di rete, esegui il comando seguente:
    netplan --debug apply

Informazioni correlate

Configura le tabelle di routing

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa