IPv6

aus Meine Dokumentationen, der freien Wissensdatenbank

Inhaltsverzeichnis

Addressen

Localhost

Sich selber ansprechen.

::1

Localnet

Alle Hosts in der gleich Broadcast Domain ansprechen.

ff02::1

Aufspüren kann man alle Hosts in der Broadcastdomäne an Interface eth0 mit folgendem Kommando:

ping6 -I eth0 ff02::1

Das -I ist unverzichtbar, da diese Addresse an jedem Interface andere Ziele erreicht.

Auch Router lassen sich aufspüren. Alle Router sind unter der IP

ff02::2

erreichbar. Forgendes Kommando zeigt mir alle Router im Netz:

ping6 -I eth0 ff02::2

Router einrichten

Damit der Host IPv6 routet, muss man folgenden Befehl ausführen:

echo 1 > /proc/sys/net/ipv6/conf/default/forwarding

Nun muss der Host aber im Netzwerk noch als Router bekannt gemacht werden. Unter Linux gibt es für Router das Tool radvd.

aptitude install radvd

Diese Tool informiert alle im Netzt welche Netzwerke es routet. Jeder Computer im Netz nimmt sich dann aus jedem dieser Netze automatisch eine Adresse. Jeder Rechner hat also mehrere IP-Adressen. Um radvd starten zu können muss die Datei /etc/radvd.conf angelegt werden. Bei mir sieht sie wie folgt aus:

interface eth1
{
       AdvSendAdvert on;
       prefix 2001:41e0:ff0e::/64
       {
               AdvOnLink on;
               AdvAutonomous on;
       };
};

Hier werden alle Rechner am Interface eth1 darüber Informiert dass das Netz 2001:41e0:ff0e::/64 hier geroutet wird. Hat man mehrere Router und es fällt einer aus, so kann der Client selbstständig auf den anderen wechseln. Solange beide Online sind wird der Client immer den auswählen dessen Adresse am meisten übereistimmende Bits (von vorne nach hinten gelesen) hat mit dem Ziel.

IPv6 heisst nie wieder NAT

Jebbeeee!!!! Nie wieder NAT!!! FTP funktioniert ohne Connection-Tracking-Modul!

Nun gibt es aber ein paar Leute die NAT als Sicherheitsfunktion ansehen. Mal sehen, was wird jetzt also unsicherer? Kann jeder auf meinen Rechner direkt zugreifen? Nein, ich habe von Sixxs 2^80 IPs erhalten, das sind eine Quadrillion Adressen. Wer also meine ca. 10 Recher finden will muss also eine Quadrilion Pings schicken. Ein Ping Packet ist ca. 64 KB gross. => 64 Quadriliarden Bytes => 64 Biliarden Terabyte => 64 Miliarden Exabytes (Höher als Exa komme ich nicht.)

Nunja ich gebe zu das ist nicht wirkliche Sicherheit, aber das ist NAT auch nicht. Ein Problem ist nun noch, dass Hosts die meine Adresse bereits kennen, z.B. weil ich mich mit Ihnen verbunden habe, direkt verbinden können. Um dies zu verhindern, kann nun die Linux Firewall helfen. Mit folgenden Kommandos werden nur noch Verbindungen von Innen nach Aussen zugelassen.

ip6tables -P FORWARD DROP
ip6tables -I FORWARD -i $intif -o $extif -s $int_net -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
ip6tables -I FORWARD -i $extif -o $intif -d $int_net -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -I FORWARD -m state --state INVALID -j DROP

Tunnel Brocker

Leider ist die Verbreitung von IPv6 bei normalen Providern noch nicht wirklich befriedigend. Es gibt jedoch eine Lösung, sogenannte Tunnel Brocker. Sie bieten einem die Möglichkeit ihnen seinen IPv6 Traffic über IPv4 zuzusenden. Danach leiten sie den Traffic ins IPv6 Internet und senden einem die Antwort wieder via IPv4 zurück.

Ich habe mir für http://www.sixxs.net/ entschieden. Der Service ist kostenlos. Pinge ich meinen Server der native IPv6 Support hat über Sixxs, so habe ich ca. 11-12 ms Response Time. Wenn ich einen direkten IPv4 Ping mache komme ich auf 9-10ms. 2ms halte ich für vertetbar. Meine Linuxsysteme zu Hause laden ihre Updates von ftp://mirror.switch.ch/ herunter. Native IPv4 erreiche ich dabei 1.86MegaByte/s mit IPv6 1.68MegaByte/s auch das halte ich für vernünftig. Die Meisten Server können sowieso nicht so schnell liefern. Diese Daten habe ich mit dem POP chzrh01.sixxs.net erreicht.

Cool bei Sixxs ist, man bekommt, wenn man genug Credits hat ein eigene Netz. D.h. jeder PC bei mir zu Hause hat eine eigene öffentliche Addresse. Sie vergeben Netze mit 48 vorgegebenen Bits. D.h. Maximal 2^80 Computer können angeschlossen werden, sollte reichen. Aber es ist cool da man so Subneting usw selber ausprobieren kann. Ausserdem kann man auch einen eigenen DNS-Server für die Reverse-Lookup Zone angeben.

Konfiguration des Tunnels

Hat man eine Dynamische IP, so stellt einem Sixxs eine Applikation zur Verfügung. Es kann unter http://www.sixxs.net/tools/aiccu/ heruntergeladen werden und ist für fast jedes OS verfügbar. (Linux,OpenBSD,FreeBSD,Windows,MacOS X,Solaris,AIX) Auf meinem Ubuntu Computer habe ich gemerkt dass man aber einigermassen Aktuell sein sollte.

Hat man eine statische IP geht das ganze noch etwas einfacher. Auf meinem Ubuntu muss ich die Datei /etc/network/interfaces anpassen:

auto sixxs
iface sixxs inet6 v4tunnel
  address 2001:41e0:ff00:33::2
  netmask 64
  endpoint 194.1.163.40
  ttl 64
  up ip link set mtu 1280 dev sixxs
  up ip route add default via 2001:41e0:ff00:33::1 dev sixxs

Nun erstellt mein Ubuntu beim Booten eine Interface namens sixxs. Dies hat die IPv6-Addresse 2001:41e0:ff00:33::2 und schickt meinen IPv6-Traffic via IPv4 an 194.1.163.40.

Bind (DNS)

Damit der Nameserver auch über IPv6 erreichbar ist, kann man im options-Teil der Bind-Konfiguration

listen-on-v6 { any; };

einfügen. Damit bindet sich Bind an alle IPv6 Adressen und Iterfaces. In Ubuntu ist der options-Teil übrigens im File /etc/bind/named.conf.options.

Nun muss der Server aber auch noch bei Switch bekannt gemacht werden. Dazu einfach auf www.nic.ch einloggen und dem Nameserver zusätzlich noch die IPv6 Adresse angeben. Es brauchen keine neuen Nameserver hinzugefügt zu werden. Somit sind automatisch alle Domains die diesen Nameserver verwenden auch über IPv6 erreichbar.

Forward

Ein Name, z.B. zeus.heussers.ch kann sowohl einen IPv4 als auch einen IPv6 Adresse haben.

zeus                    IN      A               62.12.149.113
zeus                    IN      AAAA            2001:8a8:21:5:216:3eff:fec1:413

Wichtig ist dass bei IPv6 Addressen das A durch AAAA ersetzt wird. Für CName oder MX bleit sich alles beim alten.

Reverse

Eine IPv6 wird in seine HexZiffern zerlegt und rückwärzt aufgeschrieben. Danach wird ip6.arpa angehängt. Ich habe das Netz 2001:41e0:ff0e::/48 meine Reverse-DNS-Zone ist also:

e.0.f.f.0.e.1.4.1.0.0.2.ip6.arpa.

Das File für die Reverse Zone sieht wie folgt aus:

$TTL    64800
@                     IN   SOA   ns1.heussers.ch. dns.heussers.ch. (
                                2008041000 ; Serial
                                43200      ; Refresh 12 hour
                                7200       ; Retry 2 hour
                                1209600    ; expire 2 weeks
                                7200)      ; Minimum 2 hour
e.0.f.f.0.e.1.4.1.0.0.2.ip6.arpa. IN      NS              ns1.heussers.ch.
                                  IN      NS              ns2.heussers.ch.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN  PTR  athome.heussers.ch.

Wie man sieht wird also der PTR beibehalten für IPv6.

Apache Webserver

Apache kann auch IPv6. Wenn für in den Listen-Parameter nur ein Port angegeben ist, bindet sich Apache sogar automatisch an die IPv6 Adressen. Ich musste aber noch NamedVirtualHost für die IPv6 Adresse aktivieren.

Listen 80
Listen 443

NameVirtualHost 62.12.149.113:80
NameVirtualHost 62.12.149.113:443
NameVirtualHost [2001:8a8:21:5:216:3eff:fec1:413]:80
NameVirtualHost [2001:8a8:21:5:216:3eff:fec1:413]:443

Die eckigen Klammern sind notwendig, da es sonst nicht möglich ist zu unterscheiden was IP und was Port ist. Zusätzlich müssen auch noch die VirtualHosts an die IPv6 Adresse gebunden werden: (Natürlich auch nur dann wenn die IP angegeben wurde.)

<VirtualHost 62.12.149.113:80  [2001:8a8:21:5:216:3eff:fec1:413]:80>

Postfix

Postfix muss mithilfe der inet_protocols Anweisung gesagt werden dass auch IPv6 spannend ist. Die Konfiguration wird in /etc/postfix/main.cf gemacht.

inet_interfaces = all
inet_protocols = ipv4, ipv6

wget

Die IP-Version die wget verwenden soll kann per Parameter mitgegeben werden.

wget -6 ftp://mirror.switch.ch/ls-lR.gz
wget -4 ftp://mirror.switch.ch/ls-lR.gz

Aber was wget defaultmässig wählt muss speziell im Config-File konfiguriert werden. In Ubuntu ist der Standard IPv4. Im File /etc/wgetrc kann dies durch folgende Zeige geändert werden:

prefer_family = IPv6

Damit versucht Ubuntu auch automatisch das Update via IPv6 zu machen, da aptitude dafür auf wget zurückgreift.

Squid (Proxy)

Squid ist etwas mühsam. Die IPv6-Unterstützung ist erst seit kurzer Zeit fest in den Code eingebaut. Ich habe die aktuelle Version aus dem Respository geholt. Mit

./configure --enable-ipv6

funktioniert es aber dann ganz gut.

OpenSSH

It just works.

Wer festlegen will ob IPv4 oder IPv6 verwendet werden soll:

ssh -4 zeus.heussers.ch
ssh -6 zeus.heussers.ch

Weiterführende Lektüren

http://mirrors.bieringer.de/Linux+IPv6-HOWTO-de/

'Persönliche Werkzeuge