IPv6 konfigurieren

IPv4-Adressen werden knapp. Das ist kein Mythos mehr, sondern harte Realistät. Aus diesem Grunde sollte sich jeder Administrator mit IPv6 auseinandersetzen und sich noch heute mit dem Umstieg beschäftigen. Da der Dualbetrieb von IPv4 und IPv6 möglich ist, gibt es keine Gründe gegen eine frühe Umstellung.

Die Konfiguration von IPv6 unter FreeBSD ist recht einfach und "straight forward". Allerdings hat sich die Konfigurationssyntax mit FreeBSD 9 leicht geändert, weshalb hier zwischen FreeBSD 8 und früher, sowie FreeBSD 9 und später unterschieden werden muss.

Nachdem wir uns die Syntax angeschaut haben, schauen wir uns noch an, wie wir die notwendigen Werte von beliebten Providern, wie bspw. Hetzner und Webtropia, ermitteln können, da diese nicht immer ohne Handarbeit funktionieren.

FreeBSD 8 und früher

Die Konfigurationssyntax von IPv6 unter FreeBSD 8 und früher ist stark an die von IPv4 angelehnt. Die folgenden Zeilen aktivieren IPv6 im Kernel, benennen die Interfaces, die mit IPv6-Adressen bestückt werden sollen, welche statischen Adressen den Interfaces zugewiesen werden sollen und unter welche Adresse der Default-Router erreichbar ist.

Falls du die Auflistung der Interfaces (ipv6_network_interfaces) weg lässt, werden alle konfigurierten Interfaces berücksichtigt.

ipv6_enable="YES"
ipv6_network_interfaces="re0"
ifconfig_re0_ipv6="2001:db8:fe44:3efa:dfcb:115:de54:c1a3 prefixlen 64"
ipv6_defaultrouter="2001:db8:fe44:3efa:dfcb:115:de54:1"

Die fett gedruckten Werte musst du entsprechend deinem System und deinem IPv6-Subnetz anpassen. Die Prefixlänge (prefixlen) hat den Standardwert 64. Du kannst ihn also weglassen, insofern deine Prefixlänge 64 beträgt. Diese Informationen erhältst du ggf. von deinem Provider.

FreeBSD 9 und später

Der Unterschied zwischen FreeBSD 8 (und früher) und 9 (und später) ist nur gering. Im Kernel muss die IPv6-Unterstützung nicht mehr aktiviert werden, da sie das standardmässig bereits ist. Zudem ist das Schlüsselwort inet6 bei der Zuweisung der IP-Adresse neu.

ipv6_network_interfaces="re0"
ifconfig_re0_ipv6="inet6 2001:db8:fe44:3efa:dfcb:115:de54:c1a3 prefixlen 64"
ipv6_defaultrouter="2001:db8:fe44:3efa:dfcb:115:de54:1"

Zur Laufzeit kannst du eine IPv6-Adresse wie gewohnt über ifconfig hinzufügen:

# ifconfig re0 inet6 2001:db8:fe44:3efa:dfcb:115:de54:c1a4 prefixlen 64

Autoconfiguration von IPv6 nutzen

IPv6 bietet die Möglichkeit Systeme vollautomatisch zu konfigurieren und somit den Zugriff aufs Netzwerk zu ermöglichen, vergleichbar mit DHCP. Ich gehe an dieser Stelle davon aus, dass dein Server in einem Netzwerk steht, dessen Router bereits über eine entsprechende Funktionalität verfügt. Ob beispielsweise dein Provider dies unterstützt, musst du bei ihm direkt nachfragen.

FreeBSD 8 und früher

Die Autokonfigurationssyntax von IPv6 ist unter FreeBSD ähnlich zu der von DHCP. Wir aktivieren IPv6 im Kernel, wie bei der manuellen Konfiguration auch, und listen optional die Interfaces auf, für die IPv6 aktiviert werden soll. Diese Zeile kann auch weggelassen werden.

ipv6_enable="YES"
ipv6_network_interfaces="re0"

FreeBSD 9 und später

Unter FreeBSD 9 ist auch bei der Autokonfiguration das Schlüsselwort inet6 zu finden, zudem die Option accept_rtadv. Der letzte Parameter bewirkt, dass die Zuweisung der IPv6-Adressen automatisch erfolgen soll.

ipv6_network_interfaces="re0"
ifconfig_re0_ipv6="inet6 accept_rtadv"

Die richtigen IPv6-Gateway-Daten ermitteln

Praktisch jeder Provider stellt seinen Kunden heute IPv6-Subnetze zur Verfügung. Diese sind so gross, dass sie von den wenigsten wohl wirklich ausgenutzt werden können. Für die Konnektivität via IPv6 sind folgende Angaben erforderlich, sofern keine Autokonfiguration angeboten wird:

  • Das Subnetz
  • Das Gateway

Bei einigen Providern liegt das Gateway nicht im gleichen Subnetz wie das dem Kunden zugewiesene Subnetz. Damit ist ein Routing - wie bei IPv4 auch - nicht ohne manuelle EIngriffe möglich, folglich besteht keine Verbindungsmöglichkeit nach aussen via IPv6. Wir könnten nun mit statischen Routen arbeiten, was allerdings angesichts der Alternative eher umständlich ist.

Wir können uns die so genannte link-local-Adresse besorgen, und zwar mit Hilfe des folgenden Befehls, nachdem die IPv6-Adresse deinem Interface zugewiesen ist:

# ping6 ff02::2%re0

Nun erhalten wir eine Ausgabe ähnlich der folgenden, wobei fe80::xxxx:xxxx:xxxx:xxxx%re0 der link-local-Adresse deines Interfaces entspricht (siehe Ausgabe von ifconfig):

PING6(56=40+8+8 bytes) fe80::xxxx:xxxx:xxxx:xxxx%re0 --> ff02::2%re0
16 bytes from fe80::yyyy:yyyy:yyyy:yyyy%re0, icmp_seq=0 hlim=64 time=0.319 ms
16 bytes from fe80::yyyy:yyyy:yyyy:yyyy%re0, icmp_seq=1 hlim=64 time=0.282 ms

fe80::yyyy:yyyy:yyyy:yyyy%re0 entspricht der link-local-Adresse des antwortenden Gateways. Diese Adresse kannst du nun in deine Interface-Konfiguration in der /etc/rc.conf eintragen, die dann bspw. so aussieht:

ipv6_network_interfaces="re0"
ifconfig_re0_ipv6="inet6 2001:db8:fe44:3efa:dfcb:115:de54:c1a3 prefixlen 64"
ipv6_defaultrouter="fe80::yyyy:yyyy:yyyy:yyyy%re0"

Nach einem Neustart sind die Einstellungen aktiv. Anstelle eines Neustarts kannst du die Default-Route auch zur Laufzeit hinzufügen:

# route add -inet6 default fe80::yyyy:yyyy:yyyy:yyyy%re0

IPv6 testen

Nachdem nun IPv6 konfiguriert ist, kannst du mit Hilfe des folgenden Befehls testen, ob es auch funktioniert:

# ping6 ipv6.google.com

Falls eine Antwort zurück kommt, hat alles funktioniert und dein Server ist via IPv6 erreichbar.