Busybox pinging IP는 작동하지만 호스트 이름 nslookup은 "잘못된 주소"로 인해 실패합니다.

Busybox pinging 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, 정적 연결을 사용하고 있습니다. 이 시스템에는 공유 라이브러리가 없습니다.

답변1

문제는 비지박스에 있습니다. 미리 컴파일된 버전으로 전환했는데 아무런 문제가 없었습니다. 컴파일 옵션을 조사해야 합니다. 당신의 도움을 주셔서 감사합니다.

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

libnss는 동적으로 로드되어야 하기 때문에 정적으로 연결된 glibc 프로그램(예: 이 경우 busybox)에는 DNS 기능에 알려진 문제가 있습니다. uClibc 툴체인을 구축하고 여기에 busybox를 연결하면 이 문제가 해결됩니다.

답변2

/etc/nsswitch.conf다음 줄을 편집하고 DNS를 추가하여 동일한 증상을 해결했습니다.

hosts:      files dns

답변3

나는 같은 문제가 있었고 busybox가 resolv.conf의 형식에 대해 까다롭다는 것이 밝혀졌습니다. nslookup이 제대로 작동하려면 이름 서버 태그와 주소 사이에 정확히 하나의 공백이 있어야 합니다. 또한 /etc/nsswitch.conf에는 호스트의 DNS가 포함되어 있어야 합니다.

[ 비지박스 마스터(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의 경우에는 여전히 그렇습니다.

[resolv.conf의 공백 수를 표시하기 위해 아래 xxd를 사용합니다.]

실패합니다.

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를 사용하여 추가 패키지를 추가합니다.

하나의 IP 주소만 ping할 수 있습니다. 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

모두 괜찮습니다.

관련 정보