Busybox ping IP funciona, pero el nombre de host nslookup falla con "dirección incorrecta"

14

Estoy compilando mi propio kernel 3.14. Temo haber dejado de lado alguna característica importante de la red para que DNS funcione.

No puedo resolver nombres de dominio. Puedo hacer ping a mi servidor DNS. Puedo resolver el uso de ese DNS en otras máquinas, así que sé que no es el servidor.

~ # cat /etc/resolv.conf
nameserver 192.168.13.5

~ # nslookup google.com
Server:    192.168.13.5
Address 1: 192.168.13.5

nslookup: can't resolve 'google.com'

~ # ping -c 1 google.com
ping: bad address 'google.com'

~ # ping -c 1 192.168.13.5 
PING 192.168.13.5 (192.168.13.5): 56 data bytes
64 bytes from 192.168.13.5: seq=0 ttl=128 time=0.382 ms

--- 192.168.13.5 ping ststistics ---
1 packets transmitted, 1 packets recieved, 0% packet loss
reound-trip min/avg/max = 0.382/0.382/0.382 ms

¿Alguna idea de lo que dejé fuera? Aquí está mi configuración: http://pastebin.com/vt4vGTgJ

EDITAR :

Si no es el núcleo, ¿qué me podría perder? Estoy usando busybox, estáticamente vinculado. No hay bibliotecas compartidas en este sistema.

AllenKll
fuente
¿Tienes algún firewall configurado? Si es así, ¿bloquea el puerto 53 UDP / TCP?
Jenny D
Sin firewall, sin bloqueo en el puerto 53. Puedo acceder al DNS desde otra máquina en la misma subred.
AllenKll
Hasta donde sé, no puede simplemente deshabilitar la funcionalidad DNS mediante .config-options desde su núcleo.
Bonsi Scott
1
¿Está seguro de que su servidor DNS @ 192.168.13.5 permite consultas recursivas? Por ejemplo, si dig @192.168.13.5 www.google.comobtienes información adicional? ¿Puede realizar consultas recursivas en su servidor DNS 192.168.13.5 desde otras máquinas?
Chipster
1
su núcleo parece estar bien, pero su resolución de DNS no funciona. ¿Obtuvo la IP del servidor de nombres de DHCP? ¿está establecida la ruta? pruebe con un servidor de nombres diferente, es decir nameserver 8.8.8.8.

Respuestas:

6

El problema es con busybox. Cambié a una versión precompilada y no tuve problemas. Necesito analizar las opciones de compilación con él. Gracias por tu ayuda.

https://gist.github.com/vsergeev/2391575 :

Existen problemas conocidos con la funcionalidad de DNS en programas glibc vinculados estáticamente (como busybox en este caso), porque las libnss deben cargarse dinámicamente. Construir una cadena de herramientas uClibc y vincular busybox contra eso resolvería esto.

AllenKll
fuente
¿Realmente compiló busybox contra uClibc para verificar esta respuesta, o simplemente pareció la más plausible?
Tim
No probé esto. La versión precomolada funcionó para mis problemas.
AllenKll
2

Me encontré con el mismo problema y resulta que busybox es exigente con el formato para resolv.conf. Debe haber exactamente un espacio en blanco entre la etiqueta del servidor de nombres y la dirección para que nslookup funcione. Además /etc/nsswitch.conf tiene que incluir dns para el host.

[busybox master (git hash 349d72c19) sysroot-glibc-linaro-2.25-2018.05-arm-linux-gnueabihf]

root@4000000a:~# cat /etc/nsswitch.conf 
passwd:    files compat
shadow:    files compat
hosts:    files dns compat 

Sí, la pregunta es antigua, pero el busybox actual todavía se comporta de esta manera.

[Usé xxd a continuación para mostrar el número de espacios en blanco en resolv.conf]

Esto falla:

root@4000000a:~# xxd /etc/resolv.conf
00000000: 6e61 6d65 7365 7276 6572 2020 382e 382e  nameserver  8.8.
00000010: 382e 380a                                8.8.
root@4000000a:~# nslookup  www.cnn.com 
nslookup: bad address ' 8.8.8.8'

y esto funciona:

root@4000000a:~# xxd /etc/resolv.conf
00000000: 6e61 6d65 7365 7276 6572 2038 2e38 2e38  nameserver 8.8.8
00000010: 2e38 0a                                  .8.
root@4000000a:~# nslookup  www.cnn.com                
Server:     8.8.8.8
Address:    8.8.8.8:53

Non-authoritative answer:
www.cnn.com canonical name = turner-tls.map.fastly.net
Name:   turner-tls.map.fastly.net
Address: 151.101.1.67
Name:   turner-tls.map.fastly.net
Address: 151.101.65.67
Name:   turner-tls.map.fastly.net
Address: 151.101.129.67
Name:   turner-tls.map.fastly.net
Address: 151.101.193.67

Non-authoritative answer:
www.cnn.com canonical name = turner-tls.map.fastly.net
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42::323
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42:200::323
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42:400::323
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42:600::323
sgrefen
fuente
0

No estoy seguro de si este es el mismo problema que tuve o no, pero recientemente actualicé un viejo sistema de servidor DNS interno de OpenBSD 3.8 a 5.6, y perdí la capacidad de resolver hosts con ping, pero el comando de host funcionaba. Resultó que tuve que agregar 127.0.0.1/8 a la directiva match-clients en named además del 192.168.0.0/16 que ya tenía allí, y luego comenzó a funcionar correctamente después de reiniciar named.

RedScourge
fuente
0

Yo tuve el mismo problema. He usado buildroot para construir el sistema de archivos, compilar el kernel y agregar paquetes adicionales con busybox.

Solo pude hacer ping a una dirección IP. Con url el comando ping regresó: bad address error. Luego cambié el resolv.confarchivo.

sudo vim /etc/resolv.conf

nameserver gateway_ip_address
nameserver 8.8.8.8
nameserver 8.8.4.4

Y todo funcionó bien.

UserK
fuente
1
Eso no parece resolver el problema para mí. Como OP mencionó, parece que las libnss no funcionan cuando están vinculadas estáticamente. Compilar busybox con uclibc (y udhcpc) ​​parece resolver el problema por mí.
Atila O.
0

Resolví los mismos síntomas editando: /etc/nsswitch.confy agregando DNS a la siguiente línea:

hosts:      files dns
Birmano
fuente
-1

sudo vim /etc/resolv.conf para editar resolv.conf, asegúrese de que las direcciones del servidor de nombres (así como la palabra clave 'nameserver') estén separadas por un solo espacio, no una coma, como a continuación:

nameserver 8.8.8.8 8.8.4.4
Steve Shen
fuente