IPv6
Inhaltsverzeichnis
IPv6
Voraussetzung für den IPv6 Betrieb unter Linux ist zunächst ein IPv6 fähiger Kernel. Bei den meisten Distributionen ist so ein Kernel standardmäßig vorhanden. Die Option
CONFIG_IPV6=m
muss in der .config gesetzt sein. Ein
modprobe ipv6
sollte nun alle Interfaces IPv6 fähig machen.
Probelauf
Für einen ersten Test ist keine weitere Konfiguration notwendig. Ein ifconfig sollte dann in etwa folgendes zeigen:
eth0 Protokoll:Ethernet Hardware Adresse 00:11:22:33:44:55 inet Adresse:192.168.0.2 Bcast:192.168.0.15 Maske:255.255.255.240 inet6 Adresse: fe80::222:33ff:fe:4455/64 Gültigkeitsbereich:Verbindung UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:127268571 errors:0 dropped:0 overruns:0 frame:0 TX packets:103505784 errors:0 dropped:0 overruns:0 carrier:0 Kollisionen:0 Sendewarteschlangenlänge:1000 RX bytes:145419939482 (135.4 GiB) TX bytes:76265616204 (71.0 GiB) Basisadresse:0xbf00 Speicher:fd8e0000-fd900000
Mit ping6 -I eth0 fe80::222:33ff:fe:4455 kann man sehen, dass IPv6 lokal funktioniert. Auf einem zweiten PC sollte das Interface ähnlich aussehen, mit ping6 -I eth0 <inet6 Addresse> sollte man auch den zweiten PC erreichen können. <inet6 Addresse> ist hier die unter inet6 angegebene Adresse des zweiten PCs.
Das lokale IPv6 Netz
Jetzt erhalten beide PCs eine sog. Site Local Address, das ist das Gegenstück zu einer IPv4 RFC-1918 Adresse, das Netz wird im Internet also nicht geroutet. Auf den beiden PCs wird das nun wie folgt konfiguriert:
ip -6 addr add fec0::1/64 dev eth0 ip -6 addr add fec0::2/64 dev eth0
Das kann man sich auch besser merken als z.B. fe80::222:33ff:fe:4455. Diesmal geht ping6 auch ohne Angabe des Interfaces.
Site local Adressen sollten jedoch für den produktiven Einsatz nicht mehr verwendet werden, nach RFC 3879 sollten diese Adressen für Neuinstallationen nicht mehr verwendet werden. Diese RFC ist allerdings nicht ganz unumstritten, so ist zumindest vorgesehen, dass alte Installation erst migriert werden sollen, wenn "es eine bessere Lösung" gibt.
Services
Man wird jetzt auch schon einige Services finden:
# lsof -i -P -n|grep IPv6 ntpd 3238 ntp 17u IPv6 5706 UDP *:123 httpd 19976 root 6u IPv6 495513 TCP [fec0::1]:80 (LISTEN) named 21071 bind 20u IPv6 510211 UDP *:53 named 21071 bind 21u IPv6 510212 TCP *:53 (LISTEN) sshd 23940 root 3u IPv6 458057 TCP *:22 (LISTEN)
Diese sollten bereits unter IPv6 erreichbar sein.
Nameserver
Ein ordentlich aufgebautes Netzwerk verfügt natürlich über einen Nameserver, der auch Reverse-DNS unterstützt. Das gilt auch für IPv6, daher vor der weiteren Konfiguration ein kleiner Ausflug zum Bind9.
Ein DNS-Eintrag für einen Host sieht so aus:
www IN AAAA fec0::1
Ein ping6 www.local (wenn der Eintrag in der Zone local steht) sollte danach ebenfalls erfolgreich sein. Reverse DNS ist da nicht so angenehm:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 3600 IN PTR www.local.
Ein dig -x fec0::1 sollte dann zu www.local führen. Der Zoneneintrag für Reverse DNS muss so aussehen:
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.ip6.arpa" { type master; file "/etc/bind/db.fec0.ip6.arpa"; };
Eine einfache Regel hilft da sicherlich: Anzahl Hex-Ziffern in der Zonendeklaration + Anzahl Hex-Ziffern im Zoneneintrag muss 32 ergeben.
Provider
Bislang gibt es nur eine Handvoll Provider, die IPv6 können: In IPv6 Providerliste kann man auch sehen, wie die Verfügbarkeit von IPv6 ist. Das lässt auch Rückschlüsse darauf zu, wie gut ein Provider sein Netz im Griff hat.
radvd
Wer die IPv6 Adressen automatisch vergeben will, kann im einfachsten Fall RadVD verwenden. Für unser kleines Testnetz sieht die Configdatei /etc/radvd.conf dann so aus:
interface eth0 { AdvSendAdvert on; prefix fec0::/64 { AdvOnLink on; }; };
Damit sollte jeder Teilnehmer in diesem Netzsegment dann automatisch eine IPv6 Adresse bekommen. Das ist eine sehr einfache Lösung, stateless kostet auch nicht viele Systemressourcen. Wer weitere Parameter, wie z.B. Nameserver übergeben will, muss DHCP verwenden, was dann auch Stateful ist.
RIPE IPv6 Adressen
RIPE Adressen können im (IPv6) Internet geroutet werden, das gilt natürlich auch für ARIN, AFRINIC etc., was aber für Europa weniger von Interesse ist. Die routing fähigen IPv6 Adressen sind aus dem Netz 2000::/3, ohne eine solche Adresse ist ein Zugang in der IPv6 Internet nicht möglich.
Konfiguration des Interfaces für Native IPv6
Wenn der Provider IPv6 am Interface bereitstellen kann, dann ist die Konfiguration so einfach, wie bei IPv4:
ip -6 addr add 2a01:7a0:1::16/126 dev eth0
Konfiguration des Interfaces für getunneltes IPv6
Die meisten Leute werden aber einen Tunnel benötigen. Wer SixXS verwendet, kann einfach das Tool Aiccu verwenden, ansonsten hier die manuelle Methode, wenn man z.B. verschiedene Hosts mit Tunneln miteinander "verdrahten" will:
ip tunnel add myip6 mode gre local 192.168.1.99 remote 172.16.23.99 ip link set myip6 up ip link set myip6 mtu 1354 ip -6 addr add 2a01:7a0:1::16/126 dev myip6
Die MTU wird gesetzt, damit der Tunnel auch mit einem DSL Anschluss funktioniert.
Default Route
Bei der Default Route gibt es keine Besonderheiten:
ip -6 route add default via 2a01:7a0:1::15 mtu 1354
Die Angabe der MTU stellt sicher, dass auch korrekt fragmentiert/defragmentiert wird.
Test
Mit
ping6 -n www.sixxs.net
kann man sehen, dass alles funktioniert. Der Test für große Pakete sieht dann so aus:
ping6 -n -s 2000 -M want www.sixxs.net
Wenn das auch klappt, dann funktioniert auch die Fragmentierung/Defragmentierung. Das ist wichtig, weil es sonst sehr merkwürdige Effekte gibt, so wird dann z.B. Google angezeigt, ein Download mit FTP klappt jedoch nicht.
Firewall
Die IPv4 Firewallregeln sind unter IPv6 unwirksam. Aus diesem Grund müssen IPv6 Regeln definiert werden. Ein guter und sicherer Startpunkt sind die folgenden Regeln, die zweckmäßigerweise in der Datei /etc/iptables/active6 abgelegt werden:
# Generated by ip6tables-save v1.3.6 on Sun Aug 26 11:22:03 2007 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -s ::1/8 -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmpv6 -j ACCEPT -A INPUT -p tcp -m tcp --dport 32768:65534 -j ACCEPT -A INPUT -j DROP -A FORWARD -j DROP COMMIT # Completed on Sun Aug 26 11:22:03 2007
Aktiviert wird das mit ip6tables-restore < /etc/iptables/active6. Damit ist abgehender IPv6 Verkehr ohne Einschränkung möglich. ICMPv6 ist offen, damit ist sichergestellt, dass auch die Signalisierung zum Router funktioniert. Wer ICMPv6 einschränken will, kann sich die verfügbaren Optionen mit ip6tables -p ipv6-icmp -h anzeigen lassen.
Privacy
Damit Ihr nicht immer an Eurer Interface Adresse wiederzuerkennen seit, sollte in der /etc/sysctl.conf
net.ipv6.conf.all.use_tempaddr = 2
gesetzt werden.
ToDo
- DHCP-Server (erst ab Version 4.0 wirklich IPv6 fähig) dhcp-4.0.0.tar.gz scheint für IPv6 noch unbrauchbar zu sein. Auch mit der Option -6 produziert der nur die Meldung subnet_number():inet.c:51: Addr/mask length mismatch. wobei die Netzangabe fec0::/64 doch eigentlich nichts Unanständiges ist...
- ripng
- OSPF6
- BGP4