IPv6-Adressierung, dynamischer lokaler Teil des dynamischen Präfixes

10

Der Router in meinem Netzwerk verteilt ein von meinem ISP zugewiesenes IPv6-Präfix. Dieses Präfix ist dynamisch, aber "ziemlich klebrig".

Ich möchte, dass meine Computer das in den RAs angekündigte Präfix automatisch abrufen, es jedoch mit einem benutzerdefinierten lokalen Teil kombinieren, anstatt eines zufällig oder basierend auf der MAC-Adresse zu generieren. Gibt es eine einfache Möglichkeit, das zu tun?

Plugwash
quelle
1
Ich habe keine Betriebssysteme gesehen, mit denen Sie dies tun können :(
Sander Steffann
@SanderSteffann Noch nie Linux benutzt?
Michael Hampton
1
@ Michael Ich habe noch nie ein Betriebssystem gesehen, mit dem Sie IID-Token konfigurieren können. Technisch kann der Kernel das, aber kein Betriebssystem (wie in der Distribution) unterstützt es :(
Sander Steffann

Antworten:

11

Es gibt zwei Möglichkeiten, dies zu tun. Einer ist der einfache Weg und einer ist der harte Weg.

Die einfache Möglichkeit besteht darin, einen DHCPv6-Server in Ihrem Netzwerk auszuführen und jedem Gerät selbst Hostadressen zuzuweisen. Oder lassen Sie den Server den Host-Teil auswählen. Die DHCPv6-Server, die ich gesehen habe, behalten denselben Host-Teil bei, auch wenn sich das Präfix ändert.

Der schwierige Weg besteht darin ip token, tokenisierte Schnittstellenkennungen festzulegen. Dies wird beschrieben als:

Die Unterstützung der IPv6-Token-Schnittstellenkennung wird zum Zuweisen bekannter Hostteiladressen zu Knoten verwendet, während weiterhin ein globales Netzwerkpräfix aus Routerankündigungen abgerufen wird. Das Hauptziel für Token-IDs sind Serverplattformen, auf denen Adressen normalerweise manuell konfiguriert werden, anstatt DHCPv6 oder SLAAC zu verwenden. Durch die Verwendung von Token-IDs können Hosts ihr Netzwerkpräfix mithilfe von SLAAC weiterhin bestimmen, können jedoch bei einer Änderung ihres Netzwerkpräfixes leichter automatisch neu nummeriert werden. Tokenisierte IPv6-Kennungen werden im Entwurf beschrieben: <Draft-chown-6man-tokenised-ipv6-identifiers-02>.

Der Grund dafür ist, dass Linux zwar diese Funktionalität enthält, aber keine mir bekannte Linux-Distribution Unterstützung dafür bietet, eine solche Konfiguration dauerhaft zu machen und sie beim Booten anzuwenden, wie dies bei manuellen oder DHCP-konfigurierten Adressen der Fall ist. Es wird also wahrscheinlich nicht sehr gut für Sie funktionieren, bis eine Verteilung dies tut. Beachten Sie, dass es jetzt möglich ist, IPv6-Token in NetworkManager und systemd-networkd zu konfigurieren. Neuere Antworten enthalten spezifische Konfigurationsanweisungen.


Wenn Ihr ISP gelegentlich Ihr Präfix ändert, sollten Sie die Verwendung eindeutiger lokaler Adressen in Ihrem Netzwerk in Betracht ziehen. Auf diese Weise haben alle Ihre Geräte immer eine Adresse, die sich nie ändert und mit der sie miteinander kommunizieren können. Einige IPv6-unterstützende Heim- / SOHO-Router (wie OpenWrt) bieten die Option, ULA im gesamten Heimnetzwerk zu aktivieren. Wenn sich zu Hause mehrere Router befinden, sollte dies auf dem Router aktiviert sein, der eine Verbindung zum ISP herstellt.

Michael Hampton
quelle
Das Problem, das die Frage tatsächlich ausgelöst hat, war, dass mein ISP-Router RAs mit kurzer Lebensdauer sendet. Dies verursacht große Probleme mit Datenschutzadressen. OTOH Ich mag die Idee nicht, meine MAC-Adresse der Welt preiszugeben.
Plugwash
Ein statischer lokaler Teil vermeidet die Probleme mit Datenschutzadressen, ohne meine MAC-Adresse preiszugeben, danke.
Plugwash
Kennen Sie eine Möglichkeit, einer einzelnen Schnittstelle mehrere Token hinzuzufügen, um mehrere "dynamische statische" IPv6-Adressen
festzulegen
@wedi Linux unterstützt nur ein Token pro Schnittstelle. IPv6-Token sind wahrscheinlich nicht die Lösung für Ihr Problem, was auch immer es ist.
Michael Hampton
6

Michael hat eine sehr gute Zusammenfassung gemacht und Plugwashs jüngster Tipp war der beste, den ich finden konnte, nachdem ich mehrere Stunden nach einer CentOS 7 / RHEL-Lösung (auch systemd und network manager) gesucht hatte. Nachdem ich mich an nmcli gewöhnt hatte (ich benutzte hauptsächlich noch ifcfg und ip), konnte ich es erfolgreich anwenden.

Laut https://developer.gnome.org/NetworkManager/stable/settings-ipv6.html NetworkManager unterstützt IPv6-Token-Schnittstellen-IDs jedoch direkt als Eigenschaft (ab Version 1.4 August 2016 http://news.softpedia.com/). news / networkmanager-1-4-fügt-Unterstützung-für-das-Einstellen von ipv6-tokenized-interface-identifiers-507601.shtml hinzu ).

Sie müssen also die IPv6-Einstellungen des Netzwerkmanagers nicht zum Ignorieren festlegen, sondern sollten die Einstellungen auf festlegen

nmcli connection modify eth0 ipv6.method "auto" # if not already
nmcli connection modify eth0 ipv6.addr-gen-mode "eui64" # use interface token
nmcli connection modify eth0 ipv6.token "::2"

Das wird IPV6_TOKEN=::2in / etc / sysconfig / network-scripts / ifcfg-eth0 schreiben, um einen Neustart zu überleben. Um dies sofort anzuwenden, starten Sie die Schnittstelle neu

nmcli connection up id eth0  # restart
Jürgen
quelle
3

Vielen Dank an Michael für die Bestätigung, dass Linux die Funktion unterstützt, und für den Hinweis auf den Befehl auf niedriger Ebene. Diese Antwort beschreibt, wie es in der Praxis auf einem Debian-Stretch-Desktop (mit systemd und network-manager) funktioniert.

Bearbeiten Sie zuerst die Verbindung im Netzwerkmanager und stellen Sie die IPv6-Einstellungen so ein, dass sie ignoriert werden.

Erstellen Sie nun eine Datei /etc/NetworkManager/dispatcher.d/pre-up.d/iptoken. Die Datei sollte im Besitz von root, Berechtigungen 755 und mit dem folgenden Inhalt sein.

#!/bin/sh
ip token set ::2 dev eth0

Ersetzen Sie eth0 durch das gewünschte Gerät und :: 2 durch das gewünschte Suffix.

Plugwash
quelle
2

Unter Linux können Sie verwenden systemd-network.

Erstellen Sie einfach eine .networkDatei unter /etc/systemd/network/somename.network:

[Match]
Name=e*

[Network]
DHCP=yes
IPv6Token=::1

Anstatt e*alle Schnittstellen ab zu vergleichen e, können Sie den vollständigen Schnittstellennamen eingeben. Dies aktiviert DHCP {v4, v6} und wird ::1als Suffix verwendet. Sie können eine beliebige IPv6-Adresse auswählen, die ersten 64 Bit müssen jedoch auf Null gesetzt werden.

Danach aktivieren und starten Sie die systemd-networkd.service.

Inrin
quelle