IPv4 vs IPv6 prioridad en Windows 7

31

Tengo conectividad IPv6 a través del túnel Hurricane Electric. Desde el día de IPv6 este año, muchos servicios (google.com, facebook.com, etc.) habilitaron IPv6 en sus dominios principales. En mi máquina Windows, se prefiere IPv6 sobre IPv4. Esto significa que cada vez que visito Google, todo el tráfico pasa a través de mi túnel hacia Hurricane Electric, lo que aumenta la latencia en más del 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

Pregunta: ¿Cómo puedo hacer que Windows 7 prefiera siempre IPv4, cuando los registros IPv4 e IPv6 están disponibles para un nombre de dominio específico?

haimg
fuente
44
La forma correcta de hacerlo, en la mayoría de los sistemas operativos, es configurar la política de prefijos, en Windows, a través de netsh interface ipv6 show prefixpolicy. Podría publicar una respuesta más detallada mañana.
Grawity
1
@grawity Eso debería ser prefixpolicies, no prefixpolicy.
Peter Wood
@PeterWood Podría ser diferente desde XP, entonces.
Grawity
1
@grawity Sí, estoy en Windows 7, y las llamadas netsh interface ipv6 showdan uso incluido show prefixpolicies - Shows prefix policy entries, pero no prefixpolicy. Aclamaciones.
Peter Wood

Respuestas:

40

Solución n. ° 1: agregue una política de prefijo para preferir las direcciones IPv4 sobre IPv6

La tabla de políticas de prefijo es similar a una tabla de enrutamiento, determina qué direcciones IP se prefieren al realizar una conexión. Tenga en cuenta que una mayor precedencia en las políticas de prefijo está representada por un valor de "precedencia" lager, exactamente opuesto al valor de "costo" de la tabla de enrutamiento.

Tabla predeterminada de políticas de prefijo de 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

Tenga en cuenta que las direcciones IPv6 (:: / 0) son preferibles a las direcciones IPv4 (:: / 96, :: ffff: 0: 0/96).

Podemos crear una política que haga que el túnel IPv6 de Hurricane Electric sea menos favorable que cualquier dirección IPv4 :

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

2001: 470 :: / 32 es el prefijo de Hurricane Electric, 3 es una precedencia (muy baja) y 6 es una etiqueta.

Podría haber usado un prefijo más genérico, pero quería asegurarme de que si obtengo una conectividad IPv6 directa de un ISP, tendrá prioridad sobre IPv4.

Si adapta esta solución, debe sustituirla por un prefijo IPv6 apropiado en lugar de mi huracán eléctrico.

Solución # 2: Ajustar el registro para hacer que Windows siempre prefiera IPv4 sobre IPv6

Esta solución es más genérica, pero más invasiva y menos compatible con los estándares. Al final, Windows seguirá modificando la tabla de políticas de prefijo para usted.

  • Abra RegEdit, navegue hasta HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Cree el DisabledComponentsvalor de registro DWORD, establezca su valor en 20 (hexadecimal). Consulte Microsoft KB 929852 para obtener más información sobre esta clave de registro, especialmente si DisabledComponentsya existe en su sistema.
  • Reiniciar.
haimg
fuente
Comandos de PowerShell para la solución n. ° 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
Es un fastidio que no pueda establecer esta preferencia por conexión (por ejemplo, tengo un enrutador defectuoso) pero solo globalmente o como máximo por adaptador.
Mirh
23

Si el texto monoespacio y las tablas con números y símbolos extraños lo asustan, puede hacerlo con Microsoft Fix-its, simples instaladores de Microsoft que realizan los cambios de configuración por usted.

Estos arreglos provienen de KB 2533454 , lo que explica que desearía hacer esto si su conectividad IPv6 está rota. Debe ser un administrador para ejecutar la corrección; después de descargar, haga clic derecho y seleccione Ejecutar como administrador.

Michael Hampton
fuente
Tener un botón de 1 para habilitar / deshabilitar esto es realmente excelente,
salud
7

La forma más simple, y siempre son tan simples que los pasamos por alto ...

  1. red abierta y centro de intercambio de.

  2. Haga clic en Cambiar configuración del adaptador

  3. En la "Barra de menú" Haga clic en Avanzado. ** Nota ... Si solo ve "Organizar", haga clic en eso y luego, en el menú desplegable, elija "Diseño - Barra de menú"

  4. Después de hacer clic en avanzado en el paso anterior, haga clic en "Configuración avanzada" en este paso (se abrirá un cuadro en su pantalla)

  5. Lo que se muestra son adaptadores y configuraciones, y el adaptador que está utilizando actualmente ya estará resaltado en la mitad superior y su desglose representativo a continuación (debería ver enlaces para ese adaptador). Resalte cualquiera de los enlaces en la lista y debería notar que las flechas a la derecha se iluminan, use esas flechas para cambiar el orden de enlace a su preferencia y luego elija ok en la parte inferior.

  6. Tenga en cuenta que al igual que cuando instala un protocolo, servicio o cliente en las propiedades de su adaptador. Lo mismo se aplica aquí. que es que cambias un adaptador y el resto sigue su ejemplo. Entonces, por ejemplo, si elige IPV6 prefiere más de 4 en su adaptador inalámbrico, su adaptador LAN también cambia.

Es la forma más fácil en la que puedo pensar para hacer esta tarea en particular sin tener que pensar demasiado o tener demasiado conocimiento sobre el enrutamiento de paquetes en una red interna.

StevenRowe6
fuente
2
Cuando voy allí, IPv4 ya aparece en primer lugar en ambas categorías. Sin embargo, cuando voy a las propiedades de mi adaptador de red, IPv6 aparece primero.
kojow7
1

Version corta

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

Versión larga

RFC6724 definió un cambio en cómo se deben preferir las direcciones. Con este cambio, IPv6 ya no es la dirección preferida en casi todos los casos :(

Esta pregunta, que se hizo en junio de 2012, fue "corregida" por un RFC de septiembre de 2012. Dependiendo de su versión de Windows, tenía esta nueva política lista para usar (Windows 8.1) o probablemente ya se entregó a través de una actualización ( Windows 8, Windows 7, Windows Vista).

Estamos aquí porque queremos usar IPv6; Queremos deshacer ese cambio.

Cómo devolverlo

Si obtiene varias direcciones IP para un solo host, su máquina tiene que decidir qué dirección usará. Un ranking de ejemplo podría ser:

  • IPv6 loopback
  • IPv6 nativo
  • Direcciones locales únicas (ULA), por ejemplo, fdxx ::
  • Sitio local, por ejemplo, fec0
  • 6 huesos
  • 6to4
  • IPv4compat
  • IPv4
  • Teredo, por ejemplo, 2001

En su máquina Windows, este ranking se llama la política de prefijo .

Política de prefijos

Puede ver la política de prefijos de su computadora ejecutando:

>netsh int ipv6 show prefixpolicies

En los viejos tiempos (originalmente definido por RFC 3484 ), la política de prefijo era:

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

Como ve, casi siempre usaría IPv6 (¡sí!):

  1. IPv6 loopback
  2. IPv6 nativo, ULA, sitio local, 6one
  3. 6to4
  4. IPv4compat
  5. IPv4
  6. Teredo

Si realizó el esfuerzo de implementar IPv6: simplemente funcionó.

Nueva política de prefijos

En 2012, un nuevo orden de preferencia fue definido por RFC6724 . Hoy en día, la política de prefijos garantiza que nunca usará 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          

Verá que nunca podrá usar sus direcciones locales únicas o la dirección local del sitio; está perpetuamente roto:

  1. IPv6 loopback
  2. IPv6 nativo
  3. IPv4
  4. 6to4
  5. Teredo
  6. ULA
  7. sitio local
  8. 6 huesos
  9. IPv6compat

¿Como arreglarlo?

Lo que queremos es arreglar IPv6 para que los ULA sean preferibles a IPv4. Como mínimo, queremos impulsar el uso de ULA ( fc00::/7) por encima del de 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          

Lo cual se hace por:

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

Eso solo lo mantendrá activo hasta el próximo reinicio. Para hacer el cambio permanente:

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

Si yo:

  • pasó por el esfuerzo de generar un prefijo global ULA para mi / 48
  • y elija una ID de subred para mi / 64
  • e implementar ULA en cada máquina de la empresa
  • y actualice los servidores DNS para devolver direcciones IPv6 ULA además de direcciones IPv4

lo menos que la computadora podría hacer es tener la cortesía común de usar la dirección.

Chatter de bonificación

El fc00::/7rango se divide en dos partes:

  • fd00::/8 - Prefijo GlobalID generado localmente
  • fc00::/8 - ???

Nadie realmente decidió fcque sería bueno para él, por lo que simplemente se sienta allí.

Las fddirecciones se definen como:

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

Entonces, si generó a4d7f6dd66su GlobalID de 40 bits criptográficamente aleatorio , eso le da su / 48:

  • fda4:d7f5:dd66:: / 48
  • fda4:d7f5:dd66:face::/ 64 (en la facesubred)
  • fda4:d7f5:dd66:face::825 como una dirección IP de host

SixXS mantuvo una base de datos pública de prefijos GlobalID de dirección local única para reducir la posibilidad de colisiones, por ejemplo:

  • 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

Pero debido a la desaceleración del uso y al dudoso valor en primer lugar, SixXS suspendió el servicio en 2018.

Lectura adicional

Ian Boyd
fuente
La fc00::/7red está realmente dividida en dos partes. La fc00::/8red está reservada para una futura autoridad global desde la cual asignar, y no se puede usar actualmente, pero fd00::/8está disponible para la asignación local, pero requiere que los siguientes 40 bits se elijan al azar.
Ron Maupin
En realidad, estamos aquí porque nosotros (y OP) NO QUEREMOS usar IPv6 y todavía está activo en el bucle invertido a pesar de que desactivé cada instancia de IPv6 que pude encontrar.
AaA
0

Hay un método más fácil que funciona para mí. Acabo de cambiar la métrica de la interfaz # para determinar su prioridad. Había utilizado este método en el pasado para cambiar la prioridad de los adaptadores de red (prioridad de NIC inalámbrica primero, prioridad de NIC LAN en segundo lugar), pero descubrí que también funciona en TCP / IPv4 y TCP / IPv6. En este caso, cambié la métrica de interfaz de TCP / IPv4 de Automático a 5, y la métrica de interfaz de TCP / IPv6 de Automático a 10. Cuanto más bajo es el número de métrica, mayor es su prioridad. Luego reinicie su PC. Entonces, cada vez que haga ping con el nombre de host, responderá desde IPv4, en lugar de Ipv6.

Aquí hay una instrucción más detallada.

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

Sam N
fuente