[unix] Busybox ping IP가 작동하지만 호스트 이름 nslookup이“잘못된 주소”로 실패합니다

내 자신의 3.14 커널을 컴파일하고 있습니다. DNS를 작동시키기 위해 중요한 네트워킹 기능을 생략했을 수도 있습니다.

도메인 이름을 확인할 수 없습니다. 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를 사용하고 있습니다. 이 시스템에는 공유 라이브러리가 없습니다.



답변

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

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

libns를 동적으로로드해야하기 때문에 정적으로 링크 된 glibc 프로그램 (이 경우 busybox와 같은)에는 DNS 기능에 대한 알려진 문제가 있습니다. uClibc 툴체인을 구축하고 busybox를 연결하면 문제가 해결됩니다.


답변

동일한 문제가 발생하여 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

a

답변

이것이 내가 가지고 있던 것과 같은 문제인지 확실하지 않지만 최근에 내부 DNS 서버 시스템을 OpenBSD 3.8에서 5.6으로 업그레이드하고 ping으로 호스트를 확인할 수 없었지만 host 명령이 작동했습니다. 내가 이미 가지고있는 192.168.0.0/16 외에도 named-clients 지시문에 127.0.0.1/8을 추가해야한다는 것이 밝혀졌으며 named를 다시 시작한 후에 제대로 작동하기 시작했습니다.


답변

나는 같은 문제가 있었다. buildroot를 사용하여 파일 시스템을 빌드하고 커널을 컴파일하고 busybox로 패키지를 추가했습니다.

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

그리고 모든 것이 잘 작동했습니다.


답변

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

hosts:      files dns


답변

sudo vim /etc/resolv.conf resolv.conf를 편집하려면 다음과 같이 이름 서버 주소 (및 키워드 ‘nameserver’)가 쉼표가 아닌 단일 공백으로 구분되어야합니다.

nameserver 8.8.8.8 8.8.4.4


답변