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

Prioridad IPv4 vs IPv6 en Windows 7

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 por mi túnel hacia Hurricane Electric, lo que aumenta la latencia en más de un 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 tanto los registros IPv4 como IPv6 están disponibles para un nombre de dominio específico?

Respuestas (5)

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

Solución #1: Añadir una política de prefijos para preferir las direcciones IPv4 sobre las IPv6

La tabla de políticas de prefijos es similar a la tabla de enrutamiento, determina qué direcciones IP son preferidas al realizar una conexión. Tenga en cuenta que una mayor precedencia en las políticas de prefijos está representada por un mayor valor de “precedencia”, exactamente opuesto al valor de “coste” de la tabla de enrutamiento.

Tabla de políticas de prefijos por defecto 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

Nótese que las direcciones IPv6 (::/0) tienen preferencia sobre las direcciones IPv4 (::/96, ::ffff:0:0/96).

Podemos crear una política que haga que el túnel eléctrico IPv6 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 utilizado un prefijo más genérico, pero quería asegurarme de que si y cuando obtenga conectividad IPv6 directa de un ISP, tendrá prioridad sobre IPv4.

Si adaptas esta solución, necesitas sustituir un prefijo IPv6 apropiado en lugar de mi prefijo Hurricane Electric.

Solución #2: Ajustar el registro para 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 prefijos por ti.

  • Abra RegEdit, navegue hasta HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Cree el valor de registro DisabledComponents DWORD, establezca su valor en 20 (Hexadecimal). Vea Microsoft KB 929852 para más información sobre esta clave de registro, especialmente si DisabledComponents ya existe en su sistema.
  • Reinicio.
23
23
23
2014-05-15 12:13:20 +0000

Si el texto monospace y las tablas con números y símbolos extraños te asustan, puedes hacerlo con los Microsoft Fix-its, sencillos instaladores de Microsoft que realizan los cambios de configuración por ti.

Estos fix its provienen de KB 2533454 , que explica que usted querrá hacer esto si su conectividad IPv6 está rota. Necesita ser un administrador para ejecutar el fix its; después de descargarlo, haga clic con el botón derecho y seleccione Ejecutar como administrador.

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

La forma más sencilla, y estas son siempre tan sencillas que las pasamos por alto…

  1. Abre el Centro de redes y recursos compartidos.

  2. Allí haz clic en Cambiar la configuración del adaptador

  3. En la “Barra de menús”, haga clic en Avanzado. **Nota… Si sólo ves “Organizar” entonces haz clic en eso, y luego desde el menú desplegable elige “Diseño - Barra de menús”

  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 debajo (debería ver los bindings 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 los enlaces 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 usted cambia un adaptador, y el resto siguen su ejemplo. Así, por ejemplo, si eliges IPV6 preferentemente sobre 4 en tu adaptador inalámbrico, tu adaptador LAN también cambia.

Es la forma más fácil que se me ocurre para hacer esta tarea en particular sin tener que pensar demasiado, o tener demasiados conocimientos sobre el enrutamiento de paquetes en una red interna.

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

Versión 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 la forma de 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 “arreglada” por un RFC de septiembre de 2012. Dependiendo de su versión de Windows, usted tenía esta nueva política fuera de la caja (Windows 8.1), o probablemente ya entregado a través de una actualización (Windows 8, Windows 7, Windows Vista).

Estamos aquí porque queremos usar IPv6; queremos que se deshaga el cambio.

Cómo volver a ponerlo

Si obtienes varias direcciones IP para un mismo host, tu máquina tiene que decidir qué dirección va a utilizar. Un ejemplo de clasificación podría ser

  • IPv6 loopback
  • IPv6 nativo
  • Direcciones Únicas-Locales (ULAs), por ejemplo fdxx::
  • Site-local, por ejemplo
  • IPv4compat
  • IPv4
  • Teredo, p. ej. 2001

En su máquina Windows, esta clasificación se llama política de prefijo.

Política de prefijos

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

>netsh int ipv6 show prefixpolicies

En los viejos tiempos (originalmente definidos por RFC 3484 ), la política de prefijos 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

Así que ve que prácticamente siempre usaría IPv6 (¡yay!):

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

Si ha hecho el esfuerzo de desplegar IPv6: acaba de funcionar.

Nueva política de prefijos

En 2012 se definió un nuevo orden de preferencia por RFC6724 . Hoy en día la política de prefijos prácticamente asegura que nunca usarás 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ás que nunca podrás usar tus Direcciones Locales Únicas, o dirección site-local; está perpetuamente rota:

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

¿Cómo solucionarlo?

Lo que queremos es arreglar IPv6 para que los ULAs tengan preferencia sobre IPv4. Como mínimo queremos empujar el uso de ULAs (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 mediante:

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

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

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

Si yo:

  • me tomé el esfuerzo de generar un prefijo global ULA para mi /48
  • y elegir un id de subred para mi /64
  • y desplegar ULAs en cada máquina de la empresa
  • y actualizar los servidores DNS para que devuelvan direcciones ULA IPv6 además de las direcciones IPv4

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

Bonus Chatter

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

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

Nadie ha decidido nunca para qué sirve el fc, así que se queda ahí.

Las direcciones fd se definen como:

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

Así que si generaste [64-bits for host assignment] como tu GlobalID de 40 bits al azar, eso te da tu /48:

  • a4d7f6dd66 /48
  • fda4:d7f5:dd66:: /64 (en la subred fda4:d7f5:dd66:face::)
  • face como dirección IP del host SixXS mantenía una base de datos pública de prefijos GlobalID de direcciones locales únicas para reducir la posibilidad de colisiones, e. g.:

  • 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

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

Lectura adicional

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

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ámbrico primero, prioridad de NIC de LAN segundo), pero descubrí que funciona en TCP/IPv4 y TCP/IPv6 también. En este caso, cambié la métrica de la interfaz de TCP/IPv4 de Automático a 5, y la de TCP/IPv6 de Automático a 10. Cuanto menor sea el número de la métrica, mayor será su prioridad. A continuación, reinicie el PC. Así que ahora cada vez que hago ping usando 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