Busybox ping IP działa, ale nazwa hosta nslookup kończy się niepowodzeniem z „złym adresem”


14

Kompiluję własne jądro 3.14. Obawiam się, że mogłem pominąć jakąś ważną funkcję sieci, aby DNS działał.

Nie mogę rozwiązać nazw domen. Mogę pingować mój serwer DNS. Mogę rozwiązać, używając tego DNS na innych komputerach, więc wiem, że to nie serwer.

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

Jakieś pomysły, które pominąłem? oto moja konfiguracja: http://pastebin.com/vt4vGTgJ

EDYCJA :

Jeśli to nie jest jądro, czego mógłbym brakować? Używam busyboksa, połączonego statycznie. w tym systemie nie ma bibliotek współdzielonych.


Czy masz skonfigurowaną zaporę ogniową? Jeśli tak, to czy blokujesz port 53 UDP / TCP?
Jenny D.

Bez zapory, bez bloku na porcie 53. Mogę uzyskać dostęp do DNS z innego komputera w tej samej podsieci.
AllenKll

O ile wiem, nie można po prostu wyłączyć funkcji DNS za pomocą opcji .config z jądra.
Bonsi Scott

1
Czy na pewno Twój serwer DNS @ 192.168.13.5 zezwala na zapytania rekurencyjne? Na przykład, jeśli dig @192.168.13.5 www.google.comotrzymujesz dodatkowe informacje? Czy możesz wykonywać rekurencyjne zapytania na serwerze DNS 192.168.13.5 z innych komputerów?
Chipster

1
twoje jądro wydaje się być OK, ale rozpoznawanie DNS nie działa. Czy uzyskałeś adres IP serwera nazw z DHCP? czy ustawiona jest trasa? wypróbuj inny serwer nazw, np nameserver 8.8.8.8.

Odpowiedzi:


6

Problem dotyczy busyboksa. Przełączyłem się na wersję wstępnie skompilowaną i nie miałem problemów. Muszę z nim przeanalizować opcje kompilacji. Dzięki za pomoc.

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

Znane są problemy z funkcjonalnością DNS w statycznie połączonych programach glibc (takich jak w tym przypadku busybox), ponieważ libnss muszą być ładowane dynamicznie. Rozwiązaniem byłoby zbudowanie łańcucha narzędzi uClibc i powiązanie busyboksa z tym.


Czy faktycznie skompilowałeś busybox przeciwko uClibc, aby zweryfikować tę odpowiedź, czy też wydawało się to najbardziej prawdopodobne?
Tim

Nie testowałem tego. Wcześniejsza wersja działała na moje problemy.
AllenKll

2

Natrafiłem na ten sam problem i okazuje się, że busybox jest wybredny co do formatu resolv.conf. Aby nslookup działał, musi być dokładnie jedna pusta przestrzeń między tagiem nameserver a adresem. Ponadto /etc/nsswitch.conf musi zawierać dns dla hosta.

[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 

Tak, pytanie jest stare, ale bieżący busybox nadal działa w ten sposób.

[Użyłem xxd poniżej, aby pokazać liczbę pustych miejsc w resolv.conf]

To się nie udaje:

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'

i to działa:

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

Nie jestem pewien, czy to ten sam problem, który miałem, czy nie, ale niedawno zaktualizowałem i stary wewnętrzny system serwera DNS z OpenBSD 3.8 do 5.6, i straciłem możliwość rozpoznawania hostów za pomocą ping, ale polecenie hosta działało. Okazało się, że muszę dodać 127.0.0.1/8 do dyrektywy match-klientów w nazwie oprócz 192.168.0.0/16, które już tam miałem, a potem zaczęło działać poprawnie po ponownym uruchomieniu o nazwie.


0

Miałem ten sam problem. Użyłem buildroot do zbudowania systemu plików, kompilacji jądra i dodania dodatkowych pakietów za pomocą busybox.

Mogłem tylko pingować adres IP. Z url polecenie ping wrócił: bad address error. Potem zmieniłem resolv.confplik.

sudo vim /etc/resolv.conf

nameserver gateway_ip_address
nameserver 8.8.8.8
nameserver 8.8.4.4

I wszystko działało dobrze.


1
Wydaje mi się, że to nie rozwiązuje problemu. Jak wspomniano OP, wydaje się, że przyczyną jest libnss, które nie działają, gdy są połączone statycznie. Kompilowanie busyboksa z uclibc (i udhcpc) ​​wydaje mi się rozwiązaniem problemu.
Attila O.

0

Rozwiązałem te same objawy, edytując: /etc/nsswitch.confi dodając DNS do następującego wiersza:

hosts:      files dns

-1

sudo vim /etc/resolv.conf aby edytować resolv.conf, upewnij się, że adresy serwerów nazw (a także słowa kluczowego „serwer nazw”) są oddzielone pojedynczą spacją, a nie przecinkiem, jak poniżej:

nameserver 8.8.8.8 8.8.4.4
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.