IP-адрес Busybox ping работает, но имя хоста nslookup завершается неудачно с «неправильным адресом»

14

Я собираю свое собственное ядро ​​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, статически связанный. в этой системе нет общих библиотек.

AllenKll
источник
У вас настроен брандмауэр? Если это так, вы блокируете порт 53 UDP / TCP?
Дженни Д
Нет брандмауэра, нет блока на порту 53. Я могу получить доступ к DNS с другого компьютера в той же подсети.
AllenKll
Насколько я знаю, вы не можете просто отключить функцию DNS с помощью .config-options из вашего ядра.
Бонси Скотт
1
Вы уверены, что ваш DNS-сервер @ 192.168.13.5 разрешает рекурсивные запросы? Например, если dig @192.168.13.5 www.google.comвы получаете дополнительную информацию? Можете ли вы выполнить рекурсивные запросы к вашему DNS-серверу 192.168.13.5 с других компьютеров?
Чипстер
1
Кажется, ваше ядро ​​в порядке, но разрешение вашего DNS не работает. Вы получили IP-адрес сервера имен от DHCP? маршрут установлен? попробуйте разные сервера имен есть nameserver 8.8.8.8.

Ответы:

6

Проблема с занятым боксом. Я перешел на предварительно скомпилированную версию и не было проблем. Мне нужно изучить параметры компиляции с ним. Спасибо за вашу помощь.

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

Известны проблемы с функциональностью DNS в статически связанных программах glibc (в данном случае, например, busybox), поскольку libnss должна загружаться динамически. Построение цепочки инструментов uClibc и связывание busybox с этим решит эту проблему.

AllenKll
источник
Вы действительно скомпилировали busybox против uClibc, чтобы проверить этот ответ, или он казался наиболее правдоподобным?
Тим
Я не проверял это. Предварительно свернутая версия работала для моих проблем.
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
sgrefen
источник
0

Я не уверен, что это та же проблема, что у меня была или нет, но я недавно обновил и старую систему внутреннего DNS-сервера с OpenBSD 3.8 до 5.6, и я потерял способность разрешать хосты с помощью ping, но команда host работала. Выяснилось, что мне пришлось добавить 127.0.0.1/8 в директиву match-clients в named в дополнение к 192.168.0.0/16, который у меня уже был, и затем он начал работать должным образом после перезапуска named.

RedScourge
источник
0

У меня такая же проблема. Я использовал buildroot для сборки файловой системы, для компиляции ядра и для добавления дополнительных пакетов с busybox.

Я был в состоянии только пинговать IP-адрес. С 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

И все работало нормально.

UserK
источник
1
Это, кажется, не решает проблему для меня. Как упоминалось в OP, похоже, что libnss не работает, когда он статически связан. Компиляция busybox с помощью uclibc (и udhcpc), кажется, решает проблему для меня.
Аттила О.
0

Я решил те же симптомы, отредактировав: /etc/nsswitch.confи добавив DNS в следующую строку:

hosts:      files dns
Burmanese
источник
-1

sudo vim /etc/resolv.conf чтобы отредактировать resolv.conf, убедитесь, что адреса серверов имен (а также ключевое слово 'nameserver') разделены одним пробелом, а не запятой, как показано ниже:

nameserver 8.8.8.8 8.8.4.4
Стив Шен
источник