RESPUESTA CORTA:
Podrías hacer ping a un host local por nombre sólo si tu enrutador Wi-Fi (o algún otro host local) está ejecutando un servidor DHCP/DNS que sabe el nombre del huésped al que está tratando de hacer ping . Esta es una captura de pantalla de mi router:
También asegúrate de que tu dispositivo Android esté enviando consultas DNS a un servidor local y no a Internet. A Android le encanta Google, así que a menudo encontrarás consultas que van a 8.8.8.8
(puede ser cuando el router es anunciando el servidor DNS IPv6 ) como en tu caso. 192.168.1.1
debe ser el primer (y preferiblemente único) DNS. Configurar IP estática en la configuración de Wi-Fi o si tienes Root puedes usar el cortafuegos incorporado del núcleo de Android netfilter
para obligar a un servidor de nombres. Ya que el DNS usa el puerto UDP 53
hacer una traducción de la dirección de la red de destino (DNAT):
~# iptables -t nat -I OUTPUT -p udp --dport 53 -j DNAT --to 192.168.1.1:53
La solución no-root que funciona tanto para datos Wi-Fi como para datos móviles es usar una aplicación VPN como Anfitriones virtuales que intercepta el tráfico del DNS y hace consultas al servidor DNS configurado.
En Android Pie+, tienes que establecer DNS privado porque por defecto DNS sobre TLS ( DoT
) envía consultas DNS encriptadas sobre puerto 853 que no pueden ser interpretados por los servidores DNS ordinarios.
Para más detalles ver ¿Cómo configurar el DNS correctamente?
DETALLES:
QUÉ ES EL DNS
Los anfitriones de la red (cualquier cosa conectada a la red incluyendo computadoras, teléfonos, impresoras, enrutadores, etc.) se identifican entre sí con direcciones ( IPv4
más común en estos días). El nombre de host, que se asigna a una dirección IP, es relativamente fácil de recordar para los humanos. Cuando un host quiere acceder a otro host por su nombre, el nombre del host debe ser resuelto primero a la dirección IP correspondiente. Esta resolución de nombres era fácil en los primeros días, especialmente antes de Internet, cuando las redes eran más pequeñas. /etc/hosts
de cada host usado para contener el mapeo de IP vs. nombre de host de todos los hosts de una red, aún válido hoy en día. Cuando la red creció en tamaño, teniendo miles y luego millones de hosts, ya no era posible mantener hosts
de una red cada vez mayor, por lo que se introdujo el Sistema de Nombres de Dominio.
En palabras simples, el DNS consiste en servidores - uno o más anfitriones en una red local o pública - que mantienen una enorme anfitriones base de datos. Así que uno puede configurar el resolvedor DNS de su host para que contacte con un servidor DNS específico (que a su vez puede contactar con otros servidores de forma recursiva) cuando necesite resolver un nombre. La dirección IP del servidor DNS ( nameserver
) suele ser proporcionado por el servidor DHCP o puede ser configurado manualmente. Hay un número de DNS públicos populares como 1.1.1.1
(CloudFlare) y 8.8.8.8
(Google) etc. Uno puede configurar el resolver DNS para usar el DNS deseado, por ejemplo, desde la configuración de la GUI o usando /etc/resolv.conf
en Linux, pero Android no ofrece una forma muy sencilla de conseguirlo. Ver ¿Cómo hace Android OS la resolución de nombres DNS? para los detalles.
SERVIDOR LOCAL DE DNS
Así que ahora si quieres hacer ping a un anfitrión local por su nombre, tienes que añadir una entrada a /etc/hosts
en tu teléfono o debería haber algún servidor DNS en tu red local. En realidad ya habría uno. La mayoría de los enrutadores ofrecen los servicios de servidores DHCP/DNS además de actuar como gateways. Incluso cuando creas un hotspot en tu teléfono (y funciona como un simple enrutador), funciona dnsmasq
(hasta Pie) como su servidor DHCP/DNS. Pero para resolver los hosts locales el servidor DNS debe ser un resolver no sólo Forwarder .
DNS DINÁMICO CON DHCP
Lo siguiente es cómo un servidor local de DNS sabría los nombres de todos los hosts de la red. Esto pertenece a la colaboración entre el cliente y el servidor DHCP. La comunicación DHCP ocurre usando diferentes códigos de opción. Código 12 es el que permite al cliente enviar su nombre de host al servidor (o también puede solicitar para un nombre de host) al pedir una dirección IP. Los hosts Windows y Linux están configurados para enviar sus nombres de host al servidor DHCP ( 1 ) . Desde el Android 8 DHCPDISCOVER
y DHCPREQUEST
Los paquetes no incluyen el nombre del host, así que no se puede acceder a los hosts de Android por nombres de host de esta manera. Vea ¿Cómo puedo cambiar el nombre de mi dispositivo Android?
El servidor DHCP reenvía la IP asignada junto con el nombre de host recibido/asignado al servidor DNS para que actualice su base de datos ( 2 , 3 ) . Una cita de un router configuración avanzada :
Registrar los arrendamientos de DHCP en el Resolver DNS le permite registrar los mapas estáticos del DHCP. Esto, a su vez, permite resolver los nombres de host a los que el servidor DHCP ha asignado direcciones IP.
Lo mismo ocurre con dnsmasq
:
Las máquinas que son configuradas por el DHCP tienen sus nombres incluidos automáticamente en el DNS
Una solución alternativa podría ser configurar su servidor DHCP para asignar direcciones IP estáticas y establecer un nombre de host para cada IP. Véase esta respuesta para un poco más de detalles sobre esto.
ALTERNATIVAS DEL DNS
Las consultas del DNS son unicast es decir, un host solicita un servidor DNS para la resolución de nombres llamando a este último explícitamente por su dirección IP. Sin embargo, también es posible llamar a los hosts por su nombre en una red local sin usar anfitriones o un servidor DNS. Esto se hace utilizando DNS multicast (un protocolo de configuración cero) en el que cada anfitrión de la red actúa como cliente y como servidor. Cuando un host envía mDNS
consulta a todos los hosts de la red en la dirección multicast 224.0.0.251
donde <hostname>.local
es el huésped con el nombre hostname
responde con su dirección IP, así que la comunicación comienza ( 4 ) .
Android tiene mDNS incorporado pero sólo funciona si una aplicación hace uso de NSD APIs . Por ejemplo adbd
la fuerza comienza mdns
servicio ( 5 ) para poder acceder fácilmente a un dispositivo Android (por ejemplo. Pi de frambuesa ) del PC. Véase esta respuesta para los detalles.
También hay otras soluciones de resolución de nombres como NIS
y LDAP
/ AD
que se utilizan normalmente en las grandes redes privadas o NetBIOS
utilizado por el intercambio de archivos de Windows. Pero la libra biónica de Android no proporciona un fenómeno como NSS
para priorizar el NIS, LDAP o mDNS sobre el DNS. El resolvedor de Android sólo busca hosts
archivo antes de ir por el DNS ( 6 ) . Así que tienes que ir por uno de los dos.
0 votos
Relacionado: ¿Cómo llegar al ordenador local a través del nombre de la máquina en lugar de la IP?