Busybox ping IP 有效,但主机名 nslookup 失败并显示“地址错误”

Busybox ping IP 有效,但主机名 nslookup 失败并显示“地址错误”

我正在编译自己的 3.14 内核。我担心我可能遗漏了一些重要的网络功能来让 DNS 正常工作。

我无法解析域名。我可以 ping 我的 DNS 服务器。我可以在其他机器上使用该 DNS 进行解析,因此我知道它不是服务器。

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

我遗漏了什么想法吗?这是我的配置:http://pastebin.com/vt4vGTgJ

编辑:

如果不是内核,我可能会缺少什么?我正在使用 busybox,静态链接。该系统中没有共享库。

答案1

问题出在 busybox 上。我切换到预编译版本并且没有出现问题。我需要研究它的编译选项。感谢您的帮助。

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

静态链接的 glibc 程序(如本例中的 busybox)中的 DNS 功能存在已知问题,因为必须动态加载 libnss。构建 uClibc 工具链并将 busybox 链接到该工具链可以解决此问题。

答案2

/etc/nsswitch.conf我通过编辑:并将 DNS 添加到以下行解决了相同的症状:

hosts:      files dns

答案3

我遇到了同样的问题,结果发现 busybox 对 resolv.conf 的格式很挑剔。名称服务器标记和地址之间必须正好有一个空格,nslookup 才能正常工作。此外,/etc/nsswitch.conf 必须包含主机的 dns。

[ 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 

是的,这个问题很老了,但是当前的 busybox 仍然是这样的。

[我在下面使用 xxd 显示 resolv.conf 中的空格数]

这失败了:

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'

这有效:

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

答案4

我有同样的问题。我使用 buildroot 来构建文件系统、编译内核并使用 busybox 添加额外的包。

我只能 ping 通一个 IP 地址。 ping 命令返回 url:bad address error。然后我改变了resolv.conf文件。

sudo vim /etc/resolv.conf

nameserver gateway_ip_address
nameserver 8.8.8.8
nameserver 8.8.4.4

一切都很好。

相关内容