Wie kann ich meine sekundäre Netzwerkschnittstelle in meiner Ubuntu EC2-Instance zum Laufen bringen?

Lesedauer: 7 Minute
0

Ich möchte, dass meine sekundäre Netzwerkschnittstelle in meiner Ubuntu Amazon Elastic Compute Cloud (Amazon EC2)-Instance funktioniert.

Kurzbeschreibung

Warnung: Die Verwendung einer sekundären elastischen Netzwerkschnittstelle ist für fortgeschrittene Benutzer vorgesehen. Tun Sie dies nur, wenn Sie keine einzige Netzwerkschnittstelle verwenden können und zwei Netzwerkschnittstellen aus demselben Subnetz an eine Instance anschließen müssen. Um Probleme mit asymmetrischem Routing zu vermeiden, verwenden Sie eine einzige elastische Netzwerkschnittstelle oder platzieren Sie doppelte elastische Netzwerkschnittstellen in nicht überlappenden Subnetzen.

Das Hinzufügen einer sekundären Netzwerkschnittstelle zu einer EC2-Instance, die nicht von Amazon Linux stammt, verursacht Probleme mit dem Datenverkehr. Diese Probleme treten auf, weil sich die primären und sekundären Netzwerkschnittstellen im selben Subnetz befinden und es eine Routing-Tabelle mit einem Gateway gibt. Datenverkehr, der an die sekundäre Netzwerkschnittstelle gelangt, verlässt die Instance über die primäre Netzwerkschnittstelle. Dies ist jedoch nicht zulässig, da die sekundäre IP-Adresse nicht zur MAC-Adresse der primären Netzwerkschnittstelle gehört.

Gehen Sie wie folgt vor, damit die sekundäre Schnittstelle nach der Erstellung funktioniert:

  1. Konfigurieren Sie die Routing-Tabelle.

  2. Richten Sie Regeln in der Richtliniendatenbank für benutzerdefinierte Routing-Tabellen ein, sodass der Datenverkehr für die sekundäre Schnittstelle die neue Routing-Tabelle verwendet.

Bevor Sie beginnen, beachten Sie, dass sich Amazon EC2-Instances in der AWS Cloud befinden. Dies bedeutet, dass nicht alle Anwendungsfälle von mehreren Schnittstellen profitieren. Die folgenden Beispiele veranschaulichen Situationen, in denen Sie möglicherweise keine sekundäre Netzwerkschnittstelle verwenden müssen:

  • Erhöhung des Netzwerkdurchsatzes: Da die Grenzwerte auf der Grundlage des Instance-Typs und der Größe festgelegt werden, steigt der Netzwerkdurchsatz nicht. Weitere Informationen finden Sie unter Amazon EC2-Instance-Typen.
  • Erhöhung der elastischen IP-Adressen: Wenn Sie nur wenige elastische IP-Adressen pro Schnittstelle haben, müssen Sie möglicherweise keine weiteren Schnittstellen hinzufügen, um mehr elastische IP-Adressen zu erhalten. Die meisten Anwendungen funktionieren gut mit dem Domain-Namen-System. Apache kann beispielsweise namensbasierte virtuelle Hosts verwenden (auf der Apache-Website).

Hinweis: Die Schritte zum Hinzufügen einer sekundären Netzwerkschnittstelle sind für jede der folgenden Ubuntu-Versionen unterschiedlich:

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

Behebung

Hinweis: Obwohl die Schritte in der folgenden Behebung auf den aufgeführten Linux-Versionen getestet wurden, müssen Sie möglicherweise geringfügige Änderungen an den benutzerdefinierten Einstellungen Ihrer Konfiguration vornehmen.

Konfiguration von Ubuntu 14.04 oder 16.04

Sie können die sekundäre Schnittstellenkonfigurationsdatei erstellen, die Routing-Tabelle konfigurieren und Routing-Richtlinienregeln für Ubuntu mithilfe einer einzigen Datei festlegen.

Alle Verfahren müssen mit Root-Benutzerrechten ausgeführt werden. Werden Sie entweder der Root-Benutzer mit sudo -i oder führen Sie alle Befehle mit sudo aus.

  1. Führen Sie den folgenden Befehl aus, um den Namen der primären Netzwerkschnittstelle abzurufen:
ip a | grep ^[[:digit:]]

Sie erhalten eine Ausgabe, die dem folgenden Beispiel ähnelt:

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

Wichtig: In diesem Beispiel heißen die primären Schnittstellen eth0, eth1 usw. Bei Instances, die eine bessere Vernetzung unterstützen, wie z. B. bei den Familientypen m4 und m5, kann es jedoch zu einer Inkonsistenz bei der Benennung kommen. Beispielsweise könnte die primäre den Namen ens3 haben, wenn die sekundäre den Namen eth0 trägt. Diese Namensinkonsistenz tritt auf, wenn Sie die sekundäre Schnittstelle hinzufügen, während die Instance läuft.

Um eine Inkonsistenz bei der Benennung zu vermeiden, fügen Sie die Schnittstelle beim Start hinzu oder starten Sie die Instance neu. Oder, wenn die Schnittstelle läuft, können Sie den Namen mit dem folgenden Befehl ändern:

ip link set eth0 name ens4 && ip link set ens4 up
  1. Erstellen Sie eine Konfigurationsdatei für die sekundäre Schnittstelle. Ändern Sie im folgenden Beispiel eth1 so, dass es Ihrem sekundären Schnittstellennamen entspricht, wie in Schritt 1 angegeben:
vi /etc/network/interfaces.d/51-eth1.cfg

Der folgende Befehl ist ein Beispiel für eine einzelne IP-Adresse von 172.31.21.115 und mit einem Gateway von 172.31.16.1 auf der sekundären Schnittstelle. Ersetzen Sie die Beispiel-IP-Adresse und das Gateway durch Ihre eigene. Beachten Sie außerdem, dass Ihr Gateway die erste gültige IP-Adresse in Ihrem Subnetz sein muss:

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

Der folgende Befehl ist ein Beispiel für mehrere IP-Adressen. In diesem Beispiel lauten die IP-Adressen 172.31.21.115 und 172.31.18.46, und das Gateway ist 172.31.16.1. Ersetzen Sie die Beispiel-IP-Adressen und das Gateway durch Ihre eigenen:

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
  1. Erstellen Sie die Datei restrict-default-gw, um zu verhindern, dass das Standard-Gateway in der Haupttabelle überschrieben wird:
vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
  1. Fügen Sie der Datei restrict-default-gw die folgenden Zeilen hinzu. Stellen Sie sicher, dass Sie eth0 in Ihren primären Schnittstellennamen ändern, wie in Schritt 1 beschrieben:
case ${interface} in
  eth0)
    ;;
  *)
    unset new_routers
    ;;
esac
  1. Starten Sie das Netzwerk neu.

Siehe den folgenden Befehl für Ubuntu 14.04:

(ifdown eth1 && ifup eth1)

Siehe den folgenden Befehl für Ubuntu 16.04:

systemctl restart networking

Konfiguration von Ubuntu 18.04 und 20.04

Ubuntu 18.04 und 20.04 verwenden die Netplan-Netzwerkkonfiguration. Beachten Sie, dass Netplan das YAML-Format verwendet. Das bedeutet, dass die Einrückung von entscheidender Bedeutung ist. Das folgende Netplan-Beispiel verwendet Einrückungen mit zwei Leerzeichen.

Hinweis: Führen Sie alle Befehle mit Root-Benutzerrechten aus. Werden Sie entweder der Root-Benutzer mit sudo -i oder führen Sie alle Befehle mit sudo aus.

  1. Erstellen Sie eine Konfigurationsdatei für die sekundäre Schnittstelle:
vi /etc/netplan/51-eth1.yaml
  1. Fügen Sie der Datei 51-eth1.yaml die folgenden Zeilen hinzu. Stellen Sie sicher, dass Sie das folgende Beispiel so bearbeiten, dass es Ihrem Anwendungsfall entspricht:
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

In dieser YAML-Beispieldatei werden zwei IP-Adressen auf der sekundären Schnittstelle (eth1) konfiguriert.

Hinweis: Gehen Sie wie folgt vor, um den CIDR-Bereich zu finden, der in der YAML-Datei verwendet werden soll:

  1. Öffnen Sie die Amazon EC2-Konsole, wählen Sie Instances und dann die Instance aus.

  2. Scrollen Sie auf der Registerkarte Netzwerk zu Netzwerkschnittstellen und notieren Sie sich die Subnetz-ID Ihrer sekundären Netzwerkschnittstelle.

  3. Öffnen Sie die Amazon Virtual Private Cloud (Amazon VPC)-Konsole, wählen Sie Subnetze aus und notieren Sie sich dann den IPv4-CIDR-Bereich, der für die Subnetz-ID aufgeführt ist.

  4. Wenden Sie die Netzwerkkonfiguration an:

netplan --debug apply

Verwandte Informationen

Routentabellen konfigurieren

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr