web-dev-qa-db-ja.com

Busybox ping IPは機能しますが、ホスト名nslookupが「不良アドレス」で失敗します

自分の3.14カーネルをコンパイルしています。 DNSを機能させるために、いくつかの重要なネットワーク機能を省略しているのではないかと心配しています。

ドメイン名を解決できません。 DNSサーバーにpingを実行できます。他のマシンでその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を使用しています。このシステムには共有ライブラリはありません。

14
AllenKll

問題はbusyboxにあります。コンパイル済みバージョンに切り替えても問題はありませんでした。コンパイルオプションを調べる必要があります。ご協力いただきありがとうございます。

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

Libnssを動的にロードする必要があるため、静的にリンクされたglibcプログラム(この場合はbusyboxなど)のDNS機能には既知の問題があります。 uClibcツールチェーンを構築し、busyboxをそれに対してリンクすると、これは解決します。

6
AllenKll

私は同じ問題に出くわしました、そして、busyboxがresolv.confのフォーマットについてうるさいことがわかりました。 nslookupが機能するためには、ネームサーバータグとアドレスの間に1つの空白が必要です。さらに、/ etc/nsswitch.confにはホストのDNSを含める必要があります。

[busyboxマスター(gitハッシュ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
2
sgrefen

同じ問題がありました。私はbuildrootを使用してファイルシステムを構築し、カーネルをコンパイルして、busyboxで追加のパッケージを追加しました。

IPアドレスのみをpingできました。 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

そして、すべてがうまくいきました。

0
UserK

これが同じ問題であるかどうかはわかりませんが、最近、古い内部DNSサーバーシステムをOpenBSD 3.8から5.6にアップグレードし、pingでホストを解決する機能を失いましたが、Hostコマンドは機能していました。すでにある192.168.0.0/16に加えて、namedのmatch-clientsディレクティブに127.0.0.1/8を追加する必要があり、namedを再起動した後、正しく機能し始めました。

0
RedScourge

私は編集して同じ症状を解決しました:/etc/nsswitch.confおよびDNSを次の行に追加します。

hosts:      files dns
0
Burmanese