O IP de ping do Busybox funciona, mas o nome do host nslookup falha com "endereço incorreto"

14

Estou compilando meu próprio kernel 3.14. Receio ter deixado de lado algum recurso importante de rede para fazer o DNS funcionar.

Não consigo resolver nomes de domínio. Eu posso executar ping no meu servidor DNS. Posso resolver usando esse DNS em outras máquinas, então sei que não é o 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

Alguma idéia do que eu deixei de fora? aqui está a minha configuração: http://pastebin.com/vt4vGTgJ

EDIT :

Se não for o kernel, o que eu poderia estar perdendo? Estou usando o busybox, vinculado estaticamente. não há bibliotecas compartilhadas neste sistema.

AllenKll
fonte
Você tem algum firewall configurado? Em caso afirmativo, você bloqueia a porta 53 UDP / TCP?
21714 Jenny D
Sem firewall, sem bloqueio na porta 53. Posso acessar o DNS de outra máquina na mesma sub-rede.
precisa saber é o seguinte
Tanto quanto eu sei, você não pode simplesmente desabilitar a funcionalidade DNS por .config-options do seu kernel.
Bonsi Scott
1
Tem certeza de que seu servidor DNS @ 192.168.13.5 está permitindo consultas recursivas? Por exemplo, se dig @192.168.13.5 www.google.comvocê receber informações adicionais? Você pode executar consultas recursivas no servidor DNS 192.168.13.5 de outras máquinas?
Chipster
1
seu kernel parece estar OK, mas sua resolução de DNS não funciona. Você obteve o IP do servidor de nomes no DHCP? está definido o percurso? tente um servidor de nomes diferente, ou seja nameserver 8.8.8.8.

Respostas:

6

O problema está no busybox. Mudei para uma versão pré-compilada e não tive problemas. Eu preciso olhar para as opções de compilação com ele. Obrigado pela ajuda.

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

Existem problemas conhecidos com a funcionalidade DNS nos programas glibc vinculados estaticamente (como o busybox neste caso), porque o libnss deve ser carregado dinamicamente. Construir uma cadeia de ferramentas uClibc e vincular o busybox a isso resolveria isso.

AllenKll
fonte
Você realmente compilou o busybox no uClibc para verificar esta resposta ou parecia a mais plausível?
Tim
Eu não testei isso. A versão pré-montada funcionou para os meus problemas.
AllenKll
2

Corri para o mesmo problema e verifica-se que o busybox é exigente quanto ao formato do resolv.conf. Deve haver exatamente um espaço em branco entre a tag do servidor de nomes e o endereço para o nslookup funcionar. Além disso, o /etc/nsswitch.conf deve incluir o DNS para o 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 

Sim, a pergunta é antiga, mas o busybox atual ainda se comporta dessa maneira.

[Usei o xxd abaixo para mostrar o número de espaços em branco no resolv.conf]

Isso falha:

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'

e isso 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
fonte
0

Não tenho certeza se esse é o mesmo problema que tive ou não, mas recentemente atualizei e antigo sistema de servidor DNS interno do OpenBSD 3.8 para 5.6 e perdi a capacidade de resolver hosts com ping, mas o comando host estava funcionando. Acontece que eu tive que adicionar 127.0.0.1/8 à diretiva match-clients em named, além dos 192.168.0.0/16 que eu já tinha lá e, em seguida, ele começou a funcionar corretamente depois de reiniciar o named.

RedScourge
fonte
0

Eu tive o mesmo problema. Eu usei o buildroot para construir o sistema de arquivos, compilar o kernel e adicionar pacotes extras com o busybox.

Eu só consegui executar ping em um endereço IP. Com url o comando ping retornado: bad address error. Então eu mudei o resolv.confarquivo.

sudo vim /etc/resolv.conf

nameserver gateway_ip_address
nameserver 8.8.8.8
nameserver 8.8.4.4

E tudo funcionou bem.

UserK
fonte
1
Isso não parece resolver o problema para mim. Como o OP mencionou, parece que a libnss não funciona quando estática. Compilar o busybox com uclibc (e udhcpc) ​​parece resolver o problema para mim.
Attila O.
0

Resolvi os mesmos sintomas editando: /etc/nsswitch.confe adicionando DNS à seguinte linha:

hosts:      files dns
Birmanês
fonte
-1

sudo vim /etc/resolv.conf para editar o resolv.conf, verifique se os endereços do servidor de nomes (assim como a palavra-chave 'servidor de nomes') estão separados por um único espaço, não por vírgula, como abaixo:

nameserver 8.8.8.8 8.8.4.4
Steve Shen
fonte