Por que o nslookup não usa mdns enquanto o ping faz?


9

No dnsmasq.conf:

address=/local/127.0.0.1

No 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

Eu posso usar o nslookup:

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

Name:   www.local
Address: 127.0.0.1

Mas não posso usar ping:

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

Eu uso o tcpdump para capturar lo durante o ping em www.local, sem pacotes, enquanto pacotes como

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

apareceu da interface física.

O que significa que o ping está usando mdns, mas por que o nslookup não usa mdns? Por que o ping não usa o DNS normal quando o mdns não retorna um valor útil?

Obrigado.

Respostas:


8

pinguse o sistema de resolução de nomes da glibc, chamado Name Service Switch. Isso usa o /etc/nsswitch.confarquivo para saber onde procurar para resolver um nome para um IP. A hosts:linha neste arquivo representa uma ordem de preferência para cada serviço. Por exemplo, filesrepresente o /etc/hostsarquivo local , dnsuse o /etc/resolv.confarquivo para entrar em contato com um servidor DNS e mdnsuse mdns.

No entanto, nslookupnão o usa. Ele fala diretamente com o servidor DNS especificado em /etc/resolv.confe, portanto, não pode ser usado mdns.

Mas não posso responder à sua última pergunta. Se você tem tanto mdnse dnsem /etc/nsswitch.conf, mesmo com mdnsprimeiro, ele deve primeiro tentar resolver o nome com mdns, em seguida, se nenhum uso resposta dns.


Obrigado @priernov, também encontrei a resposta da minha última resposta, que é a linha "hosts: arquivos mdns4_minimal [NOTFOUND = return] dns myhostname" no nsswitch.conf, ele retornará se nenhum ip mdns encontrado.
Dspjm 5/03/14

1
Na verdade, o nslookup pode ser persuadido a resolver um endereço local especificando o servidor 224.0.0.251 e a porta 5353: entre no modo interativo nslookup, emita 'server 224.0.0.251', 'set port = 5353' e, em seguida, o nome do host a ser resolvido, por exemplo ' Microknoppix.local '. (. testado em 2 sistemas Debian em Windows 10 nslookup.exe fornecido pela Microsoft não trabalho, o que baixado isc.org/downloads/bind faz)
NameOfTheRose

A propósito, use getent hosts foo.localse você apenas deseja procurar um endereço IP, independentemente de ser mDNS ou DNS. Ao contrário nslookup, o getentcomando usa o nsswitch da GNU C Library, portanto, ele sempre funciona.
precisa saber é o seguinte

3

É muito simples - nslookupé especificamente uma ferramenta DNS - faz parte das ferramentas BIND.

Ele simplesmente não conhece os outros serviços de nomes que as chamadas de biblioteca gethostbynamepodem acessar via NSS porque nslookupnão usam gethostbynameetc.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.