Назад | Перейти на главную страницу

Почему nslookup не использует mdns, а ping делает?

В dnsmasq.conf:

address=/local/127.0.0.1

В resolv.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 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 не возвращает полезное значение?

Спасибо.

ping используйте систему разрешения имен glibc, называемую переключателем службы имен. Это использует /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.

Все очень просто - nslookup является конкретно инструмент DNS - это часть инструментов BIND.

Он просто не знает о других службах имен, которые вызывает библиотека, например gethostbyname может получить доступ через NSS, потому что nslookup не использует gethostbyname, и т.д.