36 votos

Cómo deshabilitar AAAA búsquedas?

... para compensar roto los servidores DNS que están fuera de nuestro control.

Nuestro problema: Nos implementar dispositivos embebidos que recoger datos de los sensores en varios, en su mayoría sólo IPv4 sitios. Algunos sitios tienen el deficiente mantenimiento de las redes, por ejemplo, mal configurado o de lo contrario se rompa caché DNS y/o firewalls que ignorar AAAA consultas por completo, o responder a ellos con rotura de respuestas (por ejemplo, mal IP de origen!). Como un proveedor externo para el departamento de instalaciones, tenemos al lado a ninguna influencia en la (a veces reacios) a los departamentos de TI. Las posibilidades de que ellos la fijación de sus servidores DNS/firewalls cualquier momento pronto son mínimas.

El efecto en nuestro dispositivo es que con cada gethostbyname(), los procesos tienen que esperar hasta que la AAAA consulta el tiempo, al punto que algunos de los procesos ya han agotado sus intentos de conexión por completo.

Estoy en busca de soluciones que son ...

  • todo el sistema. No puedo volver a configurar decenas de solicitud de forma individual
  • no permanente y configurable. Necesitamos para (re)habilitar IPv6 en donde/cuando se fijo/implementados. Reinicio OK.
  • Si la solución requiere de un núcleo de la biblioteca como glibc a ser reemplazado, el reemplazo del paquete de la biblioteca debe estar disponible en un conocido-a-ser-bien-mantenido repositorio (por ejemplo, Debian Testing, Ubuntu universo, EPEL). La auto-construcción no es una opción por muchas razones que yo no sé ni por dónde empezar, por lo que no puedo enumerarlos a todos...

La solución más obvia sería la de configurar la biblioteca de resolución por ejemplo, a través de /etc/{resolv,nsswitch,gai}.conf para que no consulta de registros AAAA. Un resolv.conf opción no-inet6 como se sugiere aquí sería exactamente lo que estoy buscando. Por desgracia no está implementado, al menos no en nuestros sistemas (libc6-2.13-38+deb7u4 en Debian 7; libc6-2.19-0ubuntu6.3 en Ubuntu 14.04)

Así que, ¿cómo? Uno encuentra los siguientes métodos sugeridos en SF y en otros lugares, pero no de ellos el trabajo:

  • Deshabilitar IPv6 en conjunto, por ejemplo, mediante listas negras de la ipv6 LKM en /etc/modprobe.d/ o sysctl -w net.ipv6.conf.all.disable_ipv6=1. (Por curiosidad: ¿por Qué es la resolución pidiendo AAAA donde IPv6 está deshabilitado?)
  • Extracción options inet6 de /etc/resolv.conf. Que no estaba allí en el primer lugar, inet6 simplemente está habilitado por defecto en estos días.
  • Configuración de options single-request en /etc/resolv.conf. Esto sólo se asegura de que la Una y la AAAA consultas se realizan de forma secuencial en lugar de en paralelo
  • Cambiando precedence en /etc/gai.conf. Que no afecta a las consultas DNS, sólo la manera en varias respuestas se procesan.
  • Uso externo de las resoluciones (o ejecutar un solucionador local demonio que evita el roto servidores DNS) podría ayudar, pero es generalmente rechazado por la compañía de directivas de firewall. Y se puede hacer de los recursos internos inaccesible.

Alternativa feo ideas:

  • Ejecutar una caché de DNS en localhost. Configurarlo para reenviar todos los no-AAAA consultas, pero para responder a AAAA consultas con NOERROR o NXDOMAIN (dependiendo del resultado de la correspondiente Una consulta). Yo no soy consciente de que una caché de DNS capaz de hacer esto, sin embargo.
  • El uso inteligente de iptables u32 match, o Ondrej Caletka del iptables módulo DNS para que coincida AAAA consultas, con el fin de icmp de rechazo de ellos (¿cómo sería la resolución lib reaccionar?), o redireccionarlos a un servidor DNS local que responde a todo con un vacío NOERROR.

Tenga en cuenta que no son similares, relacionados con la pregunta en SÍ. Mi pregunta difiere en la medida en que se profundiza en el problema real que estoy tratando de resolver, ya que las listas de requisitos explícitos, como las listas negras a menudo algunos de ellos-sugirió la no-soluciones de trabajo, y como no es específica de una sola aplicación. Tras esta discusión, he publicado mi pregunta.

4voto

BMDan Puntos 4643

En caso de duda, diríjase al código fuente! Así que, vamos a ver... gethostbyname() se ve interesante; que describe exactamente lo que estamos viendo: trate de IPv6 en primer lugar, a continuación, caer de nuevo a IPv4, si usted no recibe una respuesta que te gusta. ¿Qué es esto RES_USE_INET6 flag? El seguimiento de nuevo, viene de res_setoptions(). Aquí es donde resolv.conf es leer.

Y.... que me de ideas. Estoy completamente claro cómo es que RES_USE_INET6 se establece si no en resolv.conf.

0voto

Glueon Puntos 1149

Trató de instalación de PDNS-movimiento, establece en su /etc/resolv.conf y negar "AAAA" búsquedas en ella? El uso de algo como query-local-address6=

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: