Barungar
Well-known member
Hallo.
Vielleicht verwendet der ein oder andere von Euch in seinem lokalen Netzwerk IPv6-ULAs, weil seine GUA-Präfix nicht stabil ist. Und vielleicht hat sich der ein oder andere dann auch schon einmal gewundert, dass wenn er den Hostnamen eines lokalen Hosts eingibt doch eine IPv4-Verbindung aufgebaut wird, wenn das DNS die private IPv4 und die IPv6-ULA zurückgeliefert hat.
Beispiel: Für unseren Host hostA.local liefert unser DNS als Antwort 192.168.1.100 und fd00::1:100 zurück. Also eine IPv4 und eine (ULA-)IPv6... Ruft man nun ein ping hostA.local auf, so erfolgt der Ping kurioser Weise auf die IPv4 (192.168.1.100) und nicht auf die IPv6. Erst ein ping -6 hostA.local bringt einen Ping auf die ULA-IPv6 Adresse.
Warum ist das so? Es heißt doch immer IPv6 wird gegenüber IPv4 bevorzugt?!
Das stimmt auch grundsätzlich, doch Microsoft Windows macht da eine kleine, aber entscheidende, Ausnahme... IPv6-ULA werden von Windows in der Standard-Konfiguration niedriger priorisiert als IPv4-Adressen. Die meisten Linuxe reagieren hier anders (und in meinen Augen besser); so priorisiert Ubuntu z.B. grundsätzlich IPv6 (GUA, LLA & ULA) höher als IPv4.
Wie man an der internen IP-Stack Vorrangliste der beiden Systeme erkennt, unterscheidet das Linux nicht explizit zwischen ULA, LLA und GUA (mit Ausnahme des Prefix 2002::/16 - das aber immer höher als IPv4 gewichtet wird). Windows hingegen macht da diverse "Ausnahmen" für Teredo (2001::/32), für ULA (fc00::/7) , site local unicast (fec0::/10) und 6bone (3ffe::/16)! Alle diese "Ausnahmen" werder vom Vorrang hinter IPv4 eingruppiert.
Wie bereits oben im Beispiel mit dem ping hostA.local gezeigt, würde ein Windows-Rechner, wenn ihm das DNS eine ULA-IPv6 und eine IPv4 anbietet stets die IPv4 wählen, ein Ubuntu würde sich für die ULA-IPv6 entscheiden.
Kann man das ändern? Ja!
Wenn Ihr wollt, dass Euer Windows grundsätzlich IPv6 bevorzugt - so wie z.B. Ubuntu und andere Linuxe, dann braucht es nur eine kleine Anpassung in der Vorrangtabelle des IP-Stacks.
Alles was man tun muss, ist eine PowerShell oder eine CMD mit Administratorrechten öffnen und den folgenden Befehl absetzen.
Bei Erfolg lautet die Antwort von Windows: OK.
Was macht der Befehl?
netsh ist die Network Shell von Windows, hiermit kann man konfigurierend tiefer in den Netzwerk-Stack von Windows eingreifens als es die Systemsteuerungs- und Einstellungs-Menüs erlauben.
Mit int ipv6 wählt Ihr das allgemeine IPv6 Interface aus. Der Teil set prefix führt eine neue Festsetzung der Prefixpolicy aus. Die Werte ::ffff:0:0/96 2 4 sagen schließlich, dass den IPv4-Adressen ein Vorrang (precedence) von 2 im Label 4 zugewiesen wird.
Ohne einen Reboot Eures PCs, werdet ihr unmittelbar nach dem OK. feststellen, dass wenn ihr ping hostA.local eingebt auch Euer Windows nun die ULA-IPv6 anpingen wird.
Ihr könnte gerne sofort zum Testen mit dem Befehl (siehe unten) den Urzustand reaktivieren und der ping hostA.local wird sofort wieder auf die IPv4 ausgeführt werden.
Falls ihr doch einmal "zurück" wollt, der Befehl:
stellt den Urzustand umgehend wiederher.
Vielleicht verwendet der ein oder andere von Euch in seinem lokalen Netzwerk IPv6-ULAs, weil seine GUA-Präfix nicht stabil ist. Und vielleicht hat sich der ein oder andere dann auch schon einmal gewundert, dass wenn er den Hostnamen eines lokalen Hosts eingibt doch eine IPv4-Verbindung aufgebaut wird, wenn das DNS die private IPv4 und die IPv6-ULA zurückgeliefert hat.
Beispiel: Für unseren Host hostA.local liefert unser DNS als Antwort 192.168.1.100 und fd00::1:100 zurück. Also eine IPv4 und eine (ULA-)IPv6... Ruft man nun ein ping hostA.local auf, so erfolgt der Ping kurioser Weise auf die IPv4 (192.168.1.100) und nicht auf die IPv6. Erst ein ping -6 hostA.local bringt einen Ping auf die ULA-IPv6 Adresse.
Warum ist das so? Es heißt doch immer IPv6 wird gegenüber IPv4 bevorzugt?!
Das stimmt auch grundsätzlich, doch Microsoft Windows macht da eine kleine, aber entscheidende, Ausnahme... IPv6-ULA werden von Windows in der Standard-Konfiguration niedriger priorisiert als IPv4-Adressen. Die meisten Linuxe reagieren hier anders (und in meinen Augen besser); so priorisiert Ubuntu z.B. grundsätzlich IPv6 (GUA, LLA & ULA) höher als IPv4.
IP-Präferenz von Windows 11 - 23H1 | IP-Präferenz von Ubuntu 22.04.2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Wie man an der internen IP-Stack Vorrangliste der beiden Systeme erkennt, unterscheidet das Linux nicht explizit zwischen ULA, LLA und GUA (mit Ausnahme des Prefix 2002::/16 - das aber immer höher als IPv4 gewichtet wird). Windows hingegen macht da diverse "Ausnahmen" für Teredo (2001::/32), für ULA (fc00::/7) , site local unicast (fec0::/10) und 6bone (3ffe::/16)! Alle diese "Ausnahmen" werder vom Vorrang hinter IPv4 eingruppiert.
Wie bereits oben im Beispiel mit dem ping hostA.local gezeigt, würde ein Windows-Rechner, wenn ihm das DNS eine ULA-IPv6 und eine IPv4 anbietet stets die IPv4 wählen, ein Ubuntu würde sich für die ULA-IPv6 entscheiden.
Kann man das ändern? Ja!
Wenn Ihr wollt, dass Euer Windows grundsätzlich IPv6 bevorzugt - so wie z.B. Ubuntu und andere Linuxe, dann braucht es nur eine kleine Anpassung in der Vorrangtabelle des IP-Stacks.
Alles was man tun muss, ist eine PowerShell oder eine CMD mit Administratorrechten öffnen und den folgenden Befehl absetzen.
Code:
netsh int ipv6 set prefix ::ffff:0:0/96 2 4
Was macht der Befehl?
netsh ist die Network Shell von Windows, hiermit kann man konfigurierend tiefer in den Netzwerk-Stack von Windows eingreifens als es die Systemsteuerungs- und Einstellungs-Menüs erlauben.
Mit int ipv6 wählt Ihr das allgemeine IPv6 Interface aus. Der Teil set prefix führt eine neue Festsetzung der Prefixpolicy aus. Die Werte ::ffff:0:0/96 2 4 sagen schließlich, dass den IPv4-Adressen ein Vorrang (precedence) von 2 im Label 4 zugewiesen wird.
Ohne einen Reboot Eures PCs, werdet ihr unmittelbar nach dem OK. feststellen, dass wenn ihr ping hostA.local eingebt auch Euer Windows nun die ULA-IPv6 anpingen wird.
Ihr könnte gerne sofort zum Testen mit dem Befehl (siehe unten) den Urzustand reaktivieren und der ping hostA.local wird sofort wieder auf die IPv4 ausgeführt werden.
Falls ihr doch einmal "zurück" wollt, der Befehl:
Code:
netsh int ipv6 set prefix ::ffff:0:0/96 35 4
Zuletzt bearbeitet: