В 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
, и т.д.