Native IPv6 bei Hetzner mit Xen. In der Praxis.
Seit einiger Zeit bietet die Hetzner AG für ihre Kunden native IPv6 an.
In der Praxis hatte ich beim einrichten einige Hürden zu nehmen. Die Architekur auf den von mir betreuten Servern verwendet Xen mit einem Bridge Setup.Alle Xen-Domains (Webserver, mySQL, Toolserver, Spielwiese,…) hängen standardmäßig erst mal an einer LAN Bridge. Die Systeme können über NAT das Internet erreichen. Manche Domains haben explizite - nicht private - IPv4 Adressen - die ohne NAT erreichbar sind. Sieht ungefähr so aus:

Für IPv6 existiert eine weitere Bridge. Ich nenne v6bridge. Bin halt ein kreativer Kopf. Das Ziel ist beziehungsweise war es das Domains die an dieser Bridge hängen mittels IPv6 Autoconfiguration automatisch v6 sprechen und aus dem Internet erreichbar sind.
Die IPv6 Netze die Hetzner zu Verfügung stellt sind /64 groß und leider leider nicht geroutet! Warum? Ich hab keine Ahnung. Vielleicht um Kosten zu sparen.
Die Dom-0
Die Einrichtung der Dom-0 ist schnell erledigt. Hier ein Beispiel für Debian:
auto eth0 iface eth0 inet static address 188.40.114.81 broadcast 188.40.114.127 netmask 255.255.255.192 gateway 188.40.114.65 # default route to access subnet up route add -net 188.40.114.64 netmask 255.255.255.192 gw 188.40.114.65 eth0 iface eth0 inet6 static address 2a01:4f8:101:123::1 netmask 128 up ip -6 route add 2a01:4f8:101:120::1 dev eth0 up ip -6 route add default via 2a01:4f8:101:120::1 down ip -6 route del 2a01:4f8:101:120::1 down ip -6 route del default
Das ist auch schon alles. Danach ist die Dom-0 über IPv6 erreichbar. Man beachte bitte die Netzmaske /128. Dies verhindert (in der Theorie) das die Dom-0 versucht über eth0 die anderen Domains zu erreichen.
Die Xen Gäste
Die Xen Gäste hängen wie bereits erwähnt alle an der Bridge “v6bridge”. Diese wiederum hat selbst auch eine IPv6 Adresse im uns zugeteilten Netz.
auto v6bridge iface v6bridge inet6 static address 2a01:4f8:101:123::2 netmask 64
Danach noch radvd in der Dom-0 installiert und konfiguriert:
interface v6bridge {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
AdvLinkMTU 1480;
prefix 2a01:4f8:101:123::/64{
AdvOnLink on;
AdvAutonomous off;
AdvRouterAddr on;
AdvPreferredLifetime 30;
AdvValidLifetime 60;
};
route ::/0
{
};
};
und fertig!
Leider nicht.
Das Problem, wie oben bereits angedeutet ist dass der Hetzner Router das /64 Netz nicht zu uns routet. Er weiss nichts von unserem Router (die Dom-0). Die Dom-Us können Pakete ins Internet senden aber erhalten keine Antworten. In dem Moment wo ein Antwortpaket aus dem Internet beim Hetzner Router aufschlägt versucht dieser mittels Neighbor Discovery herauszufinden wo sich die Ziel IP befindet. ND ist das Gegenstück zu ARP in der IPv4 Welt. Die Dom-0 fühlt sich nicht zuständig. In der IPv4 Welt gab es dafür ARP Proxy. Dieser hat pauschal alle ARP Requests und Responses entgegen genommen und auf den lokalen Interfaces ausgegeben.
In der IPv6 Welt gibt es kein ARP Proxy. Es gibt etwas ähnliches das jedoch nicht pauschal für alle IP Adressen funktioniert. Es ist nötig dies pro IP Adresse dem Kernel mitzuteilen. Nervig, aber immerhin geht es. Fündig geworden bin ich hier.
In der Praxis habe ich es so gelöst dass jetzt jede Domain eine statische v6 Adresse hat. Für diese Adressen schalte ich durch einen Eintrag in “/etc/rc.local” den Proxy ein.
ip -6 neigh add proxy 2a01:4f8:101:123::123:123:123 dev eth0
Um im Kernel die Funktion zu aktivieren benötigt man noch einen Eintrag in der /etc/sysctl.conf
net.ipv6.conf.all.proxy_ndp = 1
Im Anschluß einfach sysctl -p aufrufen. Danach sollte alles gehen.
Sollte jemanden eine Möglichkeit kennen IPv6 Proxy für alle IPs zu aktivieren wäre ich über einen Hinweis dankbar.
Update: Aus den Kommentaren.
wenn du auf den Proxy NDP Kram verzichten willst kriegst du auf Wunsch n zwotes /64. Siehe auchhttp://forum.hetzner.de/wbb2/thread.php?threadid=14963