2012-06-13 23:34:40 +0000 2012-06-13 23:34:40 +0000
33
33

Priorytet IPv4 vs IPv6 w Windows 7

Mam łączność IPv6 poprzez tunel Hurricane Electric. Od dnia IPv6 w tym roku, wiele usług (google.com, facebook.com, itp.) włączyło IPv6 na swoich głównych domenach. Na mojej maszynie Windows, IPv6 jest preferowany nad IPv4. Oznacza to, że za każdym razem, gdy odwiedzam Google, cały ruch przechodzi przez mój tunel do Hurricane Electric, co podnosi 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 mogę sprawić, aby Windows 7 zawsze preferował IPv4, gdy dla danej nazwy domeny dostępne są zarówno rekordy IPv4, jak i IPv6?

Odpowiedzi (5)

45
45
45
2012-06-14 18:15:03 +0000

Rozwiązanie #1: Dodaj politykę prefiksową aby preferować adresy IPv4 nad IPv6

Tabela polityki prefiksowej jest podobna do tabeli routingu, określa które adresy IP są preferowane podczas nawiązywania połączenia. Należy pamiętać, że wyższy priorytet w polityce prefiksowej jest reprezentowany przez wyższą wartość “precedensu”, dokładnie odwrotnie niż wartość “kosztu” w tabeli routingu.

Domyślna tabela polityki prefiksowej 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ą preferowane w stosunku do adresów IPv4 (::/96, ::ffff:0:0/96).

Możemy stworzyć politykę, która spowoduje, ż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 to prefiks 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ć, że jeśli i kiedy otrzymam bezpośrednie połączenie IPv6 od ISP, będzie ono miało pierwszeństwo przed IPv4.

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

Rozwiązanie #2: Podrasuj rejestr, aby Windows zawsze wolał IPv4 od IPv6

To rozwiązanie jest bardziej ogólne, ale bardziej inwazyjne i mniej zgodne ze standardami. W końcu Windows i tak zmodyfikuje tabelę polityki prefiksów za Ciebie.

  • Otwórz RegEdit, przejdź do HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Utwórz wartość rejestru DisabledComponents DWORD, ustaw jej wartość na 20 (szesnastkowo). Zobacz Microsoft KB 929852 aby uzyskać więcej informacji na temat tego klucza rejestru, zwłaszcza jeśli DisabledComponents już istnieje w systemie.
  • Ponowne uruchomienie.
23
23
23
2014-05-15 12:13:20 +0000

Jeśli przeraża cię tekst monospace i tabele z dziwnymi liczbami i symbolami, możesz to zrobić za pomocą Microsoft Fix-its, prostych instalatorów od Microsoftu, które dokonują zmian w konfiguracji za ciebie.

Te poprawki pochodzą z KB 2533454 , który wyjaśnia, że chciałbyś to zrobić, jeśli twoja łączność IPv6 jest uszkodzona. Musisz być administratorem, aby uruchomić poprawki; po pobraniu, kliknij prawym przyciskiem myszy i wybierz Uruchom jako administrator.

7
7
7
2014-05-15 08:58:51 +0000

Najprostszy sposób, a te są zawsze tak proste, że je przeoczamy…

  1. Otwórz Centrum sieci i udostępniania.

  2. Tam kliknij na Zmień ustawienia adaptera

  3. Na “Pasku menu” kliknij na Zaawansowane. **Jeśli widzisz tylko “Organizuj” to kliknij to, a następnie z rozwijanej listy wybierz “Układ - Pasek menu”

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

  5. To, co zostanie wyświetlone to adaptery i ustawienia, a adapter, którego aktualnie używasz będzie już podświetlony w górnej połowie i jego reprezentatywny podział poniżej (powinieneś zobaczyć wiązania dla tego adaptera). Podświetl dowolne z wiązań na liście i powinieneś zauważyć, że strzałki po prawej stronie podświetlają się, użyj tych strzałek, aby zmienić kolejność wiązań do swoich preferencji, a następnie wybierz ok z dołu.

  6. Zauważ, że tak samo jak w przypadku instalacji protokołu, usługi lub klienta we właściwościach adaptera. To samo odnosi się tutaj. co oznacza, że zmieniasz jeden adapter, a reszta podąża za nim. Tak więc, na przykład, jeśli wybierzesz IPV6 preferowane przez 4 na karcie bezprzewodowej, karta LAN zmienia się również.

Jest to najprostszy sposób, jaki przychodzi mi do głowy, aby wykonać to konkretne zadanie bez konieczności zbytniego zastanawiania się lub posiadania zbyt dużej wiedzy na temat routingu pakietów w sieci wewnętrznej.

2
2
2
2018-10-31 02:38:41 +0000

Wersja krótka

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

Wersja długa

RFC6724 zdefiniowała zmianę w sposobie preferowania adresów. Z tą zmianą IPv6 nie jest już preferowanym adresem w prawie każdym przypadku :(

To pytanie, które zostało zadane w czerwcu 2012 zostało “naprawione” przez RFC z września 2012. W zależności od wersji systemu Windows, albo miałeś te nowe zasady po wyjęciu z pudełka (Windows 8.1), albo prawdopodobnie już dostarczone przez aktualizację (Windows 8, Windows 7, Windows Vista).

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

Jak to cofnąć

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

  • IPv6 loopback
  • Native IPv6
  • Unique-Local addresses (ULAs), np. fdxx::
  • Site-local, np. fec0
  • 6bone
  • 6to4
  • IPv4compat
  • IPv4
  • Teredo, np. 2001

Na komputerze z systemem Windows, ten ranking jest nazywany polityką prefiksów.

Polityka prefiksowa

Możesz zobaczyć politykę prefiksową swojego komputera uruchamiając:

>netsh int ipv6 show prefixpolicies

W dawnych czasach (pierwotnie zdefiniowanych przez RFC 3484 ), polityka prefiksowa była:

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

Więc widzisz, że to prawie zawsze używa IPv6 (yay!):

  1. IPv6 loopback
  2. Natywny IPv6, ULAs, site-local, 6one
  3. 6to4
  4. IPv4compat
  5. IPv4
  6. Teredo

Jeśli zadałeś sobie trud, aby wdrożyć IPv6: to po prostu zadziałało.

Nowa polityka prefiksowa

W 2012 roku nowy porządek preferencji został zdefiniowany przez RFC6724 . Obecnie polityka prefiksowa zapewnia, że nigdy nie użyjesz 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

Zobaczysz, że nigdy nie będziesz w stanie użyć swojego Unikalnego Adresu Lokalnego, lub adresu site-local; jest on wiecznie zepsuty:

  1. IPv6 loopback
  2. Natywny IPv6
  3. IPv4
  4. 6to4
  5. Teredo
  6. ULAs
  7. site-local
  8. 6bone
  9. IPv6compat

Jak to naprawić?

Chcemy naprawić IPv6 tak, aby ULA były preferowane w stosunku do IPv4. Przynajmniej chcemy przesunąć użycie ULA (fc00::/7) ponad użycie 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

Co jest robione przez:

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

To sprawi, że będzie to aktywne tylko do następnego restartu. Aby zmiana była trwała:

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

Jeśli ja:

  • zadałem sobie trud wygenerowania globalnego prefiksu ULA dla mojego /48
  • i wybrałem id podsieci dla mojego /64
  • i wdrożyłem ULA na każdej maszynie w przedsiębiorstwie
  • i zaktualizowałem serwery DNS, aby zwracały adresy IPv6 ULA oprócz adresów IPv4

to przynajmniej komputer mógłby zrobić to, co do niego należy, to mieć zwykłą uprzejmość, aby użyć adresu.

Bonus Chatter

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

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

Nikt nigdy tak naprawdę nie zdecydował, do czego fc może się przydać, więc po prostu tam siedzi.

Adresy fd są zdefiniowane jako:

fd [40-bit random GlobalID] [16-bit subnet]

Więc jeśli wygenerowałeś [64-bits for host assignment] jako swój kryptoghpcallly losowy 40-bitowy GlobalID, to daje ci to twój /48:

  • a4d7f6dd66 /48
  • fda4:d7f5:dd66:: /64 (w podsieci fda4:d7f5:dd66:face::)
  • face jako adres IP hosta SixXS utrzymywał publiczną bazę prefiksów Unique Local Address GlobalID w celu zmniejszenia szansy na kolizje, np. np.:

  • fda4:d7f5:dd66:face::825: Apple Inc - Leopard OSX

  • fdee:e004:2208::/48: TekSavvy - Danny Murray

  • fdd4:43c8:ba34::/48: IBM Rational Build Forge - Chris Fuller

Ale ze względu na spowolnienie użycia, a także wątpliwą wartość w pierwszej kolejności, SixXS zaprzestał świadczenia usługi w 2018 roku.

Bonus Reading

0
0
0
2019-03-27 20:53:05 +0000

Jest łatwiejsza metoda, która działa dla mnie. Po prostu zmieniłem metrykę interfejsu #, aby określić jego priorytet. Używałem tej metody w przeszłości do zmiany priorytetu adapterów sieciowych (priorytet Wireless NIC pierwszy, LAN NIC drugi), ale odkryłem, że działa to również na TCP/IPv4 i TCP/IPv6. W tym przypadku, zmieniłem metrykę interfejsu TCP/IPv4 z automatycznej na 5, a metrykę interfejsu TCP/IPv6 z automatycznej na 10. Im niższy jest numer metryki, tym wyższy jest jej priorytet. Następnie uruchom ponownie swój komputer. Więc teraz za każdym razem, gdy pinguję używając nazwy hosta, będzie on odpowiadał z IPv4, zamiast z Ipv6.

Tutaj jest bardziej szczegółowa instrukcja https://www.windowscentral.com/how-change-priority-order-network-adapters-windows-10