1 votos

Windows utiliza el ámbito equivocado para direcciones de IPv6 locales de vínculo de DNS

En Windows, tengo dos interfaces de red con los índices 1 y 2 (según route print).

Quiero hacer ping a un host que se puede acceder desde la interfaz de 2 uso de IPv6 link-local, dirección, digamos, fe80::42. Esto funciona:

> ping fe80::42
Pinging fe80::42 with 32 bytes of data:
Reply from fe80::42: time<1ms

> ping fe80::42%2
Pinging fe80::42%2 with 32 bytes of data:
Reply from fe80::42%2: time<1ms

Hasta ahora tan bueno.

Ahora, vamos a decir que esta interfaz 2 está configurado con sufijo DNS bar y con un servidor DNS que tiene una entrada para foo.bar que devuelve fe80::42. Yo esperaría a ver algo como esto:

> ping /6 foo.bar
Pinging foo.bar [fe80::42%2] with 32 bytes of data:
Reply from fe80::42%2: time<1ms

Pero en lugar de eso, me sorprendí al encontrar que Windows parece ser la resolución de la mal ámbito de aplicación:

> ping /6 foo.bar
Pinging foo.bar [fe80::42%1] with 32 bytes of data:
Destination host unreachable.

Por qué? ¿Cómo puedo solucionar esto para que Windows resuelve foo.bar a fe80::42%2, no fe80::42%1?

Información adicional

Es la versión de Windows 10.0.15063.

He verificado que el uso de un rastreador de red que los paquetes DNS para la resolución de foo.bar son enviados al servidor DNS correcto a través de la interfaz de 2, como se configura.

La mayoría de IPv6 específicas de la ruta que se muestra en route print afirma claramente que los paquetes que van a fe80::42 debe ir a través de la interfaz 2. Básicamente me han agregado manualmente una ruta que se parece a esto:

 If  Metric  Network Destination  Gateway
 2   4242    fe80::42/128         On-link

Puedo ver absolutamente ninguna razón por la que Windows elija la interfaz 1 para cualquier cosa relacionada con foo.bar o fe80::42.

He verificado independientemente de que la salida de getaddrinfo() es el culpable por construir y ejecutar el programa de ejemplo de MSDN (ligeramente modificado):

Calling getaddrinfo with following parameters:
        nodename = foo.bar
        servname (or port) = 0

getaddrinfo returned success
getaddrinfo response 1
        Flags: 0x0
        Family: AF_INET6 (IPv6)
        IPv6 address fe80::42%1
        Scope information: Zone 1 Level 0
        Socket type: SOCK_STREAM (stream)
        Protocol: IPPROTO_TCP (TCP)
        Length of this sockaddr: 28
        Canonical name: (null)

(Nota de la %1 y Zone 1 en la salida)

3voto

Sander Steffann Puntos 3540

Usted puede utilizar las direcciones locales de vínculo en DNS.

El uso de esas direcciones es dependiente de enlace que el cliente está conectado, y los clientes podrían incluso ser conectado a varios enlaces al mismo tiempo (ethernet + wifi por ejemplo). O el cliente pueden ser totalmente diferentes de enlace de el servidor, y la dirección se pone de DNS será por completo de sentido.

Registros DNS de no contener el alcance, debido a que los ámbitos locales de cada cliente. El servidor DNS no tiene manera de dar un significativo alcance para el cliente, por lo que el protocolo no incluir en la respuesta. No tendría sentido.

Así que en resumen: DNS es de ámbito global de direcciones (que incluye la ULA, si desea utilizar las direcciones locales)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: