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

7 minuti di lettura
0

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

Breve descrizione

Avvertenza: L'uso di una seconda interfaccia di rete elastica è destinato agli utenti esperti. Esegui questa operazione solo se non puoi utilizzare una singola interfaccia di rete e devi collegare due interfacce di rete dalla stessa sottorete a un'istanza. Per evitare problemi di routing asimmetrico, utilizza un'unica interfaccia di rete elastica o posiziona interfacce di rete elastiche duplicate in sottoreti non sovrapposte.

L'aggiunta di un'interfaccia di rete secondaria a un'istanza EC2 non Amazon Linux causa problemi di flusso di traffico. Questi problemi si verificano perché le interfacce di rete primarie e secondarie 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 lascia l'istanza utilizzando l'interfaccia di rete principale. Ma questo non è consentito, perché l'indirizzo IP secondario non appartiene all'indirizzo MAC dell'interfaccia di rete principale.

Per far funzionare l'interfaccia secondaria dopo averla creata, procedi come segue:

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. Ciò significa che non tutti i casi d'uso traggono vantaggio dall'avere più interfacce. Gli esempi seguenti mostrano situazioni in cui potrebbe non essere necessario utilizzare un'interfaccia di rete secondaria:

  • Aumento della velocità di trasmissione effettiva di rete: Poiché i limiti sono impostati in base al tipo e alle dimensioni dell'istanza, la velocità di trasmissione effettiva della rete non aumenta. Per ulteriori informazioni, consulta i tipi di istanza Amazon EC2.
  • Aumento degli indirizzi IP elastici: Se disponi di pochi indirizzi IP elastici per interfaccia, potrebbe non essere necessario aggiungere altre interfacce per ottenere più indirizzi IP elastici. La maggior parte delle applicazioni funziona bene con il sistema dei nomi di dominio. Ad esempio, Apache può utilizzare host virtuali basati sul nome (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

Risoluzione

Nota: Sebbene i passaggi della risoluzione seguente siano testati sulle versioni Linux elencate, potrebbero essere necessarie lievi modifiche alle impostazioni personalizzate della configurazione.

Configurazione di Ubuntu 14.04 o 16.04

Puoi creare il file di configurazione dell'interfaccia secondaria, configurare la tabella di routing e impostare le regole dei criteri di routing per Ubuntu utilizzando un unico file.

Tutte le procedure devono essere eseguite con i privilegi di utente root. Diventa l'utente root con sudo -i o esegui tutti i comandi con sudo.

1.    Per ottenere il nome dell'interfaccia di rete principale, 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: In questo esempio, le interfacce primarie sono denominate eth0, eth1 e così via. Tuttavia, per i casi che supportano reti avanzate, come i tipi di famiglia m4 e m5, potresti riscontrare un'incoerenza nella denominazione. Ad esempio, il primario potrebbe essere denominato ens3 se il secondario si chiama 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. Oppure, se l'interfaccia è in esecuzione, puoi cambiare il nome usando il seguente comando:

ip link set eth0 name ens4 && ip link set ens4 up

2.    Crea un file di configurazione per l'interfaccia secondaria. Nell'esempio seguente, modifica eth1 in modo che corrisponda al nome dell'interfaccia secondaria indicato nel passaggio 1:

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

Il seguente comando è un esempio per un singolo indirizzo IP di 172.31.21.115 e con un gateway di 172.31.16.1 sull'interfaccia secondaria. Sostituisci l'indirizzo IP e il gateway di esempio con i tuoi. Tieni inoltre presente che il gateway deve essere il primo indirizzo IP valido nella sottorete:

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

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 e il gateway è 172.31.16.1. Sostituisci gli indirizzi IP e il gateway di esempio con i tuoi:

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

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. Assicurati di cambiare eth0 con il nome dell'interfaccia principale come indicato nel passaggio 1:

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

5.    Riavvia la rete.

Vedi il seguente comando per Ubuntu 14.04:

(ifdown eth1 && ifup eth1)

Vedi il seguente comando per Ubuntu 16.04:

systemctl restart networking

Configurazione di Ubuntu 18.04 e 20.04

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

Nota: Esegui tutti i comandi con privilegi di utente root. Diventa l'utente root con sudo -i o esegui tutti i comandi con sudo.

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

vi /etc/netplan/51-eth1.yaml

2.    Aggiungi le seguenti righe al file 51-eth1.yaml. Assicurati di modificare il seguente esempio per adattarlo al tuo caso d'uso:

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

Questo file YAML di esempio configura due indirizzi IP sull'interfaccia secondaria (eth1).

Nota: 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.    Applica la configurazione di rete:

netplan --debug apply

Informazioni correlate

Configura le tabelle di routing

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa