Busybox ping IP fonctionne, mais le nom d'hôte nslookup échoue avec une «mauvaise adresse»

14

Je compile mon propre noyau 3.14. Je crains d'avoir omis une fonctionnalité de réseau importante pour faire fonctionner DNS.

Je ne parviens pas à résoudre les noms de domaine. Je peux envoyer une requête ping à mon serveur DNS. Je peux résoudre l'utilisation de ce DNS sur d'autres machines, donc je sais que ce n'est pas le serveur.

~ # 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

Des idées sur ce que j'ai oublié? voici ma config: http://pastebin.com/vt4vGTgJ

MODIFIER :

Si ce n'est pas le noyau, que pourrais-je manquer? J'utilise busybox, lié statiquement. il n'y a pas de bibliothèques partagées dans ce système.

AllenKll
la source
Avez-vous un pare-feu configuré? Si oui, bloquez-vous le port 53 UDP / TCP?
Jenny D
Pas de pare-feu, pas de bloc sur le port 53. Je peux accéder au DNS depuis une autre machine sur le même sous-réseau.
AllenKll
Pour autant que je sache, vous ne pouvez pas simplement désactiver la fonctionnalité DNS par .config-options de votre noyau.
Bonsi Scott
1
Êtes-vous sûr que votre serveur DNS @ 192.168.13.5 autorise les requêtes récursives? Par exemple, si dig @192.168.13.5 www.google.comvous obtenez des informations supplémentaires? Pouvez-vous effectuer des requêtes récursives sur votre serveur DNS 192.168.13.5 à partir d'autres machines?
Chipster
1
votre noyau semble être OK, mais votre résolution DNS ne fonctionne pas. Avez-vous obtenu l'IP du serveur de noms auprès de DHCP? l'itinéraire est-il défini? essayez un autre serveur de noms ie nameserver 8.8.8.8.

Réponses:

6

Le problème est avec busybox. Je suis passé à une version précompilée et je n'ai eu aucun problème. J'ai besoin d'examiner les options de compilation avec. Merci de votre aide.

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

Il y a des problèmes connus avec la fonctionnalité DNS dans les programmes glibc liés statiquement (comme busybox dans ce cas), car libnss doit être chargé dynamiquement. La création d'une chaîne d'outils uClibc et la liaison de busybox avec cela résoudrait ce problème.

AllenKll
la source
Avez-vous réellement compilé busybox contre uClibc pour vérifier cette réponse, ou est-ce que cela vous a semblé le plus plausible?
Tim
Je n'ai pas testé cela. La version précomposée a fonctionné pour mes problèmes.
AllenKll
2

J'ai rencontré le même problème et il se trouve que busybox est difficile sur le format de resolv.conf. Il doit y avoir exactement un espace vide entre la balise nameserver et l'adresse pour que nslookup fonctionne. De plus, /etc/nsswitch.conf doit inclure le DNS pour l'hôte.

[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 

Oui, la question est ancienne, mais la boîte occupée actuelle se comporte toujours de cette façon.

[J'ai utilisé xxd ci-dessous pour afficher le nombre de blancs dans resolv.conf]

Cela échoue:

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'

et cela fonctionne:

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
la source
0

Je ne sais pas si c'est le même problème que j'ai eu ou non, mais j'ai récemment mis à niveau et l'ancien système de serveur DNS interne d'OpenBSD 3.8 à 5.6, et j'ai perdu la capacité de résoudre les hôtes avec ping, mais la commande hôte fonctionnait. Il s'est avéré que j'ai dû ajouter 127.0.0.1/8 à la directive match-clients nommée en plus du 192.168.0.0/16 que j'avais déjà là-bas, puis cela a commencé à fonctionner correctement après le redémarrage de named.

RedScourge
la source
0

J'ai eu le même problème. J'ai utilisé buildroot pour construire le système de fichiers, compiler le noyau et ajouter des packages supplémentaires avec busybox.

Je n'ai pu cingler qu'une adresse IP. Avec url la commande ping retourné: bad address error. Ensuite, j'ai changé le resolv.conffichier.

sudo vim /etc/resolv.conf

nameserver gateway_ip_address
nameserver 8.8.8.8
nameserver 8.8.4.4

Et tout a bien fonctionné.

UserK
la source
1
Cela ne semble pas résoudre le problème pour moi. Comme OP l'a mentionné, il semble que libnss ne fonctionne pas lorsqu'il est lié statiquement. La compilation de busybox avec uclibc (et udhcpc) ​​semble résoudre le problème pour moi.
Attila O.
0

J'ai résolu les mêmes problèmes en modifiant: /etc/nsswitch.confet en ajoutant DNS à la ligne suivante:

hosts:      files dns
Burmanais
la source
-1

sudo vim /etc/resolv.conf pour éditer resolv.conf, assurez-vous que les adresses des serveurs de noms (ainsi que le mot clé 'nameserver') sont séparés par un seul espace, pas une virgule, comme ci-dessous:

nameserver 8.8.8.8 8.8.4.4
Steve Shen
la source