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


14

我正在编译自己的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,静态链接。该系统中没有共享库。


您是否配置了防火墙?如果是这样,您是否阻止端口53 UDP / TCP?
珍妮·D

没有防火墙,在端口53上没有阻塞。我可以从同一子网上的另一台计算机访问DNS。
AllenKll 2014年

据我所知,您不能仅通过内核中的.config-options禁用DNS功能。
Bonsi Scott

1
您确定您的DNS服务器@ 192.168.13.5允许递归查询吗?例如,如果您dig @192.168.13.5 www.google.com得到任何其他信息?您可以从其他计算机对DNS服务器192.168.13.5执行递归查询吗?
Chipster 2014年

1
您的内核似乎还可以,但是您的DNS解析不起作用。您是否从DHCP获得了名称服务器IP?设定路线了吗?尝试使用其他名称服务器,例如nameserver 8.8.8.8

Answers:


6

问题出在busybox。我切换到预编译版本,没有问题。我需要用它来研究编译选项。谢谢你的帮助。

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

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


您是否确实针对uClibc编译了busybox以验证此答案,或者它似乎是最合理的答案?
蒂姆(Tim)

我没有测试。预卷版本适用于我的问题。
AllenKll

2

我遇到了同样的问题,结果发现busybox对resolv.conf的格式很挑剔。为了使nslookup正常工作,nameserver标记和地址之间必须完全有一个空格。另外,/ 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

0

我不确定这是否是我遇到的相同问题,但是最近我将内部DNS服务器系统从OpenBSD 3.8升级到了5.6,并且失去了使用ping解析主机的能力,但是host命令正在运行。事实证明,除了我已经拥有的192.168.0.0/16之外,我还必须在name中的match-clients指令中添加127.0.0.1/8,然后在重新启动named之后它开始正常工作。


0

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

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

sudo vim /etc/resolv.conf

nameserver gateway_ip_address
nameserver 8.8.8.8
nameserver 8.8.4.4

而且一切正常。


1
这似乎并不能解决我的问题。正如OP所述,静态链接似乎无法解决libnss的问题。用uclibc(和udhcpc)编译busybox似乎为我解决了这个问题。
Attila O.

0

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

hosts:      files dns

-1

sudo vim /etc/resolv.conf 要编辑resolv.conf,请确保名称服务器地址(以及关键字“名称服务器”)用单个空格而不是逗号分隔,如下所示:

nameserver 8.8.8.8 8.8.4.4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.