Bei IPv6 ist Network-Adress-Translation (NAT) nicht vorgesehen. Vielmehr ist es unter anderem Zweck von IPv6, NAT überflüssig zu machen. Das bedeutet umgekehrt, dass jeder Rechner grundsätzlich eine öffentlich erreichbare IPv6 hat (die allerdings von der Firewall in der FritzBox geschützt bzw. geblockt wird). Es bedeutet außerdem, dass standardmäßig die lokalen IPv6 sich ändern, wenn sich die öffentliche IPv6 ändern.
Also: Wenn man kein festes IPv6-Subnetz hat (und vielleicht aus Anonymitätsgründen auch nicht haben will), dann ändern sich standardmäßig die IPv6-Adressen aller Rechner im lokalen Netzwerk immer, wenn der Router ein neues IPv6-Subnetz bekommt. Bekommt der Router per 6to4-Tunnel sein IPv6-Subnetz, dann ändert sich die IPv6-IP jedes Mal, wenn der Router eine neue IPv4 bekommt.
Im lokalen Netzwerk kann es aber sinnvoll sein, immer das gleiche Subnetz zu verwenden. Ein lokaler Server kann dann in einer Weise konfiguriert werden, dass er nur Verbindungen aus diesem Subnetz annimmt. Bei dem Webserver apache geht das zum Beispiel mit den folgenden Befehlen („abab:abab:abab“ durch das selbst gewählte Präfix ersetzen, siehe folgenden Absatz):
deny from all
allow from fd00:abab:abab:abab:/64 192.168.178.0/24
Um lokal ein festes IPv6-Präfix zu haben bietet die FritzBox die Möglichkeit, zusätzlich zur öffentlichen IPv6 die angeschlossenen Rechner mit einem IPv6-Subnetz zu versorgen, das immer gleich ist und nicht ins Internet geroutet wird. Dazu muss auf der Web-Oberfläche der Fritzbox unter „/Internet/Zugangsdaten/IPv6“ im Abschnitt „Unique Local Addresses“ die Option „Unique Local Addresses (ULA) immer zuweisen“ wählen, dann erhalten alle ipv6 Rechner immer eine FD00:z:MAC-Adresse.
Dieses Subnetz dient dann als IPv6-Ersatz für die unter IPv4 privaten IPv4s 192.168.x.y. Das Subnetz beginnt immer mit „FD00“, alle solche Adressen sind für private Netzwerke, die nicht im Internet geroutet werden, reserviert. Man sollte in den darauf folgenden Stellen irgendwelche Ziffern (0-9 und A-F) eingeben – und zwar bei jeder Fritzbox andere. Dass man bei jeder Fritzbox andere eingeben sollte, hat folgenden Grund: Wenn man in dem fremden zu Gast ist, dann kann man sich über VPN mit dem heimischen Netz verbinden, ohne dass es Probleme gibt, weil die lokalen IPs im Gast- und Heimnetz nicht identisch sind.
Wenn diese Option aktiviert ist und die FritzBox ein öffentliches IPv6-Subnetz erhalten hat, dann teilt sie den angeschlossenen Rechnern beide Präfixe mit. Sie erhalten damit zwei IPv6-Adressen:
FD00-Adressen, die gerade eingerichtet wurden, und
2001-Adressen aus dem 6to4-Tunnel.
Jetzt haben wir 2 Probleme:
- Wenn nun zwei lokale Rechner miteinander sprechen wollen, können sie das über die 2100- oder FD00-Adressen miteinander tun. Welche sie dabei verwenden, ist nicht definiert. Wir wollen aber, dass sie intern immer die interne FD00-Adressen verwenden, denn sonst würde ein lokaler Server, der seinen Service nur für FD00-Adressen anbietet, nicht antworten.
- Aus Sicht der Computer sind die 2100- und FD00-Adressen gleich: Sie wissen nicht, dass die FD00-Adressen im Internet nicht geroutet werden. Deswegen verwenden die Rechner sie gleichwertig und man kann nicht sicher sein, dass für den Internetverkehr immer die 2100-Adresse verwendet wird. Mit der FD00-Adresse funktioniert aber das Routing im Internet nicht.
Zur Lösung dieser Probleme ist bei IPv6 ein Mechanismus (Address Selection, unter windows „prefix policy“ genannt) vorgesehen, wie man die Verwendung von bestimmten Quell- und Ziel-IPs beeinflussen kann. In diesem Fall muss der Adress-selection Tabelle ein Eintrag hinzugefügt werden. Leider kann man in Windows XP und nicht einfach einen Eintrag hinzufügen; ein neuer Eintrag löscht alle vorhandenen. Deswegen muss man alle vorhandenen Einträge neu setzen und anschließend den neuen hinzufügen (bei Windows 7 kann man einfach hinzufügen, ohne die vorhandenen neu setzen zu müssen):
# In Windows XP
# Windows-Taste + R drücken, "cmd" tippen und die Enter-Taste drücken.
# In Windows 7
# Windows-Taste drückem, "cmd" tippen und mit der rechten
# Maustaste auf "cmd" Klicken und "Als Administrator ausführen"
# anklicken.
# Danach folgendes eingeben und jede Zeile mit der Enter-Taste abschließen.
netsh
interface
ipv6
# nur in Windows XP
# Wiederherstellen der Standard-Einstellungen
# (mit "show pref" kann man sich die aktuellen Einstellungen
# anzeigen lassen)
# Priorität Label
add pref 2001::/32 5 5
add pref ::ffff:0:0/96 10 4
add pref ::/96 20 3
add pref 2002::/16 30 2
add pref ::/0 40 1
add pref ::1/128 50 0
# Benötigte Änderung durchführen
# im lokalen Netz die lokalen Ipv6 verwenden
add pref fc00::/7 60 10
# Eigentlich sollte diese Zeile auch in Windows 7 funktionieren.
# In Windows 7 scheint aber ein Fehler zu sein: das "/7" klappt
# nicht richtig. Deswegen muss in Window 7 folgender Befehl
# eingegeben werden (der nicht ganz Standarkonform ist):
add pref fd00::/8 60 10
# Danach Änderungen speichern
commit
# Und das Konfigurationsprogramm verlassen
exit
In Ubuntu und in Redhat ist diese Regel bereits standardmäßig gesetzt (siehe /etc/gai.conf in Linux), so dass auf diesen Platformen obige Anpassung nicht mehr manuell gemacht zu werden braucht (Achtung: bei anderen Linux-Distributionen kann das anders sein).
Eine genaue Erklärung dieser Tabelle folgt in Teil 3 des IPv6 Kurses.
Einige Anmerkungen zu Windows 7:
In Windows 7 scheinen Änderungen an der Prefixpolicy erst nach einem Reboot wirksam zu werden. Leider zeigt Windows 7 die Prefixpolicy nach einem Reboot außerdem anders an: wenn man per „add“ einen Eintrag hinzugefügt hat, dann erscheint er zunächst einfach zusätzlich zu den Standardeinträgen. Nach einem Reboot sind aber plötzlich alle Standardeinträge weg. Deswegen muss man in Windows 7 die Standardeinträge per „SET“ statt „ADD“ noch mal setzen, dann bleiben sie auch nach dem reboot erhalten.
Danke, bin nämlich gerade auf dieses Problem gestossen, das ich hier beschrieben habe:
http://www.ip-phone-forum.de/showthread.php?t=249307&p=1837066
Der Tipp mit Prefix Policy bzw. /etc/gai.conf waren genau die Pointers die ich brauchte!
Danke! 🙂