Präfix-Delegation
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Präfix-Delegation (engl. prefix delegation) ist eine Methode zur Konfiguration eines Routers[1] für IPv6. Diese Methode funktioniert über DHCPv6. Dabei gibt ein Router seine Autorität über einen IPv6-Adressbereich ab an einen anderen Router. Der delegierende Router wird in der Literatur gerne mit der Abkürzung DR (engl. delegating router) und der anfragende Router als RR (engl. requesting router) bezeichnet. Dafür benötigt der DR einen DHCPv6-Server und der RR einen DHCPv6-Client; beide Programme müssen die DHCPv6-Option IA_PD beherrschen.
Die Internet-Provider (ISP, engl. internet service provider] benutzen diese Methode zur Verteilung von Adressbereichen an ihre Kunden. Man kann diese Methode aber auch als Endkunde verwenden zur Konfiguration seiner eigenen Router, indem man den vom ISP zugeteilten Adressbereich aufteilt und einen Teilbereich an einen internen Router delegiert. Dies kann beispielsweise angewendet werden bei einem für die Internetverbindungsfreigabe eingerichteten Rechner.
Der eigene Border-Router an der Grenze zwischen dem ISP und dem eigenen Verantwortungsbereich funktioniert zunächst in der Rolle eines RR und fragt über DHCPv6 einen IPv6-Adressbereich in Form eines IPv6-Präfix an. In diesem Artikel wird angenommen, dass ihm der Präfix 2001:0db8:caff:ee00::/56
zugeteilt wird. Die ISPs verwenden unterschiedliche Strategien bei der Zuteilung: Manche gönnen ihren Kunden z.B. ein /48
-, andere ein /56
-Präfix und einige auch nur ein einziges /64
-Netzwerk. Wesentlich für die Weitergabe eines Teil-Präfixes ist natürlich die Verfügungsgewalt über ein größeren Adressbereich als ein einziges IPv6-Netzwerk. Wer vom ISP nur ein /64
-Präfix erhält, kann per Präfix-Delegation nichts weitergeben.
Installation auf dem DR¶
Der DR muss über einen DHCPv6-Server verfügen, welcher die Option IA_PD
beherrscht. Wer mit Ubuntu ein Router-Multifunktionsgerät[2] einrichten möchte, kann den in systemd-networkd eingebauten DHCPv6-Server verwenden. systemd-networkd ist als Bestandteil von systemd bei jedem Ubuntu-System bereits installiert.
Weitere DHCP-Server sind im Artikel Router/DHCP-Server aufgelistet; hier muss jedoch die Verfügbarkeit der Option IA_PD in der jeweiligen Version geprüft werden.
Installation auf dem RR¶
Der RR benötigt einen DHCPv6-Client, welcher die Option IA_PD
beherrscht. Dies ist der Fall bei dem in systemd-networkd und dem in Dnsmasq eingebauten Client, jedoch bei Ubuntu 20.04 nicht beim internen Client des NetworkManagers (Version 1.22.10). Zur Installation von dnsmasq lies dessen Hauptartikel.
Einrichtung auf dem DR¶
Als DR kann man einen Hardware-Router wie beispielsweise eine Fritzbox verwenden. Wie man hier den DHCPv6-Server und speziell die Option IA_PD aktiviert, ist natürlich abhängig vom Hersteller und konkreten Modell. Bei einer Fritzbox kann man nach dieser Anleitung 🇩🇪 vorgehen, welche auch noch bei aktuellen Modellen wie der 7490 funktioniert.
Bei einem auf Ubuntu basierenden Router-Multifunktionsgerät mit den beiden Netzwerkschnittstellen ISP
zum Internetprovider und DMZ
als internem Netz kann man als root [3][4][5] mit systemd-networkd so konfigurieren:
Für die Schnittstelle
ISP
legt man z.B. eine Datei /etc/systemd/network/20-ISP.network an:# /etc/systemd/network/20-ISP.network [Match] Name = ISP [Network] Description = IPv6-Präfix vom ISP per DHCPv6-Client anfordern #IPForward = yes IPForward = ipv6 IPv6AcceptRA = yes DHCP = ipv6 #DHCP = yes
Für die Schnittstelle
DMZ
(demilitarized zone) benötigt man z.B. eine Datei /etc/systemd/network/20-DR-DMZ.network:# /etc/systemd/network/20-DR-DMZ.network [Match] Name = DMZ [Network] Description = IPv6-Präfix per DHCPv6-Server den Clients ankündigen IPv6PrefixDelegation = dhcpv6 [IPv6PrefixDelegation] Managed = true OtherInformation = true
IPForward = ipv6
schaltet die Routing-Funktionalität für IPv6 ein. Alternativ kann man auch den Wertyes
verwenden, um sie für beide IP-Protokolle einzuschalten.IPv6AcceptRA = yes
sorgt dafür, dass die vom vorgeschalteten Router ausgesendeten Konfigurationsdaten für IPv6 übernommen werden.DHCP = ipv6
bzw. alternativDHCP = yes
für beide IP-Protokolle ist nicht unbedingt erforderlich, da der DHCPv6-Client schon wegenIPv6AcceptRA = yes
gestartet wird.IPv6PrefixDelegation = dhcpv6
schaltet die Weitergabe des per DHCP auf einer anderen erhaltenen Präfixes auf dieser Schnittstelle ein. Die Details hierfür müssen in einem weiteren Abschnitt[IPv6PrefixDelegation]
konfiguriert werden. Alternativ kann man auchIPv6PrefixDelegation = static
verwenden, dann wird der weiterzugebende Präfix nicht per DHCP gelernt, sondern man muss ihn in einem Abschnitt[IPv6Prefix]
definieren.Die Beispieldateien sind ggf. noch um Konfigurationsangaben für IPv4 zu ergänzen, wenn man einen Router für beide IP-Protokolle haben will.
Weitere Details können den Handbuchseiten von systemd-networkd entnommen werden:
man systemd.network man systemd-networkd
Einrichtung auf dem RR¶
Der dem Border-Router nachgeschaltete Router verfügt z.B. über die Schnittstellen DMZ
zum Border-Router und LAN
als internem Netz.
… per systemd-networkd¶
Die Konfigurationsdatei für
DMZ
auf dem RR entspricht technisch genau der der Datei fürISP
auf dem DR, man muss nur Name und Beschreibung anpassen:# /etc/systemd/network/20-RR-DMZ.network [Match] Name = DMZ [Network] Description = IPv6-Präfix vom Border-Router per DHCPv6-Client anfordern IPForward = ipv6 IPv6AcceptRA = yes DHCP = ipv6
Die Konfigurationsdatei für
LAN
entspricht technisch genau der der Datei fürDMZ
auf dem DR, auch hier muss man nur Name und Beschreibung anpassen.
… per NetworkManager¶
Bei der Verwendung von NetworkManager zur Konfiguration des Netzwerks mit Präfix-Delegation sind drei Teilaufgaben zu lösen:
Da der interne DHCPv6-Client des NetworkManager bei Ubuntu 20.04, vielleicht auch anderer Versionen, jedenfalls die Option
IA_PD
nicht beherrscht, muss man NetworkManager auf die Verwendung eines anderen DHCPv6-Client um konfigurieren. Dieser Schritt 1 ist bei der Verwendung des Paketes network-manager in der Version1.22.10-1ubuntu2.2
(ab 20.04.3) nicht mehr erforderlich.Dazu erstellt man als
root
im Verzeichnis /etc/NetworkManager/conf.d/ eine Datei dhcpv6-client.conf mit folgendem Inhalt[3][4][5]:# /etc/NetworkManager/conf.d/dhcpv6-client.conf [main] # dhcp=internal dhcp=systemd # dhcp=dnsmasq
Der Wert
systemd
ist undokumentiert und funktioniert (nur?) bei NetworkManager Version 1.22 (Ubuntu 20.04); die Alternativednsmasq
funktioniert bei NetworkManager Versionen 1.20 und 1.22. Die bei den verschiedenen Ubuntu-Versionen verwendeten Versionen des NetworkManager haben unterschiedliche Voreinstellungen bzgl. des DHCP-Clients, und die Clients haben auch versionsabhängig unterschiedliche Fähigkeiten; deshalb führen bei anderen Versionen des NetworkManagers möglicherweise die anderen Optionen zum Erfolg.Die Datei muss
root
gehören und nurroot
darf sie beschreiben dürfen.NetworkManager neu starten.
Das Verbindungsprofil für die Schnittstelle
DMZ
undebenso das Verbindungsprofil für die Schnittstelle
LAN
muss im Abschnitt[ipv6]
mit der Optionmethod=shared
konfiguriert werden. Über GUI-Werkzeuge ist dies als Einstellung „Gemeinsam mit anderen Rechnern“ möglich.
Dieser Abschnitt ist insbesondere bei der Einrichtung einer Internetverbindungsfreigabe hilfreich.
Links¶
RFC 8415 🇬🇧 – Internet-Standard zu DHCPv6
RFC 3633 🇬🇧 – Ursprüngliche Spezifikation der Präfix-Delegation, veraltet wegen RFC 8415
Support IPv6 Prefix Delegation / NetworkManager 🇬🇧 – Für IPv6 Präfix-Delegation beim NetworkManager anderen DHCPv6-Client benutzen.