IPv6/System-Check
IPv6 System-Check
Bevor Sie IPv6 auf einem Linux Host einsetzen können, müssen sie überprüfen, ob das System IPv6 fähig ist. Eventuell haben Sie Änderungen vorzunehmen, um IPv6 zu ermöglichen.
IPv6 kompatibler Kernel
Neuere Linux Distributionen beinhalten bereits einen IPv6-fähigen Kernel. Die IPv6-Funktionalität wird im Allgemeinen als Modul kompiliert. Es ist aber durchaus möglich, dass das Modul nicht automatisch beim Start des Betriebssystems geladen wird.
Hinweis: Sie sollten die Kernel Serie 2.2.x nicht mehr verwenden, da die IPv6-Implementierung nicht mehr aktuell ist. Auch die in der Serie 2.4.x wird nicht mehr weiterentwickelt bzgl. der Definitionen in den neueren RFCs. Es wird empfohlen, einen aus der Serie 2.6.x zu verwenden.
4.1.1. Überprüfung der IPv6 Unterstützung im aktuellen Kernel
Um zu überprüfen, ob ihr aktueller Kernel IPv6 unterstützt, sollten sie einen Blick in ihr /proc-Dateisystem werfen. Folgende Einträge müssen existieren:
Einen kleinen automatischen Test können Sie wie folgt durchführen:
Wenn dieser Test negativ verläuft, ist das IPv6 Modul aller Wahrscheinlichkeit noch nicht geladen.
IPv6 Module laden
Mit folgenden Befehl können Sie versuchen, das Modul zu laden:
Wenn dieser Befehl positiv verläuft, dann sollten Sie das Modul mit folgendem Befehl auflisten können:
Der obige Test sollte nun erfolgreich verlaufen.
Hinweis: Ein Entfernen des Moduls im laufenden System wird derzeit nicht unterstützt und kann unter gewissen Bedingungen zu einem Absturz des Kernels führen.
Automatisches Laden des Moduls
Es ist möglich das IPv6 Modul bei Bedarf automatisch zu laden. Sie müssen nur folgende Zeile in die Konfigurationsdatei des kernel modul loaders eintragen (normalerweise: /etc/modules.conf oder /etc/conf.modules):
Mit der folgenden Zeile ist es auch möglich, das automatische Laden des IPv6 Moduls auszuschalten.
Anmerkung: In Kernel Series 2.6.x wurde der Modul-Lade-Mechanismus geändert. Die neue Konfigurationsdatei wird anstelle /etc/modules.conf nun /etc/modprobe.conf genannt.
Kernel-Kompilierung mit IPv6 Funktionalität
Wenn beide oben gezeigten Methoden ohne Erfolg blieben und ihr Kernel somit keine IPv6 Unterstützung bietet, dann haben Sie folgende Optionen:
- Aktualisieren Sie Ihre Distribution mit einer Version, die von Haus aus IPv6 unterstützt (empfohlen für Anfänger),
- Sie können einen Standard-Kernel kompilieren (einfach, wenn Sie die benötigten Optionen kennen)
- Kompilieren Sie die Kernel-Quellen ihrer Distribution (manchmal nicht ganz so einfach)
- Kompilieren Sie einen Kernel mit den USAGI-Erweiterungen
Falls Sie sich dazu entscheiden, einen neuen IPv6 kompatiblen Kernel zu kompilieren, sollten Sie auf jeden Fall bereits Erfahrung mit der Kernel-Kompilierung haben sowie das Linux Kernel HOWTO lesen.
Ein Vergleich zwischen dem Standard-Kernel und dem Kernel mit USAGI-Erweiterungen ist verfügbar unter IPv6+Linux-Status-Kernel.
Kompilieren eines Standard-Kernels
Detailliertere Ausführungen zur Kompilierung eines IPv6 fähigen Kernels finden Sie unter IPv6-HOWTO-2#kernel.
Hinweis: Sie sollten wann immer möglich die Kernel Serie 2.6.x oder höher einsetzen, da die IPv6 Unterstützung der Serie 2.4.x nur einige Backports erhält und die IPv6-Unterstützung von Serie 2.2.x hoffnungslos veraltet ist und nicht mehr weiterentwickelt wird.
Kompilieren eines Kernels mit USAGI-Erweiterungen
Wie für den Standard-Kernel gilt auch hier, dass das Kompilieren des Kernels nur fortgeschrittenen Benutzern empfohlen wird, die mit IPv6 und dem Kompilieren des Kernels bereits vertraut sind.
Siehe auch USAGI project / FAQ und Obtaining the best IPv6 support with Linux (Article) (Spiegel).
IPv6 kompatible Netzwerkgeräte
Nicht alle Netzwerkgeräte sind bereits (bzw. überhaupt) dazu in der Lage, IPv6 Pakete übertragen zu können. Den aktuellen Status können Sie unter IPv6+Linux-status-kernel.html#transport.
Ein entscheidender Punkt ist die Tatsache, dass ein IPv6 Paket wegen der Struktur der Netzwerkschicht in der Kernel-Implementierung nicht wirklich aufgrund der IP-Header-Nummer (6 anstelle 4) wiedererkannt wird. Es wird aufgrund der Protokollnummer der Schicht 2 Transport-Protokolls wiedererkannt. Folglich können IPv6 Pakete von keinem Transport-Protokoll verwendet werden, welche diese Protokoll-Nummer nicht nutzen. Hinweis: Das Paket wird nach wie vor über den Link transportiert, aber auf der Empfänger-Seite kann das Paket nicht verarbeitet werden (Sie können dies z.B. mit tcpdump sehen).
Gegenwärtig bekannte Verbindungsarten, die niemals IPv6 fähig sein werden
- Serial Line IP (RFC 1055 / SLIP), auch SLIPv4 genannt; das Gerät heißt: s1X
- Parallel Line IP (PLIP), gleich dem SLIP, Gerätename: plipX
- ISDN mit rawip Encapsulation; Gerätename: isdnX
Bekannte Verbindungsarten, die gegenwärtig IPv6 nicht unterstützen
- ISDN mit syncppp Encapsulation; Gerätename: ipppX (Designfrage des ipppd; in der Kernel Serie 2.5.x wird ipppX in einer allgemeinen PPP Schicht inkludiert)
IPv6 kompatible Tools zur Netzwerkkonfiguration
Ohne entsprechende Tools zur Konfiguration von IPv6 würden Sie mit einem IPv6 fähigen Kernel nicht weit kommen. Es gibt verschiedene Pakete womit IPv6 konfiguriert werden kann.
4.2.1. net-tools Paket
Das Paket net-tool beinhaltet einige Tools wie ifconfig und route. Mit den Tools kann IPv6 auf einem Interface konfiguriert werden. Sehen Sie sich die Ausgabe des Befehls ifconfig -? Bzw. route -? an. Finden Sie in der Ausgabe die Worte IPv6, inet6 oder Ähnliches, dann ist das Tool IPv6-kompatibel.
Automatische Überprüfung:
Folgenden Check gibt es für route:
4.2.2. iproute Paket
Alexey N.Kuznetsov (gegenwärtig ein Betreuer des Linux Network Codes) erstellte eine Tool-Sammlung, womit das Netzwerk mittels dem netlink Device konfiguriert wird. Diese Tool-Sammlung stellt mehr Funktionalität als das net-tools Paket zur Verfügung, ist aber nicht sehr umfangreich dokumentiert und nichts für schwache Nerven.
Wird das Programm /sbin/ip nicht gefunden, dann wird die Installation des iproute Paketes empfohlen.
- Sie können dies (falls beinhaltet) von der benutzten Linux-Distribution installieren
- Sie können nach einem passenden RPM Paket unter RPMfind/iproute suchen (manchmal ist auch das kompilieren eines SRPMS Paketes zu empfohlen)
IPv6 Test/Debug-Programme
Nachdem Sie ihr System auf IPv6 vorbereitet haben, wollen Sie nun IPv6 für die Netzwerkkommunikation einsetzen. Zuerst sollten Sie lernen, IPv6 Pakete mit einem Sniffer Programm zu untersuchen. Dies ist zu empfehlen, denn in Hinblick auf Fehlersuche und Troubleshooting kann das Durchführen einer schnellen Diagnose von Nutzen sein.
IPv6 ping
Das Programm ist normalerweise im Paket iputils beinhaltet. Durch senden von ICMPv6 echo-request Paketen und warten auf ICMPv6 echo-reply Paketen können einfache Transport-Tests durchgeführt werden.
Anwendung
Einige Implementierungen unterstützen auch %<device> Definition zusätzlich zu -I <device>, z.B.
Beispiel
Hinweis: ping6 benötigt direkten Zugriff auf den Socket und hierfür Root-Rechte. Wenn Nicht-Root-Benutzer ping6 nicht benutzen können, kann dies zwei Ursachen haben:
- ping6 ist nicht im Pfad des Benutzers eingetragen; ping6 ist allgemein in /usr/sbin zu finden -> Lösung: Den Pfad ergänzen (nicht empfohlen)
- ping6 lässt sich im Allgemeines wegen fehlender Root-Rechte nicht korrekt ausführen -> Lösung: chmod u+s /usr/sbin/ping6
Das Interface für einen IPv6 ping bestimmen
Wenn link-lokale Adressen für ein IPv6 ping verwendet werden, dann hat der Kernel keine Kenntnis darüber, durch welches (physikalische oder virtuelle) Gerät das Paket gesendet werden muss - jedes Gerät hat eine link-lokale Adresse. Ein Versuch resultiert in folgender Fehlermeldung:
In diesem Fall müssen Sie das Interface zusätzlich spezifizieren:
Beispiel für %<device> Notation:
Ping6 zu Multicast-Adressen
Ein interessanter Mechanismus zum Aufspüren eines IPv6 aktiven Hosts am Link ist mit ping6 an eine link-lokale all-node Multicast Adresse zu pingen.
Beispiel für %<device> Notation:
Bei IPv6 kann dieses Verhalten zurzeit, im Gegensatz zu IPv4, wo Antworten auf ein Ping auf die Broadcast Adresse unterdrückt werden können, nicht unterbunden werden. Ausnahme hierbei ist der Einsatz der lokalen IPv6 Firewall-Funktionalität.
IPv6 traceroute6
IPv6 traceroute6 (alt)
Dieses Programm ist normal im Paket iputils enthalten. Es ist ein Programm vergleichbar dem IPv4 traceroute. Unten sehen Sie ein Beispiel:
Anmerkung: Im Unterschied zu modernen IPv4 traceroute Versionen, welche den Einsatz von ICMPv4-echo-request Paketen wie auch UDP Paketen (default) ermöglichen, können mit IPv6-traceroute nur UDP Pakete versendet werden. Wie Sie vielleicht bereits wissen, werden von Firewalls bzw. von ACLs auf Routern ICMP echo-request Pakete mehr akzeptiert als UDP Pakete.
Falls ein Interface spezifiziert werden muß, kann dies durch -i <device> oder in der Form <address>%<device> erfolgen.
4.3.2.2. traceroute ab Version 2)
traceroute bekam IPv6-Unterstützung ab Version 2 mit den gleichen Möglichkeiten wie für IPv4. Hier ein Beispiel für einen ICMP (ping) traceroute (benötigt root-Rechte)
Falls ein Interface spezifiziert werden muß, kann dies durch -i <device> erfolgen.
IPv6 tracepath6
Dieses Programm ist normalerweise im Paket iputils enthalten. Das Programm ist dem traceroute6 ähnlich, es gibt den Weg zu einem angegebenen Ziel wieder und misst hierbei den MTU-Wert. Unten sehen Sie ein Beispiel:
IPv6 tcpdump
In Linux ist tcpdump ein Haupttool zum aufzeichnen von Paketen. Weiter unten sehen Sie einige Beispiele. Normalerweise ist die Ipv6-Unterstützung in der aktuellen Version 3.6 gegeben.
Bei tcpdump werden zur Geräuschminimierung bei der Paket-Filterung Ausdrücke eingesetzt:
- icmp6: ICMPv6 Datenverkehr wird gefiltert
- ip6: IPv6 Datenverkehr (inkl.ICMPv6) wird gefiltert
- proto ipv6: getunnelter IPv6-in-IPv4 Datenverkehr wird gefiltert
- not port ssh: zum unterdrücken der Anzeige von SSH Paketen während der Ausführung von tcpdump bei einer remote SSH-Sitzung
Ebenfalls sind einige Kommandozeilen-Optionen sehr hilfreich, um detailliertere Informationen über die Pakete erlangen und protokollieren zu können. Für ICMPv6 Pakete sind hauptsächlich interessant:
- “-s 512”: Bei der Aufzeichnung der Pakete wird die zu Aufzeichnungslänge auf 512 bytes vergrößert
- “-vv”: wirklich sehr ausführliche Ausgabe
- “-n”: Adressen werden nicht in Namen aufgelöst. Dies ist hilfreich, wenn die Reverse-DNS-Auflösung nicht sauber arbeiten sollte
IPv6 ping zur Adresse 2001:0db8:100:f101::1 über einen lokalen Link
IPv6 ping zur Adresse 2001:0db8:100::1 über einen IPv6-in-IPv4 Tunnel geroutet
1.2.3.4. und 5.6.7.8. sind Tunnel-Endpunkte (alle Adressen sind Beispiele)
IPv6 kompatible Programme
Aktuelle Distributionen beinhalten bereits die gängigsten IPv6 kompatiblen Client- und Server-Programme. Weitere Infos gibt es unter IPv6+Linux-Status-Distribution. Falls ein Programm hier noch nicht gelistet sein sollte, können Sie unter Current Status of IPv6 Support for Networking Applications nachlesen, ob das Programm bereits auf IPv6 portiert wurde und unter Linux bereits läuft. Für verbreitete Programme gibt es einige Hinweise hier weiter unten.
IPv6 kompatible Client-Programme (Auswahl)
Um die folgend abgebildeten Tests durchzuführen, benötigen Sie ein funktionierendes IPv6 System. Bei einigen Beispielen werden Adressen angezeigt, die nur bei einer verfügbaren 6bone Verbindung erreichbar sind.
Note: wenn Namen anstatt dedizierter IPv4/IPv6 Adressen benutzt werden, dann kann dieser zu einer Liste von IPv4 und IPv6 Adressen aufgelöst werden. Einige Kommandozeilenwerkzeuge unterstützen explizite Benutzung des gewünschten Protokolls. Üblicherweis haben solche Werkzeuge Optionen wie ”-4” für IPv4 und ”-6” für IPv6.
DNS-Überprüfung der IPv6 Adress-Auflösung
Jeder DNS-Server (Domain Name System) sollte aufgrund der Sicherheitsupdates der letzten Jahre bereits mit neuerer Software bestückt sein, die den Übergangs-IPv6-Adress-Standardtyp AAAA unterstützt (der neueste Standardtyp - A6 genannt - wird nur von BIND9 und höheren Versionen unterstützt und ist daher noch nicht allzu verbreitet. Ebenfalls nicht unterstützt wird die root Domain IP6.ARPA). Ein einfacher Test zum überprüfen der IPv6 Adress-Auflösung ist:
Die Ausgabe des Tests sollte etwa wie folgt sein:
IPv6 kompatible Telnet Client-Programme
IPv6 kompatible Clients sind verfügbar. Ein einfacher Test sieht wie folgt aus:
Wird ein Text wie ”cannot resolve hostname” ausgegeben, dann unterstützt der Telnet Client keine IPv6 Adressen.
IPv6 kompatible ssh Client-Programme
4.5.3.1. openssh
Aktuelle openssh-Versionen sind IPv6 kompatibel. Abhängig von der Konfiguration vor der Kompilierung gibt es zwei unterschiedliche Verhaltensweisen:
- --without-ipv4-default: Der Client versucht zuerst eine IPv6-Verbindung. Misslingt dies, wird eine IPv4-Verbindung aufgebaut
- --with-ipv4-default: standardmäßig wird eine IPv4-Verbindung aufgebaut. Eine IPv6-Verbindung muss, wie unten im Beispiel zu sehen ist, erzwungen werden:
Falls ihr ssh Client-Programm die Option ”-6” nicht kennt, dann ist das Programm nicht IPv6 fähig. Dies ist bei den meisten ssh Paketen der Version 1 der Fall.
4.5.3.2. ssh.com
SSH.com's SSH Client und Server sind ebenfalls IPv6 kompatibel und darüber hinaus handelt es sich um freie Programme für die Linux- und FreeBSD-Plattform, unabhängig davon, ob sie zu kommerziellem oder zu persönlichen Zweck verwendet werden.
IPv6 kompatible Web-Browser
Einen aktuellen Statusüberblick zum Thema IPv6 kompatible Web-Browser ist unter Current Status of IPv6 Support for Networking Applications - HTTP verfügbar.
Die meisten Browser haben zurzeit noch ungelöste Probleme
- Ist ein IPv4 Proxy in den Einstellungen eingetragen, dann werden IPv6 Anfragen zum Proxy gesendet. Der Proxy kann keine IPv6 Anfragen verstehen und somit scheitert die Anfrage. Lösung: Proxy Software aktualisieren (siehe weiter unten).
- Automatik-Einstellungen des Proxy (*.pac) können aufgrund ihrer Beschaffenheit nicht derart erweitert werden, dass sie IPv6 Anfragen anders handhaben (z.B. kein Proxy verwenden) können (Sie sind in Javaskript geschrieben und ziemlich hard coded in den Quellen verankert; z.B. Mozilla Quellcode).
Ältere Browser-Versionen verstehen ebenfalls keine URL mit IPv6 Adressen wie z.B. http://[2a01:238:4281:8600:812a:5915:8d24:58f3]/, IPv6-Addresse von http://www.ipv6.bieringer.de/ (die angegebene URL funktioniert nur mit einem IPv6 kompatiblen Browser!).
Ein kleiner Test ist diese URL mit einem gegebenen Browser und ohne Proxy zu verwenden.
URLs zum testen
Ein guter Ausgangspunkt zum Betrachten von Webseiten mit IPv6 ist http://www.kame.net/. Ist die Schildkröte animiert, dann ist Verbindung mittels IPv6 Verbindung zustande gekommen, andererseits bleibt die Schildkröte statisch.
Andere Test-Server sind z.B.
- ip.bieringer.de
- IPv6 Test
- test-ipv6.com
IPv6 kompatible Server
In diesem Teil des HOWTOs wird stärker auf Client-spezifische Belange eingegangen. Folglich sei zu IPv6 kompatiblen Servern wie sshd, httpd, telnetd usw. auf diese Stelle verwiesen: Hints for IPv6-enabled daemons.
FAQ (IPv6 Systemcheck)
Anwendung diverser Tools
Q: ping6 zu einer link-lokalen Adresse funktioniert nicht
Fehlermeldung: "connect: Invalid argument"
Der Kernel hat keine Kenntnis darüber, welchen physikalischen oder virtuellen Link Sie zum versenden von ICMPv6 Paketen verwenden möchten. Aus diesem Grund wird die Fehlermeldung ausgegeben.
Lösung: Spezifizieren Sie den Link, z.B.: ”ping6 -I eth0 fe80::2e0:18ff:fe90:9205”. Siehe auch program ping6 usage.
Q: ping6 oder traceroute6 funktioniert nicht als normaler Benutzer
Fehlermeldung: ”icmp socket: Operation not permitted”
Diese Tools erzeugen spezielle ICMPv6 Pakete und versenden diese unter Verwendung von raw sockets im Kernel. Raw sockets können aber nur vom Benutzer ”root” verwendet werden. Normale Benutzer bekommen aus diesem Grund diese Fehlermeldung.
Lösung: Wenn wirklich alle Benutzer auf diese Tools zugreifen sollen, können Sie dies mit setzen des ”suid” bits mittels ”chmod u+s / path/to/program” erreichen (siehe auch program ping6 usage). Falls nicht alle Benutzer das Programm benötigen, können Sie die Gruppenzugehörigkeit des Programms ändern, z.B. Gruppe ”wheel”. Fügen Sie alle Benutzer zu dieser Gruppe hinzu und entfernen Sie das execution bit für andere Benutzer mittels ”chmod o-rwx /path/to/program”. Alternativ können Sie auch ”sudo” dazu verwenden, um Ihren Sicherheitsbestimmungen Rechnung zu tragen.