Wie man eine große Anzahl von IP-Adressen mit Debian/Ubuntu registriert
Ein einzelner Server benötigt oft mehr als eine IP-Adresse. Diese Anleitung erklärt zwei Möglichkeiten, mehrere IPv4-Adressen einer einzelnen Netzwerkschnittstelle unter Debian und Ubuntu zuzuweisen:
- automatisch, mit einem Shell-Skript und einem systemd-Dienst, empfohlen für große Adressbereiche;
- direkt in netplan, empfohlen, wenn die Adressen sowohl eine Netzwerk-Neukonfiguration als auch einen Neustart überstehen müssen.
Beide Methoden sorgen dafür, dass die Konfiguration Neustarts übersteht. Lesen Sie den Hinweis am Ende jeder Methode, um diejenige auszuwählen, die zu Ihrem Fall passt.
Wann Sie mehrere IP-Adressen benötigen
Mehrere gängige Anwendungsfälle auf einem einzelnen Server erfordern mehr als eine öffentliche Adresse:
- Mailserver, die separate Adressen und PTR-Einträge verwenden, um den Versand-Ruf verschiedener Domains voneinander zu isolieren.
- Webserver, die dedizierte Adressen für Legacy-Anwendungen, Kundenisolierung oder spezifische Firewall-Richtlinien benötigen.
- Proxy- und VPN-Infrastruktur, bei der jede Proxy-Instanz oder jeder VPN-Endpunkt an eine eigene öffentliche Adresse gebunden ist.
- Container oder virtuelle Maschinen, die geroutete IP-Adressen verwenden.
INTROSERV VPS-Tarife beinhalten standardmäßig zwei IPv4-Adressen und ein /112-IPv6-Subnetz. Zusätzliche IPv4-Adressen sind an vielen Standorten verfügbar. Prüfen Sie im Bestellkonfigurator die Verfügbarkeit für die von Ihnen gewählte Region.
Bevor Sie beginnen
Sie benötigen Root-Zugriff sowie den Namen der Schnittstelle, die die zusätzlichen Adressen tragen soll. Aktuelle Debian- und Ubuntu-Versionen verwenden nicht mehr den alten Namen eth0, gehen Sie also nicht davon aus. Listen Sie die Schnittstellen zusammen mit ihren aktuellen Adressen auf und identifizieren Sie diejenige, die bereits Ihre primäre Adresse trägt:
ip -br addr show
Die Ausgabe zeigt Einträge wie ens3, enp1s0 oder eth0 neben den bereits darauf konfigurierten Adressen. Die Schnittstelle, die bereits Ihre Haupt-IP trägt, ist diejenige, die in den folgenden Schritten verwendet wird. Die Beispiele hier verwenden ens3.
Diese Schritte ändern die Netzwerkkonfiguration auf einem Server, auf den Sie höchstwahrscheinlich per SSH zugreifen. Ein Fehler kann Ihren eigenen Zugriff unterbrechen. Halten Sie einen zweiten Zugangsweg bereit, falls vorhanden, etwa die Provider-Konsole oder IP-KVM, und bevorzugen Sie die unten gezeigten sicheren Anwendungsoptionen.
Erstellen des Adressskripts
Ein kurzes Skript fügt in einem Durchgang einen Bereich von Adressen hinzu. Erstellen Sie es unter /usr/local/sbin:
nano /usr/local/sbin/extra-ips.sh
Fügen Sie das folgende Skript ein. Ersetzen Sie den Schnittstellennamen, das Präfix und den Bereich durch den Ihnen zugewiesenen Block. Die unten stehenden Adressen verwenden den Dokumentationsbereich aus RFC 5737 und dienen nur als Platzhalter:
#!/bin/bash set -euo pipefail # Interface that will carry the additional addresses. IFACE="ens3" # Common prefix and the first and last value of the host octet. # Replace these with the block assigned to you. PREFIX="203.0.113" FIRST=10 LAST=60 # Stop early with a clear message if the interface name is wrong. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Interface $IFACE not found. Check the name with: ip -br addr show" >&2 exit 1 fi for HOST in $(seq "$FIRST" "$LAST"); do ip addr replace "${PREFIX}.${HOST}/32" dev "$IFACE" done
Die Adressen verwenden absichtlich ein /32-Präfix. Die primäre Schnittstelle besitzt bereits die Route für ihr Subnetz, sodass jede sekundäre Adresse nur eine lokale Host-Route benötigt. Ein /32-Präfix verhindert, dass der Kernel eine doppelte Subnetzroute hinzufügt, und hält die Routing-Tabelle sauber. Das Skript verwendet ip addr replace anstelle von ip addr add, damit es gefahrlos erneut ausgeführt werden kann, ohne bei bereits bestehenden Adressen fehlzuschlagen.
Machen Sie das Skript ausführbar. Beachten Sie den vollständigen Pfad, der in der vorherigen Version dieser Anleitung fehlte:
chmod +x /usr/local/sbin/extra-ips.sh
Die Adressen mit einem systemd-Dienst dauerhaft machen
Das manuelle Ausführen des Skripts fügt die Adressen nur bis zum nächsten Neustart hinzu. Um sie automatisch beim Booten anzuwenden, erstellen Sie einen systemd-Dienst, der das Skript während des Bootvorgangs ausführt. Diese Methode funktioniert unabhängig davon, ob das System netplan, systemd-networkd oder den älteren ifupdown-Stack verwendet.
Erstellen Sie die Unit-Datei:
nano /etc/systemd/system/extra-ips.service
Fügen Sie Folgendes hinzu:
[Unit] Description=Assign additional IP addresses After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/extra-ips.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
Laden Sie systemd neu und aktivieren Sie den Dienst, damit er sofort und bei jedem Neustart ausgeführt wird:
systemctl daemon-reload systemctl enable --now extra-ips.service
Bestätigen Sie, dass der Dienst korrekt gestartet wurde:
systemctl status --no-pager extra-ips.service
Von diesem Skript hinzugefügte Adressen sind nicht Teil der netplan- oder systemd-networkd-Konfiguration. Ein späteres netplan apply, ein networkctl reconfigure oder ein beliebiger Netzwerk-Neustart kann sie entfernen. Sie kehren beim nächsten Neustart zurück, oder sofort, wenn Sie systemctl restart extra-ips.service ausführen. Wenn die Adressen auch eine Netzwerk-Neukonfiguration überstehen müssen, verwenden Sie stattdessen die unten beschriebene netplan-Methode.
Alternative: Die Adressen in netplan definieren
Unter Ubuntu, wo netplan standardmäßig verwendet wird, können die Adressen direkt in netplan deklariert werden. Der Netzwerk-Stack behandelt sie dann als verwaltete Adressen, sodass sie eine Neukonfiguration überstehen. Dies eignet sich für eine kleine, feste Liste. Für einen großen Bereich skaliert der oben beschriebene systemd-Dienst besser, da netplan eine Zeile pro Adresse benötigt.
Wenn mehrere netplan-Dateien dieselbe Schnittstelle definieren, können sich ihre Einstellungen auf unerwartete Weise überschreiben oder zusammenführen, was Ihre primäre Adresse entfernen und den Zugriff unterbrechen kann. Das Bearbeiten der bestehenden Konfigurationsdatei ist in der Regel sicherer, als eine weitere Datei für dieselbe Schnittstelle anzulegen. Öffnen Sie die Datei, die Ihre Schnittstelle bereits konfiguriert, üblicherweise /etc/netplan/50-cloud-init.yaml oder /etc/netplan/00-installer-config.yaml:
ls /etc/netplan/ nano /etc/netplan/50-cloud-init.yaml
Behalten Sie alle bestehenden Einstellungen für die Schnittstelle bei, wie dhcp4, die primäre Adresse, das Gateway und die Nameserver. Fügen Sie die zusätzlichen Adressen unter einer addresses-Liste für dieselbe Schnittstelle hinzu. Das folgende Beispiel behält DHCP für die primäre Adresse bei und fügt drei sekundäre Adressen hinzu:
network: version: 2 ethernets: ens3: dhcp4: true addresses: - 203.0.113.10/32 - 203.0.113.11/32 - 203.0.113.12/32
Neuere netplan-Versionen warnen, wenn die Datei für andere Benutzer lesbar ist. Beschränken Sie die Berechtigungen, um diese Warnung zu beheben:
chmod 600 /etc/netplan/50-cloud-init.yaml
Testen Sie die Änderung mit netplan try. Dabei wird die Konfiguration angewendet und nach 120 Sekunden automatisch zurückgesetzt, sofern Sie sie nicht bestätigen — das schützt Sie davor, den Fernzugriff zu verlieren:
netplan try
Wenn die Verbindung bestehen bleibt und alles korrekt aussieht, bestätigen Sie bei der entsprechenden Aufforderung und wenden Sie die Konfiguration anschließend dauerhaft an:
netplan apply
Überprüfen des Ergebnisses
Listen Sie die derzeit an die Schnittstelle gebundenen Adressen auf und bestätigen Sie, dass die neuen vorhanden sind:
ip -br addr show ens3
Die zusätzlichen Adressen sollten nun in der Ausgabe erscheinen und werden nach jedem Neustart automatisch wiederhergestellt.
Entfernen der Adressen
Um eine einzelne Adresse zu entfernen, löschen Sie sie von der Schnittstelle:
ip addr del 203.0.113.10/32 dev ens3
Wenn Sie das Skript und den Dienst verwendet haben, beenden Sie die Zuweisung des gesamten Bereichs beim Booten, indem Sie den Dienst deaktivieren und entfernen:
systemctl disable --now extra-ips.service rm /etc/systemd/system/extra-ips.service systemctl daemon-reload
Wenn Sie netplan verwendet haben, entfernen Sie die zusätzlichen Zeilen aus der addresses-Liste in der netplan-Datei und führen Sie anschließend netplan apply aus.
Fehlerbehebung
Wenn der Dienst nicht startet, prüfen Sie seinen Status und die Protokolle:
systemctl status --no-pager extra-ips.service journalctl -u extra-ips.service
Überprüfen Sie Folgendes:
- der Schnittstellenname im Skript stimmt mit dem tatsächlichen Namen aus
ip -br addr showüberein; - die Adressen gehören zu dem Ihnen zugewiesenen Block;
- das Skript ist ausführbar.
Wenn Sie versehentlich ein /24-Präfix statt /32 verwendet haben, zeigt sich das Symptom in der Routing-Tabelle als mehrere doppelte Subnetzrouten. Prüfen Sie dies mit:
ip route
Diese Anleitung konzentriert sich auf IPv4. Wie bei IPv4 werden sekundäre IPv6-Adressen normalerweise als Host-Adressen mit einem /128-Präfix hinzugefügt, mit demselben Befehl ip addr replace, zum Beispiel ip addr replace 2001:db8::10/128 dev ens3.