IPv6-Einführung
IPv6 hat fast jeder schon mal irgendwie gehört, vielleicht auch schon einen Artikel darüber gelesen und kopfschüttelnd gedacht, wie kompliziert diese Adressiererei gegenüber v4 doch anmutet.
IPv6 und IPX
Mir persönlich hat es sehr geholfen, nicht IPv4 und v6 gegenüberzustellen, sondern IPX, Novells Internet Packet Exchange Protokoll aus der guten, alten Netware-Zeit. IPX war einfach und handhabbar:
- Automatische Adreßvergabe der Clients (Hardwareadresse der Ethernetkarte),
- Mehrere Stränge wurden durch eine Net-ID unterscheidbar gemacht,
- Gateways zu anderen Strängen wurden automatisch gefunden.
IPX hatte allerdings nicht nur Vorteile. Der größte Nachteil war wohl die Möglichkeit, auf Ethernet-Ebene den Frametypen wählbar zu machen (und je nach Netware-Version einen anderen Defaultwert zu benutzen). Weiterhin kannte IPX Namensauflösungen nur für Server, aber nicht für Clients. Die Station-ID entsprach der Ethernet-Hardwareadresse und war dementsprechend kryptisch zu merken. Wer kann sich schon z. B. 00:00:C0:28:67:68
als Hostnamen merken?
IPv6 vereinigt nun einige Konzepte von IPX und IPv4 und führt auch einige neue ein:
- Automatische Adreßvergabe für Hosts (standardmäßig wird die 48-Bit Ethernet Adresse auf 64 Bit aufgeblasen), dies ist aber kein Muß und für Server sogar eher kontraproduktiv. Nach dem Austauschen einer defekten Netzwerkkarte denken nur wenige Leute daran, den DNS anzupassen.
- Die gesamte Adreßlänge beträgt jetzt 128 Bit statt 32 bei IPv4. Üblicherweise wurden in LANs IPv4 Adressen mit einer Netzmaske von 24 Bit (255.255.255.0, also 3x8 Bit) verwendet. Durch die automatische Adreßvergabe ist die Anzahl der gesetzten Maskenbits von IPv6 Adressen in aller Regel nie größer als 64 Bit, kann wohl aber kleiner werden (sprich einen größeren Netzbereich abdecken)!
- Über ICMP werden Router im lokalen Strang automatisch gefunden und in die Konfiguration eingebunden.
- Die Schreibweise wurde geändert. Bei IPv4 wurde die gesamte Adresse in 4x8 Bit numerischer Schreibweise (0-255 pro Byte), durch Punkte getrennt dargestellt. IPv6 Adressen erscheinen als Words (16-Bit Werte) in Hexadezimalschreibweise, die durch Doppelpunkte getrennt werden. Dabei können führende Nullen pro Word weggelassen und auch aufeinanderfolgende Words, die nur 0 sind einmalig zu :: zusammengefaßt werden. Dies in einer Adresse mehrfach zu tun, ist allerdings nicht erlaubt (also nur bei den ersten Nullfolgen zulässig. Beispiel:
fe80:0000:0000:0000:020d:93ff:fe3b:41e8
wird zufe80::20d:93ff:fe3b:41e8
. Die Übersicht steigt um einiges, wenn man sich stets vor Augen hält, daß normalerweise exakt in der Mitte der ausgeschriebenen Adresse die Trennung zwischen Netz- und Hostadresse liegt (/64 Netzmaske).
In Kürze bedeuten die letzten Punkte:
- Um die Hostadressen braucht man sich nicht kümmern, da automatisch vergeben.
- Die Netzwerknummern (Präfix in der IPv6 Terminlologie) sind üblicherweise 64-Bit groß (64-Bit Hostadresse und 64-Bit Präfix, letzteres von einem sauber konfigurierten Router im LAN vorgegeben).
- Defaultgateways brauchen nicht konfiguriert werden, werden mittels Router Announcement bekannt gemacht.
- Man muß sich an eine neue Schreibweise gewöhnen.
Eine ganz wichtige Abkehr von den IPv4 Konzepten ist daß es erlaubt ist, auf einem Strang mehrere Netze (präfixe) parallel konfiguriert sein dürfen. Es ist nicht nur erlaubt, sondern wird genau genommen auch schon IPv6-intern fleißig benutzt. Bei IPv4 waren Multicastadressen im 224er Bereich die einzige Ausnahme, während Multicastkonzepte bei v6 so sorgfältig implementiert wurden, daß es gar keine Broadcastadressen mehr gibt. Genauere Informationen finden sich in der Fachliteratur.
Ohne einen Router im lokalen Strang, der das dort gültige Präfix bekannt macht, benutzen alle Hosts standardmäßig fe80::/64
mit ihrer angehängten, aufgepumpten Ethernetadresse zur Kommunikation. Dieses wird nicht geroutet und auch bei mehreren Strängen pro Host immer benutzt. Mit dieser Adresse sucht der Host Strang für Strang nach Routern und Diensten und bekommt damit dann letztendlich, sofern ein konfigurierter Router oder ähnliches Gerät vorhanden ist, ein offizielles, routbares Präfix. Es ist aber auch ohne vergebenes Präfix problemlos möglich, IPv6 Dienste schon über diese Adressen zu nutzen.
Ein Präfix ist also nichts anderes als eine von einem Router vorgegebene Netzadresse mit entsprechender Netzmaske, welche die Hosts im Strang automatisch übernehmen, um aus dem vom Router vorgegebenen Netzpart und der Host-lokalen, aufgepumpten MAC eine gültige IPv6-Adresse zusammen zu setzen.
Wer Interesse hat, bei IPv6 ganz vorne dabei zu sein und auch echte Dienste nutzen zu können, der hat bei Sixxs die Möglichkeit, sich sein individuelles Präfix mit 48-Bit Netzmaske zu sich tunneln zu lassen. Ein Nebeneinander von IPv6 und IPv4 ist problemlos möglich, in den meisten Fällen bemerkt man bei sauberer Konfiguration von Router und DNS nicht, wann man jetzt v4 und wann v6 benutzt.
DNS
DNS ist eine eigene Sache, wenn auch nicht weiter schwer.
In den Vorwärtszonen wird der Recordtyp AAAA statt A benutzt (weil die Adressen ja auch viermal so groß sind wie vormals):
ibook IN A 192.168.59.4 IN AAAA 2001:6f8:1296:1:20d:93ff:fe3b:41e8
Die Rückwärtsauflösung ist etwas komplexer. Statt in-addr.arpa wird als Pseudodomain ip6.arpa verwendet. Die Notation der Adressen ist wesentlich unübersichtlicher als bei IPv4. Daß die komplette Adresse umgedreht wird, ist aus den Hierarchieprinzipien des DNS noch ersichtlich, zusätzlich werden die einzelnen Adreßkomponenten nibbleweise auseinanderklabüsert und mit Punkten getrennt aufnotiert:
$ORIGIN 1.0.0.0.6.9.2.1.8.f.6.0.1.0.0.2.ip6.arpa. 8.e.1.4.b.3.e.f.f.f.3.9.d.0.2.0 IN PTR ibook.pocnet.net.
Hier hilft es sehr, die $ORIGIN-Gruppierungsfunktion des DNS zu verwenden. Im Beispiel ist die Adresse auf 64-Bit Grenze geteilt worden. So steht im RR für den PTR wirklich nur die Hostadresse und das Präfix wird im $ORIGIN festgelegt.
Mit dem Programm ipv6calc aus dem gleichnamigen Debian-Paket lassen sich verschiedene Notationen von IPv6-Adressen ineinander umrechnen.
Programme
Serverprogramme können entweder von sich aus einen IPv6 Socket öffnen (Apache2, Dovecot, Openbsd-Sshd, usw.), oder über den inetd IPv6 fähig gemacht werden. Damit werden dann auch so antike Dienste wie UUCP IPv6-fähig. Hier empfiehlt sich der Einsatz von openbsd-inetd; Die Konfigurationsdatei vom herkömmlichen inetd läßt sich weiter verwenden und kann durch tcp6 bzw. udp6 im Protokollfeld auf IPv6 erweitert werden.
Gewöhnungsbedürftig ist die Tatsache, daß IPv6-Sockets auch IP4-Verbindungen handhaben können. So taucht im netstat -l |fgrep http
nur ein tcp6-Socket auf, obwohl auch Verbindungen über IPv4 angenommen werden:
tcp6 0 0 *:https *:* LISTEN
IPv6 und Cisco
Alle IOS Images für Router ab Version 12.3 und IP-Plus-Featureset unterstützen IPv6.
Beispiel für einen einfachen Uplink zu Sixxs (IPv6-Tunnelbroker):
ipv6 unicast-routing ipv6 cef ! interface Tunnel0 no ip address ipv6 address 2001:6F8:900:5B0::2/64 ipv6 enable tunnel source Dialer1 tunnel destination 212.224.0.188 tunnel mode ipv6ip ! interface Vlan1 description LAN 100M ipv6 address 2001:6F8:1296::1/64 ipv6 enable ipv6 nd prefix 2001:6F8:1296::/64 ! ipv6 route 2001:6F8:1296::/48 Null0 ipv6 route 2000::/3 2001:6F8:900:5B0::1 ipv6 route 2000::/3 Null0 254 ! ipv6 access-list terminal permit ipv6 2001:6F8:1296::/48 any ! line vty 0 4 ipv6 access-class terminal in
- Tunnel0: Source und Destination müssen natürlich angepasst werden. Die Adresse wird von Sixxs vorgegeben.
- Die Konfiguration im Vlan ist abhängig vom Subnet, was bei Sixxs beantragt wurde.
- Routingeinträge:
- Verhindert Routingloops, weil man kaum sein komplettes /48 versubnettet haben wird,
- Normale Defaultroute über die Tunnel-Gegenseite,
- Routet alle Pakete nach /dev/null, falls der Tunnel mal ausgefallen ist.
- Die ACL terminal verhindert, dass jeder Hinz und Kunz per telnet/ssh auf den Router kommt.
Soweit zu meinen Erfahrungen mit IPv6. Im Internet findet man mit etwas Geduld und Google noch viele weitere Ressourcen zum Thema.