Mit einer Handvoll Änderungen in wenigen Konfigurationsdateien machen Sie Ihr Netz samt Clients, Router und Webserver fit für die schöne neue IPv6-Welt.
Serie IPv6
| Teil 1 | IPv6-Grundlagen | LU 01/2010, S. 84 | https://www.linux-community.de/artikel/19917 |
| Teil 2 | IPv6-Tunneling | LU 02/2010, S. 80 | https://www.linux-community.de/artikel/20301 |
Nachdem der erste Teil der Serie die Grundlagen zu IPv6 vorgestellt hat, geht es nun also darum, Ressourcen über das neue Protokoll anzusprechen. Aktuelle Linux-Distributionen bringen IPv6-Support bereits von Haus aus mit. Dies gilt sowohl für die Kernel- als auch für die Applikationsseite. Benötigen Sie einen angepassten Kernel, so müssen Sie bei der IPv6-Konfiguration darauf achten, dass Sie alle notwendigen Module auswählen (Abbildung 1).
Für die Applikationen ist es entscheidend, dass die Skripte zur Initialisierung des Netzwerkes IPv6 unterstützen, was jedoch bei allen aktuellen Linux-Distributionen ohnehin funktioniert. Zusätzlich gibt es einige Werkzeuge, die bei der Administration eines IPv6-Systems helfen. Dazu zählt etwa iptables-ipv6, mit dessen Hilfe die IPv6-Erweiterung des Paketfilters gelingt. Ein Blick in die Paketverwaltung der verwendeten Distribution zeigt alle verfügbaren Tools.

Abbildung 1: Bei der Konfiguration eines angepassten Kernels müssen Sie die gewünschten IPv6-Module selbstständig auswählen.
Vorüberlegungen
Bevor Sie jetzt mit der Konfiguration der Netzwerkumgebung beginnen, gilt es erst einmal einige Überlegungen anzustellen: Möchten Sie lediglich auf Ressourcen im eigenen LAN zugreifen, oder wollen Sie die IPv6-Pakete auch in das globale Netz routen? Es gibt zwei gewichtige Gründe, diese Entscheidung bereits im Vorfeld zu treffen. Um die Pakete lediglich im eigenen Netzwerk zu transportieren, genügt eine eindeutige lokale Unicast-Adresse, eine sogenannte Unique Local Addresses (ULA).
Solche Adressen entsprechen den Adresskreisen für private IPv4-Adressen, wie etwa 192.168.0.0/24. Möchten Sie diese ULA selbstständig bestimmen, so steht hierfür der IPv6-Adressraum fd00::/7 zur Verfügung. Wollen Sie jedoch die IPv6-Pakete auch ausserhalb Ihres eigenen Netzwerks transportieren, so benötigen Sie zwingend eine eindeutige globale Unicast-Adresse. Solche Adressen beginnen üblicherweise mit dem Präfix 2000::/3.
Von wo bekommt man nun eine solche globale IPv6-Adresse? Dafür gibt es mehrere mögliche Antworten. Zum einen bieten viele Internet-Service-Provider ISPs bereits Support für IPv6 an, auf der anderen Seite existieren sogenannte Tunnel-Broker. Diese tunneln die IPv6-Pakete über IPv4-Pakete und befördern sie so in die IPv6-Welt. Einer der bekannteren Anbieter dieser Art heißt SixXS.
IPv6-Adressen beziehen
SixXS bietet neben dem Bezug von einzelnen IPv6-Adressen auch die Weiterleitung ganzer IPv6-Subnetze an. Somit lässt sich jeder Rechner im heimischen LAN mit einer öffentlich erreichbaren IPv6-Adresse versorgen. Das Tolle daran: Das funktioniert selbst dann, wenn die IPv4-Adresse des eigenen Tunnel-Endpunktes dynamisch zugewiesen ist und als NAT-Adresse für das lokale Netz dient.
Um nun an die begehrte IPv6-Adresse zu kommen, erstellen Sie als Erstes einen Account auf der SixXS-Webseite [1]. Im Anschluss können Sie dann direkt einen Tunnel mit eigenem Subnetz beantragen. Nach erfolgreicher Anmeldung und der Annahme des Antrags erscheinen die relevanten Daten auf der SixXS-Webseite (Abbildung 2).
Für den Aufbau des Tunnels benötigen Sie eine entsprechende Client-Software. SixXS bietet dazu das Tool Aiccu (“Automatic IPv6 Connectivity Client Utility”) an. Sie laden es direkt von der SixXS-Webseite herunter [2]. Fedora-Benutzer installieren die Anwendung einfach mittels des Befehls yum install aiccu aus dem Standard-Software-Repository heraus.
In der Konfigurationsdatei etc/aiccu.conf tragen Sie dann den von SixXS erhaltenen Benutzernamen nebst Passwort und die entsprechende Tunnel-ID ein (Listing 1). Durch Aufruf von /etc/init.d/aiccu starten Sie die Anwendung und bauen so den Tunnel auf. Ein abschließender Ping auf die IPv6-Webseite von Google bestätigt die korrekte Funktionsweise des Tunnels (Abbildung 3).

Abbildung 3: Nach dem Start der Client-Anwendung baut diese den IPv6-Tunnel auf, und Sie erhalten eine globale IPv6-Adresse. Damit greifen Sie nun auf externe IPv6-Ressourcen zu.
# etc/aiccu.conf (Beispiel) username TSQ5-SIXXS password password tunnel_id T24231 server tic.sixxs.net protocol tic ipv6_interface sixxs verbose true daemonize true automatic true requiretls false
Rufen Sie im Browser nun auch einmal die URL http://ipv6.whatismyv6.com auf. Als Ergebnis bekommen Sie Ihre von SixXS zugewiesene IPv6-Adresse angezeigt (Abbildung 4). Solange der Tunnel aktiv bleibt, kann man Sie nun unter dieser Adresse aus dem IPv6-Netz erreichen.

Abbildung 4: Über die Webseite http://ipv6.whatismyv6.com sehen Sie die IPv6-Adresse, mit der Sie im Internet unterwegs sind.
IPv6-Adressen fürs LAN
Damit auch andere Rechnern aus dem lokalen Netz via IPv6 auf das Internet zugreifen können, benötigen diese ebenfalls eine entsprechende Adresse. Für deren Zuweisung gibt es mehrere Lösungsansätze. Zum einen können Sie eine IPv6-Adresse aus dem zugewiesenen Subnetz manuell in die Netzwerk-Konfigurationsdatei eintragen. Im gezeigten Beispiel lautet der von SixXS zugewiesene Subnetz-Präfix 2a01:198:514::/48. Da er nur 48 Bit in Anspruch nimmt, verbleiben 16 Bits für die Definition eigener Netze – damit lassen sich bis zu 65535 Subnetze aufbauen.
Für unseren Zweck genügt ein einzelnes Subnetz, sodass Sie den Rest der Adresse lediglich mit Nullen ausfüllen. Die Interface-ID besteht lediglich aus einer einzelnen Ziffer, der “1”. Die so erzeugte IP-Adresse tragen Sie auf einem Fedora-System dann zusätzlich zur bereits bestenden IPv4-Konfiguration in der Datei ifcfg-eth0 unter /etc/sysconfig/network-scripts/ ein. Verwenden Sie ein anderes Interface, müssen Sie den Dateinamen entsprechend anpassen.
Die komplette Konfiguration könnte so aussehen, wie das Listing 2 zeigt. Nach einem Neustart des Netzwerkes mittels /etc/init.d/network restart zeigt der Aufruf von ip -6 a s eth0 und ip -6 r die konfigurierte IPv6-Adresse mitsamt des Default-Gateways an – zumindest, falls alles geklappt hat.
# ifconfig-eth0 (Beispiel) IPV6INIT=YES IPV6_AUTOCONF=NO IPV6ADDR=2a01:198:514::1/64 IPV6_DEFAULTGW=2a01:198:200:6f7::2
Natürlich lassen sich weitere Rechner auf die selbe Weise konfigurieren, einfacher geht es jedoch mit Hilfe der Stateless-Autokonfiguration. Hierzu setzen Sie die Anweisung IPV6_AUTOCONF aus der Konfigurationsdatei der Netzwerkkarte einfach auf den Wert NO. Daraufhin sendet der Client selbständig sogenannte Solicitation Messages an die Multicast-Adresse ff02::2. Als Absenderadresse kommt hierbei die verbindungslokale Adresse (fe80::) zum Einsatz, die Ihr System bei aktivem IPv6 automatisch erzeugt.
Auf einem Fedora-System aktivieren Sie den IPv6-Support gegebenenfalls über die Anweisung NETWORKING_IPV6=yes in der Datei /etc/sysconfig/network. Allerdings verwenden alle gängigen Linux-Distributionen diesen Wert in den aktuellen Releases als Vorgabe, so dass Sie hier meist nichts ändern müssen. Überprüfen Sie im Zweifelsfall einfach mithilfe von ip, ob der Rechner eine solche verbindungslokale Adresse besitzt (Listing 3, oben)
Existiert im LAN ein IPv6-fähiger Router, so antwortet er beim Empfang der Solicitation Messages eines Clients mit einer sogenannten Advertisement Message antworten. Dieses Antwort-Paket enthält unter anderem den Subnetz-Präfix für Ihr Netzwerk. Aus der Hardware-Adresse der Netzwerkkarte generiert der Client dann die Interface-ID, die zusammen mit dem Subnetz-Präfix die IPv6-Adresse ergibt. Klappt alles, dann besitzt der Rechner nun neben der verbindungslokalen Adresse auch eine globale Adresse aus dem oben genannten Subnetz (Listing 3, unten).
# ip -6 a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 100
inet6 fe80::208:74ff:fea8:dd17/64 scope link
valid_lft forever preferred_lft forever
# ip -6 a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2a01:198:514:0:21b:77ff:fe40:9e8e/64 scope global dynamic
valid_lft 2587384sec preferred_lft 600184sec
inet6 fe80::208:74ff:fea8:dd17/64 scope link
valid_lft forever preferred_lft forever
Über diese Adresse kann der Client dann durch den IPv6-Tunnel mit anderen Rechnern im Internet zu kommunizieren. Natürlich muss er dazu wissen, dass er die Pakete in den Tunnel senden soll. Diese Information bildet in Form des angegebenen Default-Gateways jedoch bereits einen Teil der Advertisement Message des Routers, sodass Sie sie nicht manuell liefern müssen.
IPv6 auf dem Router
Bleibt die spannende Frage: Wie lässt sich solch ein IPv6-fähiger Router konfigurieren? Zum einen gibt es Hardware wie beispielsweise die Fritzbox, die den notwendigen IPv6-Support bereits mitbringt. Solche Geräte können selbstständig einen IPv6-Tunnel zu einem Tunnel-Broker aufzubauen. Zum anderen gibt es mit radvd auch eine passende Software für Linux. Die Anwendung findet sich in den Software-Repositories der meisten Linux-Distributionen, sodass die Installation mit dem jeweiligen Paketmanager leicht gelingt. Unter Fedora rufen Sie dazu einfach yum install radvd auf.
In die Konfigurationsdatei /etc/radvdv.conf tragen Sie anschließend den von SixXS zugewiesen Prefix ein (Listing 4). Nach einem Start des Dienstes mittels /etc/init.d/radvd start lauscht Radvd nun auf entsprechende Client-Anfragen und sendet sogar selbständig in regelmäßigen Zeitintervallen Informationen über den konfigurierten IPv6-Prefix in das Netzwerk.
# /etc/radvdv.conf (Beispiel)
interface eth0
{
AdvSendAdvert on;
prefix 2a01:198:514::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
Damit der Router nun auch alle Anfragen der Clients über den IPv6-Tunnel weiterleitet, müssen Sie noch das IP-Forwarding aktivieren. Das erledigen Sie im einfachsten Fall mit dem Befehl
sysctl -w net.ipv6.conf.all.forwarding=1
Für eine dauerhafte Aktivierung setzen Sie diese Variable einfach statisch in der Datei /etc/sysctl.conf.
Danach sind Ihre Rechner ab sofort unter einer IPv6-Adresse direkt aus dem Internet zu erreichen, also nicht mehr hinter einer NAT-Adresse versteckt. Das bringt neben vielen Vorteilen freilich auch etliche Gefahren mit sich. Es führt demgemäß kein Weg daran vorbei, auf dem zentralen IPv6-Router entsprechende Paketfilter-Regeln zu definieren, um den Zugriff von außen auf das Netzwerk einschränken. Eine beispielhafte Konfiguration für einen solchen Paketfilter zeigt das Listing 5.
# Alle bestehenden Regeln loeschen ip6tables -F ip6tables -X # Zugriff über das Loopback-Device erlauben ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT # Uneingeschraenkter Zugriff auf den IPv6-Tunnel vom Router aus ip6tables -A OUTPUT -o sixxs -j ACCEPT # Zugriff aus dem lokalen Subnetz ebenfalls erlauben ip6tables -A INPUT -i eth0 -j ACCEPT ip6tables -A OUTPUT -o eth0 -j ACCEPT # Source-Routing-Pakete gefaehrlich, nicht zugelassen ip6tables -A INPUT -m rt --rt-type 0 -j DROP ip6tables -A FORWARD -m rt --rt-type 0 -j DROP ip6tables -A OUTPUT -m rt --rt-type 0 -j DROP # Verbindungslokale Adressen erlaubt ip6tables -A INPUT -s fe80::/10 -j ACCEPT ip6tables -A OUTPUT -s fe80::/10 -j ACCEPT # Multicast-Pakete zulassen ip6tables -A INPUT -s ff00::/8 -j ACCEPT ip6tables -A OUTPUT -s ff00::/8 -j ACCEPT # ICMP-Protokoll zur Fehlersuche zulassen ip6tables -I INPUT -p icmpv6 -j ACCEPT ip6tables -I OUTPUT -p icmpv6 -j ACCEPT ip6tables -I FORWARD -p icmpv6 -j ACCEPT # Uneingeschraenkter Zugriff auf den IPv6-Tunnel aus dem Subnetz ip6tables -A FORWARD -m state --state NEW -i eth0 -o sixxs -s 2a01:198:514::/48 -j ACCEPT ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Ueber den Tunnel eingehende SSH-Verbindungen zulassen #ip6tables -A FORWARD -i sixxs -p tcp -d 2a01:198:514::1 --dport 22 -j ACCEPT # Ueber den Tunnel eingehenden Bittorrent-Traffic erlauben ip6tables -A FORWARD -i sixxs -p tcp -d 2a01:198:514::1 --dport 33600:33604 -j ACCEPT # Alles andere ist verboten ip6tables -P INPUT DROP ip6tables -P FORWARD DROP ip6tables -P OUTPUT DROP
Speichern Sie das Skript aus Listing 5 als /root/fw.sh und aktivieren Sie dann die Regeln über den Befehl sh /root/fw.sh. Der Aufruf /etc/init.d/iptables-save sorgt dafür, dass die Regeln auch nach einem Neustart des Rechners aktiv bleiben.
Der Paketfilter erlaubt sämtlichen Traffic aus dem eigenen Subnetz über den IPv6-Tunnel nach außen. Er lässt eingehende Pakete jedoch nur dann zu, wenn als Protokoll entweder SSH oder aber Bittorrent zum Einsatz kommen. Bei Bedarf erweitern Sie das Skript nach Belieben um zusätzliche Protokolle. Eine sehr gute Einführung in das Thema Paketfilter auf Basis von Netfilter finden Sie unter [3].
Eigene IPv6-Dienste
Falls Sie jetzt auf den Geschmack gekommen sind und eventuell eigene IPv6-Dienste unter einer statischen Adresse anbieten möchten, dann helfen eventuell die folgenden Abschnitte weiter.
Einen der am meisten verwendeten Internet-Dienste stellt sicherlich WWW dar. In der Unix-Welt kommt hierfür besonders oft Apache als Webserver zum Einsatz. Im folgenden gehen wir davon aus, dass Sie in der Datei /etc/httpd/conf/httpd.conf nach dem Muster von Listing 6 bereits mehrere virtuelle Hosts für IPv4 konfiguriert haben.
<VirtualHost 192.168.0.1:80> ServerAdmin webmaster@worlddomination.org DocumentRoot /var/www/html/worlddomination/ ServerName www.worlddomination.org ErrorLog logs/worlddomination.org-error_log TransferLog logs/worlddomination-access_log </VirtualHost>
Soll dieser virtuelle Host nun über eine IPv6-Adresse zu erreichen sein, müssen Sie die erste Zeile des im Listing gezeigten Abschnitts entsprechend abändern, sodass sie die IPv6-Adresse enthält:
<VirtualHost [2a01:198:514:0:21b:77ff:fe40:9e8e]:80>
Auch eine Kombination mit der alten IPv4-Adresse funktioniert. Wichtig: Die IPv6-Adresse muss in eckigen Klammern stehen, da ansonsten der Port-Trenner nicht eindeutig ist. Schließlich trennt man unter IPv6 die einzelnen Blöcke ebenfalls mit einem Doppelpunkt.
Nach einem Neustart des Dienstes mittels /etc/init.d/httpd restart lauscht dieser nun auch auf der angegebenen IPv6-Adresse auf eingehende Anfragen. Die Ausgabe von Netstat bestätigt das (Listing 7).
# netstat -tln |grep '80\>' tcp 0 0 192.168.0.99:80 0.0.0.0? LISTEN tcp 0 0 2a01:198:514:0:21b:77ff::80 ::? LISTEN
Generell lässt sich sagen, dass auf aktuellen Linux-Distributionen die allermeisten Server-Dienste bereits IPv6-fähig sind. Einige, wie etwa der Apache-Webserver, benötigen zum korrekten Funktionieren noch einige Anpassungen, andere laufen bereits ohne manuelle Änderungen problemlos auch unter IPv6. Stellen Sie beispielsweise eine SSH-Verbindung zu einem IPv6-Host her, so sollte der Connect ohne Probleme funktionieren. Die verantwortliche Einstellung in der Konfigurationsdatei /etc/ssh/sshd_config hierfür lautet AddressFamily any und ist in der Standardeinstellung bereits aktiv. Möchten Sie den Connect ausschließlich für IPv6 erlauben, so müsste die Anweisung AddressFamily IPv6 lauten.
Zum Schluss noch einige Hinweise zum Thema DNS-Namensauflösung: In der IPv4-Welt funktioniert die Auflösung von einem Rechnernamen in die dazu passende IP-Adresse über einen sogenannten A-Eintrag. Der findet sich in den Zonendateien eines DNS-Servers. Unter IPv6 erfolgt dieses Mapping jedoch über den AAAA-Eintrag. Listing 6 zeigt ein Beispiel für die Auflösung eines IPv4- und eines IPv6-Namens.
# dig +short -t A www.google.com www.l.google.com. 74.125.43.103 74.125.43.99 74.125.43.105 74.125.43.106 74.125.43.104 74.125.43.147 # dig +short -t AAAA ipv6.google.com ipv6.l.google.com. 2a00:1450:8006::63 2a00:1450:8006::67 2a00:1450:8006::69 2a00:1450:8006::68 2a00:1450:8006::93 2a00:1450:8006::6a
Möchten Sie Ihre eigenen Dienste im DNS nun auch unter Ihrer IPv6-Adresse registrieren, müssen Sie dazu entsprechende Änderungen an der Zonendatei Ihres DNS-Servers vornehmen. Nähere Informationen zu diesem Thematik bieten beispielsweise die SixXS-FAQ [4].
Fazit
Ist der Einstieg in die IPv6-Welt erst einmal geschafft, fällt die Konfiguration der passenden Umgebung nicht wirklich schwerer als man es von IPv4 her kennt. Langfristig werden Sie vermutlich um den Einsatz des neuen Protokolls sowieso nicht herum kommen, sodass sich die Beschäftigung mit der Technik bereits jetzt lohnt.
Infos
[1] SixXS: https://www.sixxs.net
[2] Aiccu: https://www.sixxs.net/tools/aiccu/
[3] Netfilter-Tutorial: http://www.frozentux.net/documents/iptables-tutorial/
[4] DNS-Server-Konfiguration für IPv6: http://www.sixxs.net/faq/dns/?faq=ipv6glue






