Ich habe einen einfachen Router konfiguriert, der IPv6-Konnektivität für Maschinen bereitstellen soll, die sich im LAN dahinter befinden. Der Router hat 2 Netzwerkschnittstellen (eth0, eth1), die Maschinen haben 1 (eth0).
Auf dem Router ist über eth0 nur der Zugriff auf das lokale Netzwerk möglich, über eth1 der Zugriff auf das Internet. Ich habe alle Kernelparameter konfiguriert, das funktioniert einwandfrei.
Die IP des Routers ist fd00::1
, ich habe DHCP auf dem Router installiert und den Bereich konfiguriert fd00::100 - fd00::fffe
.
Wenn ich eine Maschine in diesem Netzwerk starte, bekommt sie beispielsweise eine IP von DHCP zugewiesen fd00::fffa
, kann aber aus offensichtlichen Gründen nicht auf das Internet zugreifen – die Route fehlt.
Wenn ich eine Route manuell hinzufüge, sudo route -6 add 2000::/3 gw fd00::1
hat die Maschine Zugriff auf das Internet, bis ich sie neu starte.
Ich kann diese Route manuell zum Init-Skript jeder Maschine hinzufügen, ich hätte sie aber lieber automatisch konfiguriert, sodass eine Maschine in diesem Netzwerk beim Start Zugriff auf das IPv6-Internet erhält, ohne dass etwas anderes erforderlich ist.
Aufgrund einiger Vorschläge habe ich auch radvd auf dem Router installiert und diese Option eingefügt:
route 2000::/3 {};
Das ist höchstwahrscheinlich falsch, aber ich konnte weder Dokumentation noch Beispiele finden. Es funktioniert nicht. Die Verwendung von radvd anstelle von dhcpd zum Zuweisen von IPv6-Adressen funktioniert überhaupt nicht. Wenn ich dhcpd deaktiviere, konfigurieren Maschinen automatisch einige zufällige IPv6-Adressen und sehen sich nicht einmal gegenseitig, noch können sie den Router anpingen.
Wie richte ich mein LAN ein, um IPv6 für alle darin enthaltenen Maschinen automatisch zu konfigurieren?
Hinweis: Ich brauche und möchte nicht, dass jeder Computer über öffentliches IPv6 verfügt, NAT ist völlig ausreichend.
Antwort1
Mir fallen sofort zwei Probleme mit Ihrer Konfiguration auf. RFC 4193-Adressen sind nicht global routbar. Das bedeutet, dass diese Adressen nicht mit der Außenwelt kommunizieren können.
Natürlich können Sie NAT verwenden, aber NAT verursacht bekanntermaßen zahlreiche Probleme. NAT ist ein Workaround, der den Mangel an IP-Adressen vorübergehend beheben soll. IPv6 löst dieses Problem. Für alle anderen Probleme, die man mit NAT zu lösen versucht hat, gibt es eine bessere Lösung, die kein NAT beinhaltet.
Darüber hinaus wurde Ihr Präfix offensichtlich nicht gemäß der Spezifikation in RFC 4193 generiert. Relevantes Zitat:
Lokal zugewiesene globale IDs MÜSSEN mit einem pseudozufälligen Algorithmus generiert werden
Ob diese beiden Probleme in der Netzwerkkonfiguration die Kommunikation der Clients nach außen verhindern, können Sie nur durch Testen herausfinden. Es gibt Software, die versucht, eine nicht optimale IPv6-Konfiguration zu erkennen und die Verwendung von IPv6 vollständig zu vermeiden, wenn eine solche erkannt wird. Es ist durchaus plausibel, dass einige Client-Software die Verwendung der IPv6-Verbindung in Ihrem Setup verweigert.
Allerdings ist es nicht unmöglich, Clients dazu zu bringen, extern über RFC 4193-Adressen zu kommunizieren. Hier ist eine radvd.conf
Datei, die ich in der Vergangenheit kurz verwendet habe. Mit dieser Konfiguration haben einige Clients versucht, extern über ihre zugewiesenen RFC 4193-Adressen zu kommunizieren.
interface wlan0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix fdbd:5df9:dca3::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
Diese Konfiguration funktioniert jedoch nicht mit allen Clients. Ich habe sie erneut mit einem Client getestet, auf dem Android läuft. Das Telefon hat zwar eine IPv6-Adresse konfiguriert bekommen, aber es hat nicht versucht, IPv6 für die externe Kommunikation zu verwenden.
Ich habe dann das Präfix in geändert 2001:db8:dca3::/64
, woraufhin das Telefon begann, IPv6-Pakete an das Gateway zu senden. Android ist also ein Beispiel für eine Plattform, die sich weigert, RFC 4193-Adressen auf diese Weise zu verwenden.