Priorytet IPv4 vs IPv6 w systemie Windows 7

31

Mam łączność IPv6 przez tunel Hurricane Electric. Od dnia IPv6 w tym roku wiele usług (google.com, facebook.com itp.) Włącza IPv6 w swoich głównych domenach. Na moim komputerze z systemem Windows preferowany jest protokół IPv6 zamiast protokołu IPv4. Oznacza to, że za każdym razem, gdy odwiedzam Google, cały ruch przechodzi przez mój tunel do Hurricane Electric, co zwiększa opóźnienie o ponad 100%:

C:\> ping www.google.com

Pinging www.l.google.com [2001:4860:8005::68] with 32 bytes of data:
Reply from 2001:4860:8005::68: time=85ms
Reply from 2001:4860:8005::68: time=84ms
Reply from 2001:4860:8005::68: time=112ms
Reply from 2001:4860:8005::68: time=86ms

Ping statistics for 2001:4860:8005::68:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 84ms, Maximum = 112ms, Average = 91ms


C:\> ping -4 www.google.com

Pinging www.l.google.com [173.194.79.103] with 32 bytes of data:
Reply from 173.194.79.103: bytes=32 time=28ms TTL=48
Reply from 173.194.79.103: bytes=32 time=28ms TTL=48
Reply from 173.194.79.103: bytes=32 time=55ms TTL=46
Reply from 173.194.79.103: bytes=32 time=29ms TTL=46

Ping statistics for 173.194.79.103:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 28ms, Maximum = 55ms, Average = 35ms

Pytanie: Jak sprawić, aby system Windows 7 zawsze preferował protokół IPv4, jeśli dla określonej nazwy domeny dostępne są zarówno rekordy IPv4, jak i IPv6?

haimg
źródło
4
Właściwym sposobem na to, w większości systemów operacyjnych, jest skonfigurowanie zasad prefiksów - w systemie Windows za pośrednictwem netsh interface ipv6 show prefixpolicy. Jutro mogę opublikować bardziej szczegółową odpowiedź.
grawity
1
@grawity To powinno być prefixpolicies, nie prefixpolicy.
Peter Wood,
@PeterWood Może być inny niż XP.
grawitacja
1
@grawity Tak, korzystam z systemu Windows 7, a dzwonienie netsh interface ipv6 showzapewnia użycie, w tym show prefixpolicies - Shows prefix policy entries, ale nie prefixpolicy. Twoje zdrowie.
Peter Wood,

Odpowiedzi:

40

Rozwiązanie nr 1: Dodaj zasadę przedrostka, aby preferować adresy IPv4 zamiast IPv6

Tabela strategii prefiksów jest podobna do tabeli routingu, określa, które adresy IP są preferowane podczas nawiązywania połączenia. Zauważ, że wyższy priorytet w zasadach prefiksów jest reprezentowany przez wartość „pierwszeństwa” lager, dokładnie przeciwną do wartości „kosztu” tabeli routingu.

Domyślna tabela zasad prefiksu Windows:

C:\>netsh interface ipv6 show prefixpolicies
Querying active state...

Precedence  Label  Prefix
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        30      2  2002::/16
        20      3  ::/96
        10      4  ::ffff:0:0/96
         5      5  2001::/32

Zauważ, że adresy IPv6 (:: / 0) są lepsze niż adresy IPv4 (:: / 96, :: ffff: 0: 0/96).

Możemy stworzyć politykę, która sprawi, że tunel Hurricane Electric IPv6 będzie mniej korzystny niż jakikolwiek adres IPv4 :

netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6

2001: 470 :: / 32 jest prefiksem Hurricane Electric, 3 to Precedence (bardzo niski), a 6 to Label.

Mógłbym użyć bardziej ogólnego prefiksu, ale chciałem się upewnić, czy i kiedy otrzymam bezpośrednią łączność IPv6 od dostawcy usług internetowych, będzie on miał pierwszeństwo przed IPv4.

Jeśli dostosujesz to rozwiązanie, musisz zastąpić odpowiedni prefiks IPv6 zamiast mojego Hurricane Electric.

Rozwiązanie 2: Ulepsz rejestr, aby system Windows zawsze wolał IPv4 niż IPv6

To rozwiązanie jest bardziej ogólne, ale bardziej inwazyjne i mniej zgodne ze standardami. Ostatecznie system Windows nadal zmodyfikuje dla Ciebie tabelę zasad prefiksów.

  • Otwórz RegEdit, przejdź do HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Utwórz DisabledComponentswartość rejestru DWORD, ustaw jej wartość na 20 (szesnastkową). Zobacz Microsoft KB 929852, aby uzyskać więcej informacji o tym kluczu rejestru, zwłaszcza jeśliDisabledComponents już istnieje w twoim systemie.
  • Restart.
haimg
źródło
Polecenia programu PowerShell dla rozwiązania nr 2: Get-ItemProperty -Path hklm:SYSTEM\CurrentControlSet\Services\tcpip6\Parameters -Name "DisabledComponents" | select -exp DisabledComponents Set-Itemproperty -Path hklm:SYSTEM\CurrentControlSet\Services\tcpip6\Parameters -Name "DisabledComponents" -value 32
Sergii Volchkov
To jest bummer, że nie możesz ustawić tej preferencji dla połączenia (np. Mam wadliwy router), ale tylko globalnie lub co najwyżej na adapter.
mirh
23

Jeśli przerażają Cię teksty i tabele o jednolitej przestrzeni z dziwnymi liczbami i symbolami, możesz to zrobić za pomocą Microsoft Fix-its, prostych instalatorów firmy Microsoft, które dokonują zmian w konfiguracji.

Te poprawki pochodzą z KB 2533454 , co wyjaśnia, że ​​warto to zrobić, jeśli połączenie IPv6 jest zerwane. Musisz być administratorem, aby uruchomić poprawkę; po pobraniu kliknij prawym przyciskiem myszy i wybierz Uruchom jako administrator.

Michael Hampton
źródło
+1 posiadanie przycisku do włączania / wyłączania tego jest naprawdę doskonałe, na zdrowie
ashes999
7

Najprostszy sposób, a te są zawsze tak proste, że je pomijamy ...

  1. Centrum otwartej sieci i udostępniania.

  2. Tam kliknij Zmień ustawienia adaptera

  3. Na „pasku menu” kliknij Zaawansowane. ** Uwaga .. Jeśli widzisz tylko „Organizuj”, kliknij to, a następnie z rozwijanego menu wybierz „Układ - pasek menu”

  4. Po kliknięciu zaawansowanych w poprzednim kroku, kliknij „Ustawienia zaawansowane” w tym kroku (na ekranie otworzy się okno)

  5. Wyświetlane są adaptery i ustawienia, a adapter, którego obecnie używasz, będzie już podświetlony w górnej połowie, a jego reprezentatywny podział poniżej (powinieneś zobaczyć powiązania dla tego adaptera). Podświetl dowolne powiązanie na liście i powinieneś zauważyć, że zapalają się strzałki po prawej, użyj tych strzałek, aby zmienić kolejność wiązania zgodnie z własnymi preferencjami, a następnie wybierz ok od dołu.

  6. Pamiętaj, że podobnie jak podczas instalowania protokołu, usługi lub klienta we właściwościach adaptera. To samo dotyczy tutaj. to znaczy, że zmieniasz jeden adapter, a pozostałe pasują do siebie. Na przykład, jeśli wybierzesz IPV6 w karcie sieci bezprzewodowej zamiast 4, karta LAN również się zmieni.

To najłatwiejszy sposób na wykonanie tego konkretnego zadania bez konieczności zbytniego zastanawiania się lub posiadania zbyt dużej wiedzy na temat routingu pakietów w sieci międzysieciowej.

StevenRowe6
źródło
2
Kiedy tam pójdę, IPv4 jest już wymieniony jako pierwszy w obu kategoriach. Jednak po przejściu do właściwości mojej karty sieciowej IPv6 jest wymieniony jako pierwszy.
kojow7,
1

Krótka wersja

Before September 2012                     After September 2012
Precedence  Prefix                        Precedence  Prefix       
----------  -------------                 ----------  -------------
        50  ::1/128        IPv6 loopback          50  ::1/128        IPv6 loopback
        40  ::/0           Native IPv6            40  ::/0           Native IPv6
        40  fc00::/7       ULAs                   35  ::ffff:0:0/96  IPv4
        40  fec0::/10      site-local             30  2002::/16      6to4
        40  3ffe::/16      6bone                   5  2001::/32      Teredo
        30  2002::/16      6to4                    3  fc00::/7       ULAs
        20  ::/96          IPv4compat              1  fec0::/10      site-local
        10  ::ffff:0:0/96  IPv4                    1  3ffe::/16      6bone
         5  2001::/32      Teredo                  1  ::/96          IPv4compat

Długa wersja

RFC6724 zdefiniował zmianę preferowanych adresów. Dzięki tej zmianie IPv6 nie jest już preferowanym adresem w prawie każdym przypadku :(

To pytanie, które zostało zadane w czerwcu 2012 r., Zostało „naprawione” przez RFC od września 2012 r. W zależności od wersji systemu Windows albo nowe zasady były gotowe po wyjęciu z pudełka (Windows 8.1), albo prawdopodobnie zostały już dostarczone za pośrednictwem aktualizacji ( Windows 8, Windows 7, Windows Vista).

Jesteśmy tutaj, ponieważ chcemy korzystać z IPv6; chcemy, aby ta zmiana została cofnięta.

Jak to odłożyć

Jeśli uzyskasz wiele adresów IP dla jednego hosta, urządzenie musi zdecydować, którego adresu będzie używać. Przykładowy ranking może wyglądać następująco:

  • Pętla zwrotna IPv6
  • Natywny IPv6
  • Unikalne adresy lokalne (ULA), np. Fdxx ::
  • Lokalna strona, np Fec0
  • 6 kości
  • 6to4
  • Kompatybilny z IPv4
  • IPv4
  • Teredo, np. 2001

Na komputerze z systemem Windows ten ranking nazywa się zasadą przedrostka .

Polityka przedrostków

Możesz wyświetlić zasady dotyczące prefiksów swojego komputera, uruchamiając:

>netsh int ipv6 show prefixpolicies

W dawnych czasach (pierwotnie zdefiniowane przez RFC 3484 ) polityka prefiksów była następująca:

Precedence  Prefix         
----------  -------------
        50  ::1/128        IPv6 loopback
        40  ::/0           Native IPv6
        40  fc00::/7       ULAs
        40  fec0::/10      site-local
        40  3ffe::/16      6bone
        30  2002::/16      6to4
        20  ::/96          IPv4compat
        10  ::ffff:0:0/96  IPv4
         5  2001::/32      Teredo

Widzisz więc, że prawie zawsze używa IPv6 (tak!):

  1. Pętla zwrotna IPv6
  2. Natywne IPv6, ULA, lokalna lokacja, 6one
  3. 6to4
  4. Kompatybilny z IPv4
  5. IPv4
  6. Teredo

Jeśli próbowałeś wdrożyć IPv6: to po prostu działało.

Nowa polityka prefiksów

W 2012 r . RFC6724 zdefiniował nowe zamówienie preferencyjne . Obecnie polityka prefiksów zapewnia, że ​​nigdy nie będziesz używać IPv6:

Precedence  Prefix         
----------  -------------
        50  ::1/128        
        40  ::/0           Native IPv6
        35  ::ffff:0:0/96  IPv4
        30  2002::/16      
         5  2001::/32      
         3  fc00::/7       ULAs
         1  fec0::/10      site-local
         1  3ffe::/16      
         1  ::/96          

Przekonasz się, że nigdy nie będziesz w stanie używać unikalnych adresów lokalnych ani adresu lokalnego w witrynie; jest wiecznie zepsuty:

  1. Pętla zwrotna IPv6
  2. Natywny IPv6
  3. IPv4
  4. 6to4
  5. Teredo
  6. ULA
  7. lokalna strona
  8. 6 kości
  9. Kompatybilny z IPv6

Jak to naprawić?

Chcemy naprawić IPv6, aby ULAs były lepsze niż IPv4. Przynajmniej chcemy przesunąć użycie ULA ( fc00::/7) ponad IPv4:

Precedence  Prefix         
----------  -------------
        50  ::1/128        
        40  ::/0           Native IPv6
        37  fc00::/7       ULAs <---------- from 3 up to 37
        35  ::ffff:0:0/96  IPv4
        30  2002::/16      
         5  2001::/32      
         1  fec0::/10      site-local
         1  3ffe::/16      
         1  ::/96          

Które wykonuje:

>netsh interface ipv6 set prefixpolicy prefix=fc00::/7 precedence=37 label=13 store=active

Dzięki temu będzie aktywny tylko do następnego uruchomienia. Aby zmienić na stałe:

>netsh interface ipv6 set prefixpolicy fc00::/7 37 13

Jeśli ja:

  • dołożyłem starań, aby wygenerować globalny prefiks ULA dla mojego / 48
  • i wybierz identyfikator podsieci dla mojego / 64
  • i wdrażaj ULA na każdym komputerze w przedsiębiorstwie
  • i zaktualizuj serwery DNS, aby oprócz adresów IPv4 zwracały również adresy ULA IPv6

przynajmniej komputer może zrobić to z uprzejmością użyć adresu.

Bonusowa rozmowa

fc00::/7Zakres jest podzielona na dwie części:

  • fd00::/8 - Przedrostek GlobalID generowany lokalnie
  • fc00::/8 - ???

Nikt nigdy tak naprawdę nie zdecydował, fcże byłoby dobre, więc po prostu tam siedzieć.

Te fdadresy są zdefiniowane jako:

fd [40-bit random GlobalID] [16-bit subnet] [64-bits for host assignment]

Więc jeśli wygenerowałeś a4d7f6dd66jako swój cryptoghpcall losowo 40-bitowy GlobalID , to daje ci / 48:

  • fda4:d7f5:dd66:: /48
  • fda4:d7f5:dd66:face::/ 64 (w facepodsieci)
  • fda4:d7f5:dd66:face::825 jako adres IP hosta

SixXS utrzymywał publiczną bazę danych unikalnych prefiksów Global Local Address w celu zmniejszenia prawdopodobieństwa kolizji, np .:

  • fdee:e004:2208::/48: Apple Inc - Leopard OSX
  • fdd4:43c8:ba34::/48: TekSavvy - Danny Murray
  • fdac:afbd:fea1::/48: IBM Rational Build Forge - Chris Fuller

Ale ze względu na spowolnienie użytkowania i wątpliwą wartość, SixXS zaprzestał świadczenia usługi w 2018 roku.

Czytanie bonusowe

Ian Boyd
źródło
fc00::/7Sieć jest naprawdę podzielona na dwie części. fc00::/8Sieci jest zarezerwowane dla przyszłego globalnego organu przypisania z, i nie mogą być obecnie stosowane, ale fd00::/8jest dostępny dla lokalnego zadania, ale to wymaga kolejnych 40 bitów na losowo wybrany.
Ron Maupin
Właściwie jesteśmy tutaj, ponieważ my (i OP) NIE CHCEMY używać IPv6 i nadal jest on aktywny przy sprzężeniu zwrotnym, mimo że wyłączyłem każdą instancję IPv6, którą mogłem znaleźć!
AaA
0

Jest dla mnie łatwiejsza metoda. Właśnie zmieniłem metrykę interfejsu #, aby określić jego priorytet. W przeszłości używałem tej metody do zmiany priorytetu kart sieciowych (najpierw priorytet bezprzewodowej karty sieciowej, priorytet sieci bezprzewodowej drugiej karty sieciowej), ale odkryłem, że działa również na TCP / IPv4 i TCP / IPv6. W tym przypadku zmieniłem metrykę interfejsu TCP / IPv4 z Automatycznego na 5, a metrykę interfejsu TCP / IPv6 z Automatycznej na 10. Im niższy numer metryki, tym wyższy jest jej priorytet. Następnie uruchom ponownie komputer. Więc teraz za każdym razem, gdy wysyłam polecenie ping za pomocą nazwy hosta, będzie on odpowiadał z IPv4 zamiast z IPv6.

Oto bardziej szczegółowa instrukcja

https://www.windowscentral.com/how-change-priority-order-network-adapters-windows-10

Sam N.
źródło