Freifunk Augsburg

Blog zu Freifunk Augsburg und Mesh-Netzen im Allgemeinen

Happy IPv6 Launch Day! IPv6 für unser Mesh

Ipv6 ist ja wirklich nicht neu, der erste Standard wurde 1998 von der IETF definiert, aber die Verbreitung ist immer noch gering. Langsam werden aber die IPv4 Adressen wirklich knapp und so ist die nächsten Jahre mit zunehmender Adaption zu rechnen.

Heute ist ein besonderer Tag für IPv6, denn es ist IPv6 Launch Day. Mit dem IPv6 World Day gab es zwar 2011 schon etwas ähnliches, im Gegensatz zu 2011 werden dieses Jahr die Teilnehmer jedoch nicht nur für einen Tag IPv6 in ihren Netzen/bei ihren Diensten aktivieren sondern dauerhaft. Beim Ams-IX, einem der größten Knotenpunkte im internet, sieht man auch schon jetzt einen deutlichen Anstieg an IPv6 Verkehr. Gegen abend dürfte das sogar noch etwas mehr werden.

IPv6 Launch Day Ams-IX Traffic

 

IPv6 im Freifunk Augsburg

Ich hätte ja heute auch gern verkündet dass bei uns im Freifunk-Mesh ab heute IPv6 geht, hat aber nicht ganz geklappt. Allerdings: Die ersten Testknoten laufen schon mit IPv6 und das funktioniert auch. Einen IPv6 Gateway (mit Tunnel von Hurricane Electric) gibts auch schon. Das Ganze muss noch weiter getestet und verbessert werden, es gibt noch ein paar offene Punkte, daher wird die Firmware noch nicht offiziell im OpenWrt Freifunk Imagebuilder angeboten.

Technische Details/Probleme

IPv6 an sich ist einfach, das aber im Mesh richtig zum Laufen zu kriegen und in die Firmware zu integrieren ist  etwas komplizierter. Im Mesh können wir mehrere Gateways ins Internet haben, was ja auch einer der Vorteile an einem Mesh ist (z.B. wegen Dezentralität oder Ausfallsicherheit). Für IPv4 verwenden wir intern IP-Adressen, die nur für den internen Gebrauch bestimmt sind und natten die an den Gateways (die IPs werden auf die Gatewayadresse umgeschrieben). Bei IPv6 dagegen können wir uns dank beinahe unendlich vielen Adressen erlauben, jedem Router und sogar jedem Teilnehmer/Endgerät im Netz eine eigene, öffentlich erreichbare und im Internet geroutete IPv6-Adresse zu geben. Diese muss jedoch zum Gateway passen, über den ins Internet geroutet wird. Das heisst, Router im Mesh müssen sich automatisch rekonfigurieren wenn es zu einem Wechsel des Gateways kommt. Eine Methode, das zu bewerkstelligen haben die Berliner Freifunker, genauer die aus Prenzlauer Berg entwickelt, gennant auto-ipv6 (Link ins Freifunk Wiki, dort wird das originale auto-ipv6 und meine experimentelle Abwandlung "auto-ipv6-ib" beschrieben).

Eine noch recht offene Frage ist, wie man den Routern Netze aus dem IP-bereich des gateways zuweist ( man will Netze konfigurieren, damit der Router selbst wieder IPs an seine Clients herausgeben kann). Die übliche Netzgröße für ein Interface sollte dabei eigentlich /64 sein, damit stateless autoconfiguration (z.b. mit radvd) verwendet werden kann. Dabei werden keine IPs vom Router vergeben, sondern der Client generiert sich seine IP selbst, indem er sie von seiner Macadresse ableitet . Das ist eigentlich toll, aber mit dieser Methode werden uns die IPv6-Netze knapp, da wenn der Gateway ein /48-Netz verteilt (was die übliche Größe von Netzen ist die man über Tunnel einfach so kriegen kann) nur noch 2 Byte verwendet werden können, um das Netz des Routers zu generieren. Ein Beispiel:

Das Prefix des Routers ist: 2001:db8:1234:5

Der Router hat die Mac: 21:22:23:24:25:26

Damit erhält der Router das /64-Netz: 2001:db8:1234:XXXX:2122:23FF:EE24:25:26/64 (in der Mitte der Mac wird mit FFEE aufgefüllt), der Router selbst würde in diesem Fall 2001:db8:1234:XXXX::1/64 als eigene IP erhalten, die restlichen 2^64 Adressen können seine Clients verwenden.

Es bleibt dabei nur der Bereich XXXX für das Node übrig, die idealerweise eindeutig generiert werden müssen. Eine Verwendung der Mac fällt weg, weil deren 6 Bytes dafür zu groß sind. Möglich wäre es, dieses XXXX aus den letzen 2 Bytes der IPv4-Adresse zu generieren (wenn die IP 10.11.100.101 ist dann wäre XXXX=6465. Dabei gibt es zwei Probleme:

  • dieser Ansatz funktioniert nur wenn das IPv4-Netz des Meshes höchstens /16 groß ist
  • wie geht man mit Interfaces um, die keine IPv4 aus dem Meshbereich haben (z.B. Lan das auf fast allen Knoten 192.168.1.1 ist)?

Also: Will man /64-Netze auf dem Router für einzelne Interfaces verwenden, dann bleiben nur 2^16 (65535) /64 Teilnetze die verwendet werden können. Eine eindeutige Vergabe ist damit Meshweit kaum möglich.

auto-ipv6-ib versucht daher einen anderen Ansatz: Für einzelne Interfaces werden nur noch /112-Netze vergeben (das sind immer noch 65535 IPs). Da damit aber stateless autoconfiguration nicht mehr funktioniert muss eine andere Methode der Adresskonfiguration verwendet werden: DHCPv6. Wie bei DHCP für IPv6-Netze vergibt/verwaltet hier der Router selbst wieder die Adressen (stateful). Diesen Ansatz verfolge ich gerade für unser Mesh. Nachteil: radvd wird weiterhin benötigt, der schickt dann ra-messages (Router Advertisement), in denen das Managed-Flag gesetzt ist damit Clients die dieses ra empfangen die Konfiguration via DHCPv6 versuchen. Weiterer Nachteil: Viele Clients haben noch Probleme mit DHCPv6.

Welches Konzept man verwenden will ist eine Frage der Praktikabilität und des Geschmacks. Ich werde für uns zunächst mal weiter den auto-ipv6-ib Ansatz, also mit DHCPv6 versuchen. Imagebuilder und Meshwizard sollen dann aber auch noch erweitert werden um andere Arten der Konfiguration zu erlauben. 

Kommentare (0)

Bisher keine Kommentare vorhanden.

Neuen Kommentar schreiben