Geroutetes IPv6 (/64), Gateway fe80::1, rDNS & Docker-IPv6 auf Netcup konfigurieren
Jeder Netcup VPS und Root-Server – vom kompakten VPS pico G11.5s bis zum dedizierten RS 1000 G12.5 – enthält eine eigene statische IPv4-Adresse (/32) sowie ein voll geroutetes IPv6-/64-Subnetz (2a03:4000:... in Europa) mit 1,84 × 10¹⁹ Adressen. Allerdings nutzt Netcups IPv6-Architektur ein festes Link-Local-Default-Gateway (fe80::1) und setzt voraus, dass Router Advertisements (accept-ra: false) bei statischer Konfiguration deaktiviert werden. Wer dieses Detail übersieht, erlebt alle paar Minuten mysteriöse IPv6-Verbindungsabbrüche. Hier finden Sie die exakte Konfiguration für Ubuntu 24.04 Netplan, Debian 12, Reverse DNS (PTR) und Docker-IPv6.
AS197540 Link-Local-Gateway-Architektur (fe80::1) unter Ubuntu 24.04 LTS (systemd-networkd / Netplan) und Debian 12 (ifupdown). VORAUSSETZUNGEN // ANFORDERUNGEN
CHECKLISTE- ✓ Ein Netcup VPS (G11.5s oder G12.5) oder Root-Server (G12.5) mit zugewiesenem IPv6-
/64-Präfix (sichtbar unter SCP → Network) - ✓ Sudo-Zugriff per SSH sowie Notfallzugriff auf die SCP HTML5-VNC-Konsole
Wichtige Erkenntnisse (Key Takeaways)
KURZFAZIT-
01 Netcups IPv6-Standard-Gateway auf allen KVM-Hostknoten ist immer die Link-Local-Adresse
fe80::1auf Ihrem primären Netzwerk-Interface (eth0oderens3). -
02 Setzen Sie in Netplan bei statischen IPv6-Adressen auf Netcup immer
accept-ra: false, damit periodische Router Advertisements Ihre statische Default-Route nicht überschreiben. -
03 Sie können
::1,::2,::10oder tausende weitere Adressen aus Ihrem/64-Subnetz an dasselbe Interface binden und für jede Adresse im SCP einen eigenen Reverse-DNS-Eintrag (PTR) hinterlegen.
Netcup /64 IPv6 Netplan, Debian & Docker Konfigurations-Generator
Geben Sie Ihr im SCP zugewiesenes /64 IPv6-Subnetz und Ihre IPv4-Adresse ein, um sofort eine produktionsreife Konfiguration mit dem zwingend erforderlichen Gateway fe80::1 (on-link: true) zu erzeugen.
network:
version: 2
ethernets:
eth0:
dhcp4: false
dhcp6: false
accept-ra: false
addresses:
- 152.53.12.34/22
- "2a03:4000:6:1234::1/64"
- "2a03:4000:6:1234::2/64"
routes:
- to: default
via: 152.53.12.1
- to: "::/0"
via: "fe80::1"
on-link: true
nameservers:
addresses:
- 1.1.1.1
- 2606:4700:4700::1111
- 9.9.9.9
# Apply safely: sudo chmod 600 /etc/netplan/50-cloud-init.yaml && sudo netplan try 📑 Inhaltsverzeichnis (3 Abschnitte) ▼
Schritt 1: Zugewiesenes /64-Subnetz & MAC-Adresse im Netcup SCP ablesen
Melden Sie sich im Netcup Server Control Panel (servercontrolpanel.de) → Server auswählen → Network an. Dort sehen Sie die Hardware-MAC-Adresse Ihrer Netzwerkkarte, Ihre IPv4-Adresse samt Gateway sowie Ihr geroutetes IPv6-/64-Subnetz – beispielsweise 2a03:4000:60:1234::/64 mit dem Standard-Gateway fe80::1. Notieren Sie sich sowohl die MAC-Adresse als auch die ersten vier Heptets Ihres /64-Präfixes.
Warum routet Netcup Ihr /64-Subnetz statisch über die Link-Local-Adresse fe80::1, anstatt auf dem KVM-Bridge-Netzwerk kontinuierliche SLAAC-Router-Advertisements (RA) auszusenden? In großen Multi-Tenant-Rechenzentren wie AS197540 würden ungerichtete Multicast-Router-Advertisements auf gemeinsam genutzten Layer-2-Segmenten unnötiges Broadcast-Rauschen verursachen und es einzelnen Gast-VMs erschweren, deterministische Sub-Präfixe zu verwalten. Stattdessen terminiert der virtuelle Switch jedes KVM-Hostknotens auf fe80::1 und leitet den gesamten Datenverkehr für Ihr /64-Präfix gezielt an die MAC-Adresse Ihrer virtio-net-Netzwerkkarte weiter.
Auf Layer 2 übernimmt dabei das Neighbor Discovery Protocol (NDP, RFC 4861) die Aufgabe, die bei IPv4 das ARP-Protokoll erfüllt: Wenn der Netcup-Gateway-Router fe80::1 ein Paket für 2a03:4000:60:1234::1 zustellen möchte, sendet er ein ICMPv6 Neighbor Solicitation (Typ 135) an die Solicited-Node-Multicast-Adresse Ihrer VM. Ihr Linux-Kernel antwortet mit einem ICMPv6 Neighbor Advertisement (Typ 136), das Ihre MAC-Adresse enthält. Blockieren Sie daher in ip6tables, nftables oder der Netcup SCP Firewall niemals die ICMPv6-Typen 133 bis 136 – andernfalls bricht die IPv6-Nachbarschaftserkennung nach Ablauf des NDP-Caches sofort zusammen.
Prüfen Sie vor dem Anpassen der Netzwerkkonfiguration mit ip -br link und ip -6 route show, welchen Interface-Namen (eth0 oder ens3) Ihr Gast-Kernel vergeben hat und welche Routen aktuell aktiv sind:
| Netzwerkparameter | Netcup-Standardwert / Format | Technischer Zweck & Konfigurationsregel |
|---|---|---|
| IPv4-Zuweisung | 1× Statische öffentliche /32 IPv4 | Per DHCPv4 (MAC-gebunden) oder statischer /32-Route konfigurierbar |
| IPv6-Präfix-Zuweisung | 1× Geroutetes /64-Subnetz (2a03:4000:xxxx:xxxx::/64) | Direkt auf Ihre VM-NIC geroutet; ::1, ::2 usw. statisch binden |
| IPv6-Standard-Gateway | fe80::1 (Link-Local Scope) | Erfordert on-link: true in Netplan zusammen mit to: "::/0" |
Router Advertisements (accept-ra) | Muss false (0) sein | Verhindert, dass ablaufende SLAAC-Timer Ihre Default-Route löschen |
| Netcup Rekursive DNS-Resolver | 46.38.225.230, 46.38.252.230, 2a03:4000:0:1::e1e6 | Schnelle (<1 ms) Resolver innerhalb des Netcup-AS197540-Backbones |
# Interface-Namen, MAC-Adressen und aktuelle IPv4/IPv6-Bindungen anzeigen
ip -br link
ip -br addr
# Aktuelle IPv6-Routing-Tabelle inspizieren
ip -6 route show Befehlserklärung: Ermittelt, ob Ihr Gast-Kernel das virtio-net-Interface eth0 oder ens3 genannt hat, und prüft, ob bereits eine Default-Route ::/0 via fe80::1 gesetzt ist.
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0 UP 22:54:00:ab:cd:ef <BROADCAST,MULTICAST,UP,LOWER_UP> Schritt 2: Statisches IPv6 + fe80::1 Gateway unter Ubuntu 24.04 (Netplan) oder Debian 12 einrichten
Unter Ubuntu 24.04 LTS übersetzt Netplan v2 Ihre YAML-Definition in /etc/netplan/ in native Konfigurationsdateien für den Daemon systemd-networkd. Beim Einrichten der statischen IPv6-Default-Route to: "::/0" über via: "fe80::1" ist das Attribut on-link: true zwingend erforderlich: Da fe80::1 eine Link-Local-Adresse außerhalb Ihres globalen 2a03:4000:...-Präfixes ist, teilt on-link: true dem Kernel mit, dass das Gateway direkt auf demselben Layer-2-Link (eth0) erreichbar ist, ohne dass zuvor eine separate Subnetz-Route zum Gateway gesucht werden muss.
Gleichzeitig müssen Sie accept-ra: false setzen. Bleibt accept-ra auf dem Standardwert true, akzeptiert der Linux-Kernel sporadische Router-Advertisements mit begrenzter Lifetime (Router Lifetime = 1800s). Sobald dieser Timer abläuft, löscht der Kernel die Default-Route, und Ihr Server verliert plötzlich nach 10 bis 30 Minuten jegliche ausgehende und eingehende IPv6-Verbindung (Network is unreachable). Mit accept-ra: false bleibt Ihre statische Route über fe80::1 dauerhaft und unverrückbar in der Kernel-Routingtabelle bestehen.
Weil Ihr komplettes /64-Subnetz auf Ihre Netzwerkkarte geroutet wird, können Sie problemlos mehrere IPv6-Adressen gleichzeitig im Array addresses: eintragen – zum Beispiel 2a03:4000:60:1234::1/64 für Ihren primären Nginx-Webserver, 2a03:4000:60:1234::2/64 exklusiv für Ihren Postfix/Dovecot-Mailserver und 2a03:4000:60:1234::10/64 für ausgehende Monitoring- oder API-Anfragen. In Nginx oder Postfix binden Sie den jeweiligen Dienst dann gezielt an seine eigene IPv6-Adresse.
Wichtiger Hinweis für Cloud-Init-Images: Damit Cloud-Init Ihre angepasste /etc/netplan/50-cloud-init.yaml bei einem späteren Server-Reboot nicht wieder überschreibt, legen Sie die Datei /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg mit dem Inhalt network: {config: disabled} an. Testen Sie Änderungen an Netplan immer zuerst mit sudo netplan try, das bei Verbindungsverlust nach 120 Sekunden automatisch ein Rollback durchführt:
network:
version: 2
renderer: networkd
ethernets:
eth0:
match:
macaddress: "22:54:00:ab:cd:ef"
set-name: eth0
dhcp4: true
dhcp6: false
accept-ra: false
addresses:
- "2a03:4000:60:1234::1/64"
- "2a03:4000:60:1234::2/64"
routes:
- to: "::/0"
via: "fe80::1"
on-link: true
nameservers:
addresses:
- 46.38.225.230
- 46.38.252.230
- 2a03:4000:0:1::e1e6
- 2606:4700:4700::1111 Befehlserklärung: Ersetzen Sie 22:54:00:ab:cd:ef durch Ihre MAC-Adresse und 2a03:4000:60:1234 durch Ihr zugewiesenes /64-Präfix aus dem SCP. Testen Sie immer zuerst mit sudo netplan try, bevor Sie die Änderung dauerhaft bestätigen.
SICHERHEITSHINWEIS: Stellen Sie sicher, dass /etc/netplan/50-cloud-init.yaml strikte 0600-Rechte besitzt (sudo chmod 0600 /etc/netplan/*.yaml), damit netplan keine Berechtigungswarnungen ausgibt.
iface eth0 inet6 static
address 2a03:4000:60:1234::1
netmask 64
gateway fe80::1
accept_ra 0
autoconf 0
up ip -6 addr add 2a03:4000:60:1234::2/64 dev eth0 || true Befehlserklärung: Für klassische Debian-ifupdown-Installationen ohne Netplan konfiguriert diese Datei statisches IPv6 über fe80::1 und deaktiviert die SLAAC-Autokonfiguration (accept_ra 0).
Der Befehl sudo netplan try aktiviert Ihre neue YAML-Konfiguration mit einem automatischen 120-Sekunden-Rollback-Timer. Falls ein Tippfehler Ihre SSH-Verbindung trennt, stellt Netplan nach 120 Sekunden automatisch die vorherige Konfiguration wieder her.
Schritt 3: IPv6-Routing prüfen, Reverse DNS (PTR) im SCP setzen & Docker-IPv6 aktivieren
Sobald sudo netplan try erfolgreich bestätigt wurde, prüfen Sie mit ping6 die ausgehende ICMPv6-Konnektivität und testen mit curl -6 --interface, ob Sie jede gebundene Adresse Ihres /64-Subnetzes gezielt als Quelladresse auswählen können. Standardmäßig nutzt der Linux-Kernel die zuletzt hinzugefügte IPv6-Adresse eines Interfaces als bevorzugte ausgehende Quelladresse (Source Address Selection, RFC 6724), sofern Sie sekundäre Adressen nicht mit preferred_lft 0 markieren oder in der jeweiligen Anwendung explizit binden.
Wenn Sie auf Ihrem Netcup-Server einen eigenen Mailserver (Postfix, Mailcow, Stalwart oder Docker-Mailserver) betreiben, ist die Einrichtung eines IPv6-Reverse-DNS-Eintrags (PTR) im Netcup SCP unter Network → Reverse DNS (rDNS) zwingend erforderlich. Große E-Mail-Provider wie Gmail, Microsoft 365 und T-Online prüfen bei jeder eingehenden SMTP-Verbindung über IPv6 die sogenannte Forward-Confirmed Reverse DNS (FCrDNS)-Kette: Die sendende IPv6-Adresse (2a03:4000:60:1234::2) muss per PTR auf Ihren Mail-Hostnamen (mail.example.com) auflösen, und dieser Hostname muss per AAAA-Record wieder exakt auf 2a03:4000:60:1234::2 zeigen. Fehlt der IPv6-PTR-Record, lehnt Gmail Ihre E-Mails sofort mit 550-5.7.25 The IP address sending this message does not have a PTR record ab.
Möchten Sie auch Ihren Docker-Containern ausgehende und eingehende IPv6-Konnektivität ermöglichen, ohne sich mit komplexem ndppd-NDP-Proxying herumzuschlagen, bietet Docker ab Version 24+ eine saubere IPv6-NAT (NAT66)-Integration direkt in der /etc/docker/daemon.json. Durch das Eintragen von "ipv6": true, "ip6tables": true, "experimental": true und einem privaten ULA-Subnetz "fixed-cidr-v6": "fd00:dead:beef::/48" weist Docker jedem Container automatisch eine interne IPv6-Adresse zu und übersetzt ausgehende Verbindungen per Kernel-ip6tables-MASQUERADE auf die öffentliche Netcup-IPv6-Adresse Ihres Hosts.
Führen Sie die folgenden Befehle aus, um Ihr IPv6-Routing, die Quelladressauswahl über mehrere /64-Adressen sowie die ip6.arpa-PTR-Auflösung im Terminal zu verifizieren:
# 1. Cloudflare IPv6-DNS anpingen und den AS197540-IPv6-Pfad prüfen
ping6 -c 4 2606:4700:4700::1111
# 2. Ausgehendes HTTP über IPv6 mit spezifischen Quelladressen aus Ihrem /64-Subnetz testen
curl -6 --interface 2a03:4000:60:1234::1 https://ifconfig.co
curl -6 --interface 2a03:4000:60:1234::2 https://ifconfig.co
# 3. Prüfen, ob Ihr im SCP gesetzter Reverse-DNS-Eintrag (PTR) sauber auflöst
dig -x 2a03:4000:60:1234::1 +short Befehlserklärung: Zeigt, wie Sie ausgehende Verbindungen gezielt an eine beliebige Adresse Ihres /64-Blocks binden (--interface) und die ip6.arpa-PTR-Auflösung überprüfen.
2a03:4000:60:1234::1
2a03:4000:60:1234::2
prod-nc-01.example.com. Häufige Fehlerbehebung
DIAGNOSE-GUIDE [SYMPTOM] IPv6 funktioniert nach dem Booten für 5–10 Minuten und bricht dann mit Network is unreachable ab
Ursache: accept-ra wurde aktiviert gelassen (true bzw. Kernel-Standard 1), wodurch der Gast-Kernel die statische Default-Route verwirft, sobald der Router-Lifetime-Timer abläuft.
Lösung: Setzen Sie accept-ra: false in /etc/netplan/*.yaml sowie net.ipv6.conf.all.accept_ra = 0 in /etc/sysctl.d/99-netcup-ipv6.conf und wenden Sie Netplan erneut an.
[SYMPTOM] Eingehende IPv6-Verbindungen laufen in einen Timeout, obwohl ping6 vom Server nach außen funktioniert
Ursache: Entweder blockiert eine Regel in der Netcup SCP Stateful Firewall eingehende ICMPv6 Neighbor Solicitation (Typ 135) / Neighbor Advertisement (Typ 136) Pakete, oder in /etc/default/ufw steht IPV6=no.
Lösung: Blockieren Sie niemals die ICMPv6-Typen 133–136 (Neighbor Discovery Protocol) in der SCP Firewall oder ip6tables – anders als IPv4 (ARP) benötigt IPv6 zwingend ICMPv6 zur Auflösung von Layer-2-MAC-Adressen.
[SYMPTOM] Cloud-Init überschreibt /etc/netplan/50-cloud-init.yaml nach einem Server-Neustart
Ursache: Cloud-Init generiert die Netzwerkkonfiguration beim Booten neu, solange dies nicht explizit abgeschaltet wird.
Lösung: Führen Sie echo "network: {config: disabled}" | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg aus, damit Ihre manuelle Netplan-Datei dauerhaft erhalten bleibt.
Häufig gestellte Fragen (FAQ)
GEPRÜFTE ANTWORTENWie viele nutzbare IPv6-Adressen enthält ein Netcup /64-Subnetz?
Ein /64-IPv6-Präfix umfasst 264 = 18.446.744.073.709.551.616 einzelne IPv6-Adressen, die alle direkt auf Ihr Netcup-KVM-Netzwerkinterface geroutet werden.
Warum lehnt Gmail E-Mails ab, die mein Netcup-Server über IPv6 versendet?
Google (Gmail) verlangt zwingend, dass jede sendende IPv6-Adresse einen gültigen Reverse-DNS-Eintrag (PTR) besitzt, der vorwärts (AAAA) wieder auf exakt dieselbe IPv6-Adresse auflöst (FCrDNS). Tragen Sie Ihren IPv6-PTR-Record unter SCP → Network → Reverse DNS ein, bevor Sie IPv6 in Postfix aktivieren.
Enthält selbst der kompakte Netcup VPS pico G11.5s ein volles /64-IPv6-Subnetz?
Ja! Jeder Netcup KVM-Server – vom kompakten VPS pico G11.5s und VPS nano G11.5s bis zu den großen RS G12.5 Root-Servern – beinhaltet sowohl eine statische öffentliche IPv4-/32-Adresse als auch ein eigenes geroutetes IPv6-/64-Subnetz ohne Aufpreis.
Wie kann ich ausgehend IPv4 gegenüber IPv6 bevorzugen (apt, curl), falls ein externes Mirror-System IPv6-Probleme hat?
Entfernen Sie in der Datei /etc/gai.conf das Kommentarzeichen vor precedence ::ffff:0:0/96 100. Dadurch bevorzugt getaddrinfo() bei ausgehenden Verbindungen IPv4-A-Records, während Ihre eingehenden IPv6-Dienste weiterhin uneingeschränkt erreichbar bleiben.
QUELLEN // GEPRÜFTE TECHNISCHE DOKUMENTATION
- [1] Netcup Helpcenter — IPv6 Configuration & Gateway fe80::1 (https://helpcenter.netcup.com/)
- [2] Canonical Netplan v2 YAML Specification (https://netplan.readthedocs.io/)