4 votos

¿Cómo hacer ping a un host de red local por su nombre de host?

Recientemente restauré mi teléfono y ahora no puedo hacer ping a una máquina por el nombre de host. Hacer ping por IP funciona.

Tengo una máquina, digamos que se llama NAS. Desde mi enrutador y PC, ping NAS encuentra la máquina. Sin embargo, desde mi teléfono Android, ping NAS devuelve ping: host desconocido NAS.

Tengo acceso root, así que fui a /etc/hosts y añadí 192.168.1.### NAS y fue capaz de resolver NAS a una IP, pero ¿cuál es la solución para poder hacer ping a todas las máquinas por nombre de host?

En la configuración de Wifi en el teléfono, DNS muestra 3 entradas: 8.8.8.8, 8.8.4.4, 192.168.1.1.

3voto

Jack Wade Puntos 231

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:

enter image description here

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

Por qué esta no es la respuesta aceptada simplemente está más allá de mí

1 votos

@Lorenzo porque la mayoría de las personas vienen aquí para resolver sus problemas, no para contribuir a la comunidad

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X