Чому nslookup не використовує mdns під час ping do?


9

У dnsmasq.conf:

address=/local/127.0.0.1

У resolutionv.conf:

# Generated by NetworkManager
domain example.com
search example.com
nameserver 127.0.0.1
nameserver 10.66.127.17
nameserver 10.68.5.26

Я можу використовувати nslookup:

# nslookup www.local
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   www.local
Address: 127.0.0.1

Але я не можу використовувати ping:

# ping www.local
ping: unknown host www.local

Я використовую tcpdump для зйомки lo під час пінг -нгу www.local, відсутність пакетів, тоді як пакети, як

# tcpdump -i em1 -n | grep local

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes
20:14:38.189335 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:39.190700 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:41.192979 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)

з'явився з фізичного інтерфейсу.

Що означає, що ping використовує mdns, але чому nslookup не використовує mdns? Чому ping не використовуватиме звичайні dns, коли mdns не повертає корисну помилку?

Дякую.

Відповіді:


8

pingвикористовувати систему роздільної здатності імені glibc, що називається Switch Service Switch. Це використовує /etc/nsswitch.confфайл, щоб знати, де шукати, щоб вирішити ім'я для IP-адреси. hosts:Рядок в цьому файлі представляє порядок переваги для кожної служби. Для прикладу filesпредставляйте локальний /etc/hostsфайл, dnsвикористовує /etc/resolv.confфайл для зв’язку з DNS-сервером та mdnsвикористовує mdns.

Однак nslookupне використовується. Він спілкується безпосередньо з DNS-сервером, зазначеним у, /etc/resolv.confі тому не може використовувати його mdns.

Але я не можу відповісти на ваше останнє запитання. Якщо у вас є mdnsі dnsв /etc/nsswitch.conf, і навіть в mdnsпершу чергу, спершу слід спробувати вирішити ім'я mdns, а потім, якщо відповідь не використовується dns.


Дякую @priernov, я знайшов відповідь і останньої своєї відповіді - це рядок "господарі: файли mdns4_minimal [NOTFOUND = return] dns myhostname" в nsswitch.conf, він повернеться, якщо mdns ip не знайдено.
dspjm

1
Насправді nslookup можна переконати вирішити .local адресу, вказавши сервер 224.0.0.251 та порт 5353: введіть інтерактивний режим nslookup, видайте "сервер 224.0.0.251", "встановити порт = 5353", а потім ім'я хоста має бути вирішено, наприклад " Microknoppix.local '. (тестовано на двох системах debian. У Windows 10 nslookup.exe, що постачається Microsoft, не працює; завантажена з isc.org/downloads/bind )
NameOfTheRose

До речі, використовуйте, getent hosts foo.localякщо ви просто хочете шукати IP-адресу незалежно від того, це mDNS чи DNS. На відміну від цього nslookup, getentкоманда використовує nsswitch бібліотеки GNU C, тому вона завжди працює.
hackerb9

3

Це дуже просто - nslookupце спеціально інструмент DNS - це частина BIND інструментів.

Він просто не знає про інші сервіси імен, до яких дзвінки з бібліотеки gethostbynameможуть отримати доступ через NSS, оскільки nslookupвони не використовують gethostbynameтощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.