AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Wie bringe ich meine sekundäre Netzwerkschnittstelle in meiner Ubuntu Amazon EC2-Instance zum Laufen?
Ich möchte, dass meine sekundäre Netzwerkschnittstelle in meiner Ubuntu Amazon Elastic Compute Cloud (Amazon EC2)-Instance funktioniert.
Kurzbeschreibung
Wichtig: Die Verwendung einer sekundären elastischen Netzwerkschnittstelle ist für fortgeschrittene Benutzer vorgesehen. Verwende diese Lösung nur, wenn es dir nicht möglich ist, eine einzelne Netzwerkschnittstelle zu verwenden.
Wenn du eine sekundäre Netzwerkschnittstelle zu einer Instance hinzufügst, die keine Amazon Linux EC2-Instance Linux ist, kannst du eventuell Probleme mit dem Datenverkehr beobachten. Diese Probleme treten auf, weil die sekundäre Netzwerkschnittstelle eingehenden Datenverkehr über die primäre Netzwerkschnittstelle weiterleitet. Da die sekundäre IP-Adresse nicht zur MAC-Adresse der primären Netzwerkschnittstelle gehört, funktioniert die sekundäre Schnittstelle nicht.
Hinweis: Für Ubuntu 24.04 sind die folgenden Schritte nicht erforderlich, da die erweiterte Konfiguration automatisch verarbeitet wird.
Gehe wie folgt vor, damit die sekundäre Schnittstelle funktioniert, nachdem du sie erstellt hast:
- Konfiguriere die Routing-Tabelle.
- Richte Regeln in der Richtliniendatenbank für benutzerdefinierte Routing-Tabellen ein, sodass der Datenverkehr für die sekundäre Schnittstelle die neue Routing-Tabelle verwendet.
Hinweis: Amazon EC2-Instances befinden sich in der AWS Cloud, und nicht alle Instances profitieren von der Verwendung mehrerer Schnittstellen.
Möglicherweise benötigst du keine zweite Netzwerkschnittstelle, um den Netzwerkdurchsatz zu erhöhen. AWS legt Kontingente auf der Grundlage des Typs und der Größe der Instance fest, und diese Konfiguration begrenzt den Netzwerkdurchsatz. Weitere Informationen findest du unter Amazon-EC2-Instance-Typen.
Möglicherweise benötigst du auch keine zweite Netzwerkschnittstelle, um Elastic-IP-Adressen zu erhöhen. Du musst der Instance keine elastische IP-Adressen hinzufügen, da die meisten Anwendungen gut mit dem DNS funktionieren. Apache kann beispielsweise namensbasierte virtuelle Hosts verwenden. Weitere Informationen findest du sie auf der Apache-Website unter Unterstützung namensbasierter virtueller Hosts.
Die Schritte zum Hinzufügen einer sekundären Netzwerkschnittstelle sind für die folgenden Betriebssysteme unterschiedlich:
- Ubuntu 14.04
- Ubuntu 16.04
- Ubuntu 18.04, 20.04 und 22.04
- Debian 12 (verschiedene Subnetze)
Lösung
Hinweis: Die Schritte in der folgenden Lösung wurden auf den aufgeführten Linux-Versionen getestet. Ändere die benutzerdefinierten Einstellungen deiner Konfiguration, um die folgenden Schritte mit Root-Benutzerberechtigungen auszuführen. Verwende entweder den Root-Benutzer mit sudo -i oder führe alle Befehle mit sudo aus.
Konfigurieren von Ubuntu 14.04 oder 16.04
Du kannst eine einzelne Datei verwenden, um die Konfigurationsdatei für die sekundäre Schnittstelle zu erstellen, die Routingtabelle zu konfigurieren und dann Routing-Richtlinienregeln für Ubuntu festzulegen.
Führe die folgenden Schritte aus:
-
Führe den folgenden Befehl aus, um den Namen der primären Netzwerkschnittstelle abzurufen:
ip a | grep ^[[:digit:]]Beispielausgabe:
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 1000Wichtig: Im vorangehenden 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 Schnittstelle ** ens3** heißen, während die sekundäre Schnittstelle eth0 heißt. Diese Namensinkonsistenz tritt auf, wenn du die sekundäre Schnittstelle hinzufügst, während die Instance ausgeführt wird. Um eine Inkonsistenz bei der Benennung zu vermeiden, füge die Schnittstelle beim Start hinzu oder starte die Instance neu. Wenn die Schnittstelle bereits läuft, verwende den folgenden Befehl, um den Namen zu ändern:
ip link set eth0 name ens4 ip link set ens4 up ip link show ens4 -
Erstelle eine Konfigurationsdatei für die sekundäre Schnittstelle:
vi /etc/network/interfaces.d/51-eth1.cfgHinweis: Ersetze eth1 durch den Namen deiner sekundären Schnittstelle.
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:
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 1000Hinweis: Ersetze 172.31.21.115 durch deine IP-Adresse und 172.31.16.1 durch dein Gateway. Dein Gateway muss die erste gültige IP-Adresse in deinem Subnetz sein.
Der folgende Befehl ist ein Beispiel für mehrere IP-Adressen:auto eth1 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 1000Hinweis: Ersetze 172.31.21.115 und 172.31.18.46 durch deine IP-Adresse und 172.31.16.1 durch dein Gateway.
-
Erstelle 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 -
Füge der Datei restrict-default-gw die folgenden Zeilen hinzu:
case ${interface} in eth0) ;; *) unset new_routers ;; esacHinweis: Ersetze eth0 durch den Namen deiner primären Schnittstelle.
-
Starte das Netzwerk neu.
Führe für Ubuntu 14.04 den folgenden Befehl aus:(ifdown eth1 && ifup eth1)Führe für Ubuntu 16.04 den folgenden Befehl aus:
systemctl restart networking
Konfigurieren von Ubuntu 18.04, 20.04 und 22.04
Ubuntu 18.04, 20.04 und 22.04 verwenden die Netplan-Netzwerkkonfiguration. Netplan verwendet das YAML-Format. Eine korrekte Einrückung ist im YAML-Format von entscheidender Bedeutung. Das folgende Netplan-Beispiel verwendet Einrückungen mit zwei Leerzeichen.
Führe die folgenden Schritte aus:
-
Erstelle eine Konfigurationsdatei für die sekundäre Schnittstelle:
vi /etc/netplan/51-eth1.yaml -
Füge der Datei 51-eth1.yaml die folgenden Zeilen hinzu:
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 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: 1000Hinweis: Ersetze die Informationen im vorherigen Beispiel durch Informationen, die für deinen Anwendungsfall spezifisch sind. Die YAML-Datei im vorherigen Beispiel konfiguriert zwei IP-Adressen auf eth1, der sekundären Schnittstelle.
Gehe wie folgt vor, um den CIDR-Bereich zu finden, der in der YAML-Datei verwendet werden soll:
- Öffne die Amazon-EC2-Konsole.
- Wähle Instances und dann die Instance aus.
- Scrolle auf der Registerkarte Netzwerk zu Netzwerkschnittstellen und notiere die Subnetz-ID deiner sekundären Netzwerkschnittstelle.
- Öffne die Amazon VPC-Konsole.
- Wähle Subnetze aus und notiere dann den IPv4-CIDR-Bereich, der für die Subnetz-ID aufgeführt ist.
- Führe den folgenden Befehl aus, um die Netzwerkkonfiguration anzuwenden:
netplan --debug apply
Debian 12 mit einer sekundären ENI in einem anderen Subnetz konfigurieren
Debian 12 verwendet standardmäßig systemd-networkd für die Netzwerkkonfiguration. Wenn du eine sekundäre ENI in einem anderen Subnetz platzierst, musst du eine Policy-Routing-Tabelle mit quellenbasierten Routing-Regeln erstellen. Ohne diese Regeln verwendet der Datenverkehr von der sekundären Schnittstelle die Standardroute der primären Schnittstelle und schlägt fehl.
Wichtig: In diesem Abschnitt wird eine andere Subnetzkonfiguration behandelt. Die obigen Ubuntu-Abschnitte behandeln nur Konfigurationen mit demselben Subnetz.
Führe die folgenden Schritte aus:
-
Bestätige, dass systemd-networkd der aktive Netzwerkdienst ist:
for SVC in networking systemd-networkd NetworkManager; do echo "${SVC}: $(systemctl is-active "${SVC}")"; doneErwartete Ausgabe:
networking: inactive systemd-networkd: active NetworkManager: inactiveFalls systemd-networkd nicht aktiv ist, aktiviere es, bevor du fortfährst.
-
Teste die Konfiguration manuell, bevor du sie persistent machst:
IF=ens6 IP=10.0.2.100 CIDR=10.0.2.64/26 GW=10.0.2.65 TABLE=101 sudo ip link set $IF up mtu 9001 sudo ip addr add $IP/26 dev $IF sudo ip route add $CIDR dev $IF proto static src $IP table $TABLE sudo ip route add default via $GW dev $IF table $TABLE sudo ip rule add from $IP/32 lookup $TABLE priority $TABLEHinweis: Ersetze ens6 durch den Namen deiner sekundären Schnittstelle, 10.0.2.100 durch deine sekundäre ENI-IP, 10.0.2.64/26 durch das CIDR des sekundären Subnetzes und 10.0.2.65 durch das Gateway des sekundären Subnetzes.
-
Stelle sicher, dass die sekundäre Schnittstelle über ihr eigenes Gateway geleitet wird:
ip route get 8.8.8.8 from 10.0.2.100Erwartete Ausgabe:
8.8.8.8 from 10.0.2.100 via 10.0.2.65 dev ens6 table 101 uid 0 cache -
Wenn der Test erfolgreich ist, hebe die temporäre Konfiguration auf:
sudo ip rule del from $IP/32 lookup $TABLE priority $TABLE sudo ip route flush table $TABLE sudo ip addr flush dev $IF -
Erstelle eine persistente systemd-networkd-Konfigurationsdatei:
sudo touch /etc/systemd/network/60-ens6.networkHinweis: Ersetze ens6 durch den Namen deiner sekundären Schnittstelle.
-
Füge der Datei 60-ens6.network den folgenden Inhalt hinzu:
[Match] Name=ens6 [Link] MTUBytes=9001 [Network] Address=10.0.2.100/26 IPv6AcceptRA=no [Route] Destination=0.0.0.0/0 Gateway=10.0.2.65 Table=101 [Route] Destination=10.0.2.64/26 Scope=link PreferredSource=10.0.2.100 Table=101 [RoutingPolicyRule] From=10.0.2.100/32 Table=101 Priority=101Hinweis: Ersetze ens6 durch den Namen deiner sekundären Schnittstelle, 10.0.2.100/26 durch deine sekundäre ENI-IP und dein CIDR, 10.0.2.65 durch das Gateway des sekundären Subnetzes und 10.0.2.64/26 durch das CIDR deines sekundären Subnetzes.
-
Lade die Netzwerkkonfiguration neu:
sudo networkctl reload && sudo networkctl reconfigure ens6Hinweis: Ersetze ens6 durch den Namen deiner sekundären Schnittstelle.
-
Stelle den Reverse-Path-Filter auf den Loose-Modus ein, um eingehenden Datenverkehr auf der sekundären Schnittstelle zuzulassen. Prüfe die aktuellen Werte:
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.ens6.rp_filterWenn einer der Werte
1ist, dann erstelle oder aktualisiere /etc/sysctl.d/99-multihome.conf mit den folgenden Zeilen:net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2Wende die Änderungen an:
sudo sysctl --systemHinweis: Die Einstellung
rp_filter=2aktiviert den Loose-Modus. Dadurch können Pakete, die über die sekundäre Schnittstelle eintreffen, auch dann weitergeleitet werden, wenn der Rückweg über eine andere Schnittstelle erfolgt. -
Stelle sicher, dass jede Schnittstelle über ihr eigenes Gateway weitergeleitet wird.
Für das primäre ENI:
ip route get 8.8.8.8 from 10.0.2.12Erwartete Ausgabe:
8.8.8.8 from 10.0.2.12 via 10.0.2.1 dev ens5 uid 0 cacheFür das sekundäre ENI:
ip route get 8.8.8.8 from 10.0.2.100Erwartete Ausgabe:
8.8.8.8 from 10.0.2.100 via 10.0.2.65 dev ens6 table 101 uid 0 cache -
Starte die Instance neu und wiederhole die Verifizierungsbefehle aus Schritt 9, um zu bestätigen, dass die Konfiguration bestehen bleibt.
Verwandte Informationen
- Themen
- Compute
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor einem Jahr