Pregunta

redes en IPv6, la bandera IPV6_V6ONLY se utiliza para asegurar que una toma de sólo utilizará IPv6, y en particular que la cartografía de IPv4 a IPv6 no será utilizado para ese socket. En muchos de OS, la IPV6_V6ONLY no se establece por defecto, pero en algunos de OS (por ejemplo, Windows 7), que está configurado por defecto.

Mi pregunta es: ¿Cuál fue la motivación para la introducción de esta bandera? ¿Hay algo acerca de la asignación de IPv4 a IPv6 que estaba causando problemas, y por lo tanto la gente necesitaba una manera de desactivarlo? Parecería a mí que si alguien no quería utilizar la asignación de IPv4 a IPv6, podrían simplemente no especificar una dirección IPv6 asignada a IPv4. Lo que me estoy perdiendo aquí?

¿Fue útil?

Solución

No sé por qué sería por defecto; pero es el tipo de banderas que siempre me pongo explícita, no importa lo que el valor predeterminado es.

Acerca de por qué existe, en primer lugar, supongo que le permite mantener los servidores sólo IPv4 existentes, y basta con ejecutar otros nuevos en el mismo puerto, pero sólo para las conexiones IPv6. O tal vez el nuevo servidor puede simplemente clientes de proxy a la anterior, por lo que la funcionalidad IPv6 fácil y sin dolor para agregar a los servicios de edad.

Otros consejos

No todas las plataformas capaces de IPv6 soportan tomas dualstack por lo que la pregunta es ¿cómo las aplicaciones necesidad de maximimize la compatibilidad de IPv6 saber dualstack se admite o se unen separadamente cuando no? La respuesta sólo universal es IPV6_V6ONLY.

Una aplicación ignorando IPV6_V6ONLY o escrita antes de que existieran dualstack pilas IP capaces pueden encontrar por separado la unión a V4 falla en un entorno dualstack como el IPv6 dualstack zócalo se unen a la prevención de IPv4 IPv4 socket vinculante. La aplicación también puede no estar esperando IPv4 sobre IPv6 debido a protocolo o nivel de aplicación abordar las preocupaciones o controles de acceso IP.

más probable

Este o similares situaciones impulsaron MS et al por defecto a 1 incluso aunque RFC3493 declara 0 para ser predeterminada. 1 maximiza teóricamente compatibilidad hacia atrás. Específicamente Windows XP / 2003 no admite dualstack zócalos.

También hay escasez de aplicaciones que por desgracia tienen que pasar más baja información de la capa de funcionar correctamente y así que esta opción puede ser muy útil para la planificación de una estrategia de compatibilidad IPv4 / IPv6 que mejor se adapte a los requisitos y bases de código existentes.

La razón más mencionada es para el caso en que el servidor tiene algún tipo de ACL (Access Control List). Por ejemplo, imaginemos un servidor con reglas como:

Allow 192.0.2.4
Deny all

Se ejecuta en IPv4. Ahora, alguien lo ejecuta en una máquina con IPv6 y, en función de algunos parámetros, solicitudes de IPv4 se aceptan en el zócalo de IPv6, asignada como :: 192.0.2.4 y luego ya no concuerda con el primer ACL. De repente, se le niega el acceso.

Al ser explícito en su solicitud (usando IPV6_V6ONLY) resolvería el problema, lo que sea por defecto el sistema operativo tiene.

Para Linux, al escribir un servicio que escucha en ambos zócalos IPv4 e IPv6 en la mismo puerto de servicio, por ejemplo, el puerto 2001, debe llamar a setsockopt (s, SOL_IPV6, IPV6_V6ONLY, y uno, sizeof (uno)); en el zócalo de IPv6. Si no lo hace, la operación de enlace () para el socket IPv4 falla con "Dirección ya en uso".

Hay maneras posibles en las que el (mal llamada) "IPv4-mapeada" direcciones se pueden utilizar para eludir los sistemas mal configurados o malas pilas, o incluso en un sistema bien configurado sólo podría requerir cantidades onerosas de bugproofing. Un desarrollador puede desear utilizar esta bandera para hacer su aplicación más segura al no utilizar esta parte de la API.

Ver: http: // ipv6samurais.com/ipv6samurais/openbsd-audit/draft-cmetz-v6ops-v4mapped-api-harmful-01.txt

Imagine un protocolo que incluye en la conversación una dirección de red, por ejemplo, el canal de datos para FTP. Cuando se utiliza IPv6 que se va a enviar a la dirección IPv6, si el receptor pasa a ser una IPv4 asignada dirección no tendrá manera de conectarse a esa dirección.

Hay un ejemplo muy común, donde la dualidad de comportamiento es un problema. La llamada getaddrinfo() estándar con ofertas bandera AI_PASSIVE la posibilidad de pasar un parámetro y devuelve nombredenodo una lista de direcciones escuche. Un valor especial en forma de una cadena nula es aceptada por nombre de nodo e implica la escucha en direcciones comodín.

En algunos sistemas 0.0.0.0 y :: se devuelven en este orden. Cuando toma de pila dual está activada de forma predeterminada y no se establece la IPV6_V6ONLY zócalo, se conecta el servidor a 0.0.0.0 y luego no se puede conectar a :: de doble pila y por lo tanto (1) sólo funciona en IPv4 y (2) los informes de errores.

Me consideraría el orden equivocado ya que se espera IPv6 debe preferirse. Pero incluso cuando el primer intento :: de doble pila y luego sólo IPv4 0.0.0.0, el servidor informa de un error de la segunda llamada.

personalmente considero que la idea de una toma de doble pila un error. En mi proyecto y no siempre sería establecer explícitamente IPV6_V6ONLY de evitar eso. Algunas personas aparentemente lo vio como una idea buena, pero en ese caso, probablemente explícitamente desarmado IPV6_V6ONLY y traducir directamente a NULL 0.0.0.0 sin pasar por el mecanismo de getaddrinfo().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top