Come posso far funzionare la mia interfaccia di rete secondaria nella mia istanza Ubuntu di EC2?
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:
- Configura la tabella di routing.
- 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:
-
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
-
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.
-
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
-
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.
-
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:
-
Crea un file di configurazione per l'interfaccia secondaria:
vi /etc/netplan/51-eth1.yaml
-
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:
- Apri la console Amazon EC2, seleziona Istanze, quindi seleziona l'istanza.
- Nella scheda Rete, scorri fino a Interfacce di rete e annota l'ID di sottorete dell'interfaccia di rete secondaria.
- Apri la console Amazon Virtual Private Cloud (Amazon VPC), seleziona Sottoreti, quindi annota l'intervallo CIDR IPv4 elencato per l'ID della sottorete.
- Per applicare la configurazione di rete, esegui il comando seguente:
netplan --debug apply
Informazioni correlate
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa