Warum nutzt mein Windows die ULA nicht im lokalen Netz?

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.

IP-Präferenz von Windows 11 - 23H1IP-Präferenz von Ubuntu 22.04.2
precedencelabelprefix
---------------------------------------------
500::1/128
401::/0
354::ffff:0:0/96
3022002::/16
552001::/32
313fc00::/7
111fec0::/10
1123ffe::/16
13::/96
precedencelabelprefix
---------------------------------------------
500::1/128
401::/0
3022002::/16
203::/96
104::ffff:0:0/96

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
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:
Code:
netsh int ipv6 set prefix ::ffff:0:0/96 35 4
stellt den Urzustand umgehend wiederher.
 
Zuletzt bearbeitet:
Moinsen @Barungar,
das ist mal wieder ein super Beitrag zum Thema IPv6!
Mir ist der Unterschied selber noch gar nicht aufgefallen. Mein Windows 10 ist zwar auf dem Dualboot System hier vorhanden, im Alltag nutze ich es aber nur für die wenigen Anwendungen (hust, zum Zocken), die hier unter Windows laufen.
Und das auch eher so einmal pro Quartal...
;)
Danke für die super Erklärung dazu!
 
Ich habe den obigen Befehl eingegeben und der Ping ohne Vorgabe präferiert die IPv6-Adressen.

Bei einem erneuten Überprüfen der Prefixpolicies mit
Code:
netsh interface ipv6 show prefixpolicies
wird nach dem Absetzen des obigen Befehls nur noch diese Prefix ("::ffff:0:0/96") mit Vorgänger "2" und Label "4" angezeigt. Die o.g. Auflistung aller Prefixe sind weg

Ist das normal?
 
Nein, das ist nicht normal... ;) Die Anderen sollten alle noch da sein.
Keine Ahnung, was da passiert ist, vielleicht hat sich Windows verschluckt.
Im Zweifel mal rebooten oder die Regeln manuell neu anlegen - weißt Du noch, wie sie aussehen sollten?
Ansonst steht oben das Referenzbeispiel.
 
Reboots brachten leider nichts.

Ich habe eben mal mit

NGINX:
netsh interface ipv6 reset

die IPv6-Schnittstelle zurückgesetzt und nach anschließendem Reboot ist die Tabelle wieder wie oben vollständig zu sehen.
Nach erneuter Eingabe zur Änderung der Prefix-Reihenfolge wird die Tabelle vollständig mit der gewünschten Änderung aufgelistet.

Werde die anderen Win-Rechner nochmals überprüfen (hoffentlich "verschluckt" sich Windows nicht so oft).
Ach wie ist es bei Linux so einfach und vor allem unkompliziert :)

Edit:
Nach jedem Reboot wird wieder nur noch die Änderung aufgelistet 🤬
Werde jetzt halt mal die Tabelle komplett manuell erfassen.
 
Zuletzt bearbeitet:
Habe jetzt die ganzen Prefixe manuell über netsh erfasst und 2x neu gebootet. Die Prefixe werden in der internen IP-Stack Vorrangliste nun wieder komplett aufgelistet.
Hoffentlich muss ich dies nicht nach jedem Win-Update nachholen.
Folgend habe ich die Befehle aufgelistet, mit welchen ich bei mir die fehlenden Prefixe ergänzt habe:

Code:
netsh interface ipv6 add prefix ::1/128 50 0
netsh interface ipv6 add prefix ::/0 40 1
netsh interface ipv6 add prefix 2002::/16 30 2
netsh interface ipv6 add prefix 2001::/32 5 5
netsh interface ipv6 add prefix fc00::/7 3 13
netsh interface ipv6 add prefix fec0::/10 1 11
netsh interface ipv6 add prefix 3ffe::/16 1 12
netsh interface ipv6 add prefix ::/96 1 3

Werde jetzt noch die Prozedure an den anderen WIN-Rechnern nachholen.
 
Nein, die sind normal permanent und resistent. Ich habe die vor Ewigkeiten gesetzt und die stehen immer noch "sauber" da.
Keine Ahnung, wieso Dein IP-Stack der Meinung war mal alle Präferenzen zu vergessen. Normal ist so eine Reaktion nicht.
Wenn die Werte einmal stehen, dann stehen die fürgewöhnlich auch.
 
Habe jetzt alles nachgetragen.
Auffällig ist, dass die Reihenfolge bei den Rechnern unterschiedlich ist. Spielt das eine Rolle, oder ist dies durch die Spalten "Vorgänger" und "Label" vorgegeben (bei mir steht z. B. "fec0::/10" statt an drittletzter Stelle an der letzten Stelle).
 
Da spielen die von Dir genannten Spalten eine Rolle. Es wird nach Vorgänger und Label sortiert. Bei gleichem Vorgänger gilt das kleinere Label; ansonst je höher der Vorgänger.
 
Irgendwie mag das bei mir nicht, meine Präfixliste sieht wie folgt aus

Code:
Vorgänger   Label  Präfix
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        35     13  fc00::/7
        30      2  2002::/16
         5      5  2001::/32
         2      4  ::ffff:0:0/96
         1      3  ::/96
         1     12  3ffe::/16
         1     11  fec0::/10

Dennoch wird statt der ULA die GUA verwendet.
 
Hm, meine FritzBox liefert auf ihren DNS-Namen "fritz.box" auch eine IPv4, eine IPv6-GUA und eine IPv6-ULA.
Ein Simples PING fritz.box verwendet bei mir die IPv6-ULA ...

Wobei mein Windows 11 23H2 mittlerweile die folgenden Werte verwendet:

Code:
Vorgänger   Label  Präfix
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        30      2  2002::/16
         5      5  2001::/32
         2      3  ::/96
         2      4  ::ffff:0:0/96
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
5.912
Beiträge
57.731
Mitglieder
5.870
Neuestes Mitglied
kicknick
Zurück
Oben