¿Por qué Android se niega a resolver los registros DNS que apuntan a direcciones IP internas?

Tengo un comportamiento muy extraño en un dispositivo Android (Nexus 7) al intentar acceder a las aplicaciones de la red local. En lugar de obtener la IP real de la máquina en LAN, el dispositivo Android obtiene la IP pública , lo que significa que Chrome, Firefox o cualquier otro navegador simplemente muestra la página web del enrutador.

Tengo un servidor DNS interno que maneja las redes locales. Hacer pingdesde una PC funciona correctamente:

$ ping s.pelicandd.com

PING pelicandd.com (192.168.1.15) 56(84) bytes of data.
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=1 ttl=64 time=0.524 ms
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=2 ttl=64 time=0.578 ms
^C

En un dispositivo HTC One (al que se accede con adb shell), también funciona bien:

shell@m7:/ $ ping s.pelicandd.com

PING pelicandd.com (192.168.1.15) 56(84) bytes of data.
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=1 ttl=64 time=2.56 ms
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=2 ttl=64 time=27.8 ms
^C

Sin embargo, esto es lo que obtengo al hacer lo mismo pingdesde Nexus 7:

shell@flo:/ $ ping s.pelicandd.com

PING pelicandd.com (90.78.26.42) 56(84) bytes of data.
64 bytes from LFbn-1-2441-42.w90-78.abo.wanadoo.fr (90.78.26.42): icmp_seq=1 ttl=64 time=2.56 ms
64 bytes from LFbn-1-2441-42.w90-78.abo.wanadoo.fr (90.78.26.42): icmp_seq=2 ttl=64 time=8.63 ms
^C

En lugar de resolverse en la IP interna, se resuelve en la pública.

La configuración de red es, excepto la dirección IP del dispositivo, exactamente la misma en ambos dispositivos: la configuración de IP está establecida en Estática y los servidores DNS son los internos. Ambos dispositivos Android están conectados a través de Wi-Fi (a diferencia de la PC). Sin embargo, una diferencia importante es que Nexus 7 usa Android 6.0.1, mientras que HTC One usa Android 5.0.2.

No hay nm-tool, digo nslookupen Nexus 7. El dispositivo no está rooteado.

El problema existía desde que compré el dispositivo hace unas semanas, por lo que difícilmente podría ser un problema con el caché de DNS.

¿Qué puedo hacer para inspeccionar más a fondo este problema?

En primer lugar, por supuesto, debe inspeccionar el problema. Por lo tanto, instale IP Tools desde Play Store, haga algunos nslookup, etc., y luego sabremos más. Especialmente el uso del servidor DNS Nexus, la búsqueda de DNS, etc. Pruebe estas herramientas IP . Está en idioma polaco pero, por supuesto, puede cambiarlo. Esta herramienta la uso en caso de tales problemas.
Hm. En Información IP , muestra las direcciones DNS correctas. En la búsqueda de DNS , se muestra la IP correcta (192.168.1.15). Sin embargo, la pestaña Traceroute muestra la IP pública incorrecta (90.78.26.42).
Entonces, en mi opinión, hay algo mal con la entrada DNS interna para Nexus. Uso una configuración similar y todo funciona bien.
El DNS interno funciona bien en mi Nexus 6p, Nexus 5, Nexus 10, etc. ¿Ha intentado actualizar imágenes de fábrica en el Nexus 7 (si su cargador de arranque está desbloqueado) para asegurarse de que esté ejecutando un software bueno? (Supongo que lo usó, ya que el Nexus 7 no es un dispositivo nuevo).
Lo compré de segunda mano, pero hice un reset antes de usarlo, seguido de las actualizaciones a la última versión de Android. Me imagino que esto es suficiente para garantizar que no esté ejecutando ningún software personalizado, dado que el dispositivo no está rooteado.
Tuve que volver a usar c-ares ( c-ares.haxx.se ) creado para Android, en lugar del sistema de resolución de DNS integrado de Android. Con c-ares, incluso puede realizar búsquedas de nombres de host sin un dominio de búsqueda adjunto en redes locales. (por ejemplo, micomputadora, en lugar de micomputadora.local.tld)

Respuestas (3)

Recientemente nos encontramos con este problema y lo redujimos para que ocurra SOLO en dispositivos con Android v5 y posteriores. Android v4 y todos los demás sistemas operativos no tienen ningún problema.

Con ese dato, determinamos que Android v5 y posteriores insisten en usar IPv6 para la resolución de nombres DNS. (Dado que hemos deshabilitado por completo IPv6 en nuestra red, esto concuerda con el problema). Si Android v5 (+) no puede obtener una respuesta de IPv6 del DNS local, entonces se comunica con el host de nombre público de Google (8.8.8.8) . Por lo tanto, no hay DNS interno, solo externo.

Solucionamos el problema creando registros DNS en nuestros servidores DNS públicos para nombres e IP internos seleccionados. Una vez hecho esto, el DNS público de Google podría resolver estos nombres internos con IP internas y los dispositivos podrían llegar a nuestros hosts internos.

Estamos procediendo con la habilitación completa de IPv6 en nuestros servidores DNS internos (controladores de dominio) como una solución permanente.

=========================================

ACTUALIZACIÓN: Bueno, resulta que esto puede ser una pista falsa... o no. Mi red doméstica es Win2008R2, de dominio único con DHCP y DNS y sin enlace IPv6. Probé un dispositivo Android v5 desde allí y NO TENGO PROBLEMAS. La red de la oficina con el problema es Win2012 (no R2), dominio único.

Se omitieron los WAP de oficina actuales con WAP independiente de Linksys y SSID separado para realizar pruebas, el problema persiste.

Diferencias entre las redes domésticas y de oficina (que se me ocurran): - Versión de Windows - 2012 frente a 2008 R2 - Modelo de enrutador (Cisco frente a Linksys) - Modelo WAP (Redes Aruba de la marca Dell frente a Linksys)

Continuando con cualquier prueba adicional que se me ocurra para reducir el problema. ¡Cualquier sugerencia o entrada es extremadamente apreciada!

=========================================

EL PROBLEMA SE ACABÓ (?!)

Nuestro problema pareció desaparecer por sí solo luego de un cambio en la topología de la red que no creo que esté relacionado, pero aquí está la información por si acaso.

(MUCHÍSIMAS DISCULPAS por esta larga y dilatada historia, pero aquí es cuando desaparecieron nuestros problemas con Android, así que solucione esto si puede. Probablemente estoy proporcionando DEMASIADOS detalles aquí, pero como no puedo ver una conexión directa, Lo expongo todo exactamente como sucedió.)

Nuestro ISP es Comcast Business Class, un módem por cable con un bloque de IP estático de cinco direcciones (un número extraño, pero así es como los vende Comcast). El módem por cable de Comcast es esencialmente una combinación de módem/cortafuegos/enrutador/conmutador, con nuestro bloque de IP estática programado de forma remota en él.

Durante más de 10 años y casi la misma cantidad de empleadores, siempre construí redes de oficina de la misma manera:
configure una IP de LAN para el módem/enrutador ISP, que NAT trafica desde Internet. No podría ser más sencillo, y así ha estado configurada la red de mi oficina actual durante cuatro años.

Recientemente, el servicio de Internet de nuestra oficina se cayó. Por lo general, un reinicio del módem lo corrige, pero cuando no lo hizo, llamamos a Comcast, quien envió a un técnico, quien reemplazó el cable módem para restaurar el servicio.

Unos días después, volvió a ocurrir lo mismo. Volvimos a llamar y el técnico del sitio (un técnico diferente al anterior) intentó reemplazar el módem nuevamente, esta vez con un modelo más nuevo. Sorprendentemente, el módem por cable más nuevo no admitía cambiar la dirección de subred LAN. La subred predeterminada es 10.1.10.0/24 y no se puede cambiar. (Solo se podía configurar el cuarto octeto). Como la subred de nuestra oficina es 192.168.100.0/24, le informé al técnico que no podíamos usarla sin poder cambiar la subred LAN. Lo entendió, pero no tenía información sobre por qué el cable módem impediría el cambio. Así que instaló un módem de reemplazo del mismo modelo que antes, que configuramos de manera idéntica, y se restableció el acceso a Internet.

Pasa otro día o dos, y el servicio vuelve a caer. Esta vez, cuando llamé a Comcast, el técnico inicial con el que hablé hizo preguntas detalladas y bien informadas sobre nuestra configuración de red. Cuando le expliqué que el módem por cable estaba configurado con una IP de LAN en nuestra subred, pareció desconcertado por esto. Dijo que la mayoría de los clientes de Comcast conectan un enrutador NAT entre el módem por cable y la LAN en lugar de usar el NAT del módem por cable. De hecho, dijo que no sabía que el módem por cable admitía NAT.

Comcast envió a otro técnico con un módem por cable nuevo (el último modelo que no admite cambiar la subred LAN). Hizo pruebas exhaustivas en el módem existente y finalmente determinó que solo estaba pasando tráfico IPv6, no IPv4. También confirmó lo que había dicho el técnico del teléfono: que se recomienda usar un enrutador separado para NAT y no cambiar la subred LAN en el módem por cable (que de todos modos no podemos hacer en los módems más nuevos ahora).

Y ahora finalmente llegamos al cambio de red que hicimos. Instalé un enrutador LinkSys simple entre el módem por cable y nuestro enrutador central, configurado con nuestra IP estática en el lado del módem y una IP LAN en el interior. Luego se restableció el servicio de Internet y se ha mantenido estable desde hace algún tiempo.

Después de que se restauró el servicio de Internet, pensé en la rareza del problema de IPv6 con el cable módem, que a su vez me recordó el problema de Android v5. Luego probé nuestros dispositivos Android en la oficina y me sorprendió ver que el problema de DNS ya no estaba ocurriendo.

Agregar el enrutador LinkSys para NAT es el ÚNICO CAMBIO DE RED QUE HEMOS HECHO. ¿¿Coincidencia?? Posiblemente, pero me pareció un poco peculiar que ambos estuvieran relacionados con IPv6.

De todos modos, lo siento de nuevo por la larga historia, pero nuestro problema con Android desapareció. Haz lo que puedas con eso.

Dimarc67

De hecho, esta debería ser la causa en mi caso también, ya que, de manera similar, no uso IPv6 internamente. Eludí el problema de DNS creando un servidor VPN local y pidiéndole al dispositivo Android que usara VPN en su lugar; funciona, pero obviamente es demasiado drástico.
@ArseniMourzenko ¿Alguna vez resolvió este problema? Literalmente, perdí dos días sin hacer nada más que tratar de solucionar este problema, ya que literalmente rompió mucho de lo que funcionaba anteriormente. Y sí, probé una VPN, pero redujo la velocidad de transferencia de más de 100 Mbps a unos 20
@Michael: dado que mis servidores DNS locales están configurados para admitir solo IPv4, la respuesta de Dimarc67 fue relevante para mí (por eso también está marcada como la respuesta aceptada). A partir de ahí, configuré una VPN para todos los dispositivos Android y estoy feliz de usarla desde entonces. No he notado ninguna reducción en la tasa de transferencia; no me importaría, dada la forma en que uso los dispositivos móviles. Por lo que vale, estoy usando OpenVPN en el lado del servidor Debian y OpenVPN Connect en dispositivos Android.

Encontré esta publicación mientras intentaba que mi dispositivo Android 6.0 usara el servidor DNS configurado localmente para resolver nombres de host locales. Una respuesta anterior indicó que Android 5.0 y posteriores insisten en usar servidores DNS IPv6. Esta fue la pista que me llevó a mi solución.

Mi enrutador anunciaba los servidores DNS IPv6 proporcionados por mi ISP mediante DHCP-PD. Reconfiguré mi enrutador para dejar de anunciar los servidores DNS IPv6 y ahora el dispositivo Android 6.0 está resolviendo el nombre de host local usando el servidor DNS IPv4 provisto por DHCP (IPv4).

También tengo un DNAT para redirigir todas las consultas DNS (puerto TCP/UDP 53) a mi servidor DNS local. Esto estaba en su lugar antes de deshabilitar el anuncio del enrutador con servidores DNS IPv6, por lo que no sé si Android 5.0+ recurre a los servidores DNS de Google (como se afirma en la respuesta anterior) y los atrapé con mi regla DNAT o si mi Android El dispositivo 6.0 acaba de usar el servidor DNS IPv4 asignado por DHCP. De cualquier manera, la resolución del nombre de host local está funcionando ahora.

¡Deshabilitar IPV6 en mi enrutador solucionó el problema en TODOS mis dispositivos Android!

Finalmente pude resolver esto configurando un servidor DHCP yo mismo en la misma red, que configura el Dominio de búsqueda correcto para enviar a los clientes.

Una vez tuve un servidor dhcp, en mi caso isc-dhcpd con la configuración en dhcp.conf:

option domain-name "myrealdomain.tld";

Android pudo resolver los registros A locales establecidos en mi servidor DNS.