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 beschreibt zwei Möglichkeiten, einer einzelnen Netzwerkschnittstelle unter Debian und Ubuntu mehrere IPv4-Adressen zuzuweisen:
- automatisch, mit einem Shell-Skript und einem systemd-Dienst, empfohlen für große Bereiche;
- direkt in netplan, empfohlen, wenn die Adressen nicht nur einen Neustart, sondern auch eine Neukonfiguration des Netzwerks überstehen sollen.
Beide Methoden machen die Konfiguration über Neustarts hinweg dauerhaft. Lesen Sie den Hinweis am Ende jeder Methode, um die für Ihren Fall passende auszuwählen.
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 die Versandreputation verschiedener Domains zu trennen.
- Webserver, die dedizierte Adressen für ältere Anwendungen, die Trennung von Kunden oder bestimmte Firewall-Richtlinien benötigen.
- Proxy- und VPN-Infrastruktur, bei der jede Proxy-Instanz oder jeder VPN-Endpunkt an seine eigene öffentliche Adresse gebunden ist.
- Container oder virtuelle Maschinen, die geroutete IP-Adressen verwenden.
INTROSERV-VPS-Tarife enthalten standardmäßig zwei IPv4-Adressen und ein /112-IPv6-Subnetz. Zusätzliche IPv4-Adressen sind an vielen Standorten verfügbar. Prüfen Sie die Verfügbarkeit für Ihre gewählte Region im Bestellkonfigurator.
Bevor Sie beginnen
Sie benötigen Root-Zugriff und den Namen der Schnittstelle, die die zusätzlichen Adressen tragen soll. Moderne 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 ermitteln 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 Sie in den folgenden Schritten verwenden. Die Beispiele hier verwenden ens3.
Warnung: Diese Schritte ändern die Netzwerkkonfiguration auf einem Server, den Sie höchstwahrscheinlich über SSH erreichen. Ein Fehler kann Ihren eigenen Zugang abschneiden. Halten Sie nach Möglichkeit einen zweiten Zugangsweg bereit, etwa die Provider-Konsole oder IP-KVM, und bevorzugen Sie die unten gezeigten sicheren Anwendungsoptionen.
Das Adress-Skript erstellen
Ein kurzes Skript fügt einen Adressbereich in einem Durchgang 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 Adressen unten verwenden den Dokumentationsbereich aus RFC 5737 und sind Platzhalter:
#!/bin/bash set -euo pipefail # Schnittstelle, die die zusätzlichen Adressen tragen wird. IFACE="ens3" # Gemeinsames Präfix sowie der erste und letzte Wert des Host-Oktetts. # Ersetzen Sie diese durch den Ihnen zugewiesenen Block. PREFIX="203.0.113" FIRST=10 LAST=60 # Mit einer klaren Meldung frühzeitig abbrechen, falls der Schnittstellenname falsch ist. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Schnittstelle $IFACE nicht gefunden. Prüfen Sie den Namen mit: ip -br addr show" >&2 exit 1 fi for HOST in $(seq "$FIRST" "$LAST"); do ip addr replace "${PREFIX}.${HOST}/32" dev "$IFACE" done
Info: Die Adressen verwenden bewusst ein /32-Präfix. Die primäre Schnittstelle besitzt bereits die Route für ihr Subnetz, daher benötigt jede sekundäre Adresse nur eine lokale Host-Route. Ein /32-Präfix verhindert, dass der Kernel eine doppelte Subnetz-Route hinzufügt, und hält die Routing-Tabelle sauber. Das Skript verwendetip addr replacestattip addr add, damit es gefahrlos erneut ausgeführt werden kann, ohne bei bereits vorhandenen Adressen einen Fehler zu melden.
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
Wird das Skript von Hand ausgeführt, fügt es die Adressen nur bis zum nächsten Neustart hinzu. Um sie beim Hochfahren automatisch anzuwenden, erstellen Sie einen systemd-Dienst, der das Skript während des Bootvorgangs ausführt. Diese Methode funktioniert gleichermaßen, 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 jetzt und bei jedem Bootvorgang läuft:
systemctl daemon-reload systemctl enable --now extra-ips.service
Bestätigen Sie, dass der Dienst korrekt gestartet ist:
systemctl status --no-pager extra-ips.service
Warnung: Von diesem Skript hinzugefügte Adressen sind nicht Teil der netplan- oder systemd-networkd-Konfiguration. Ein späteresnetplan apply, einnetworkctl reconfigureoder ein beliebiger Netzwerk-Neustart kann sie entfernen. Sie kehren beim nächsten Neustart zurück oder sofort, wenn Siesystemctl restart extra-ips.serviceausführen. Wenn die Adressen auch eine Neukonfiguration des Netzwerks überstehen sollen, verwenden Sie stattdessen die netplan-Methode unten.
Alternative: die Adressen in netplan definieren
Unter Ubuntu, wo netplan die Standardlösung ist, 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 systemd-Dienst oben 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 verwerfen und den Zugang abschneiden kann. Die bestehende Konfigurationsdatei zu bearbeiten 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 der Schnittstelle bei, etwa dhcp4, die primäre Adresse, das Gateway und die Nameserver. Fügen Sie die zusätzlichen Adressen unter einer addresses-Liste auf derselben 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. Schränken Sie die Berechtigungen ein, um diese Warnung zu beseitigen:
chmod 600 /etc/netplan/50-cloud-init.yaml
Testen Sie die Änderung mit netplan try. Es wendet die Konfiguration an und macht sie nach 120 Sekunden automatisch rückgängig, sofern Sie nicht bestätigen, was Sie vor dem Verlust des Fernzugriffs schützt:
netplan try
Wenn die Verbindung bestehen bleibt und alles korrekt aussieht, bestätigen Sie bei der Aufforderung und wenden Sie die Konfiguration anschließend dauerhaft an:
netplan apply
Das Ergebnis überprüfen
Listen Sie die aktuell 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.
Die Adressen entfernen
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
Bestätigen 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 Subnetz-Routen. Prüfen Sie sie 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.