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

8

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 consigo usar ping:

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

Eu uso o tcpdump para capturar lo enquanto faç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 na 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 dns normais quando o mdns não retorna falues úteis?

Obrigado.

    
por dspjm 05.03.2014 / 13:00

2 respostas

6

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

No entanto, nslookup não o usa. Ele fala diretamente com o servidor DNS especificado em /etc/resolv.conf e, portanto, não pode usar mdns .

Mas não posso responder sua última pergunta. Se você tem os dois mdns e dns em /etc/nsswitch.conf , mesmo com mdns primeiro, ele deve primeiro tentar resolver o nome com mdns , então, se não houver resposta, use dns .

    
por 05.03.2014 / 15:09
3

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

Ele simplesmente não sabe sobre os outros serviços de nomes que a biblioteca chama como gethostbyname pode acessar via NSS porque nslookup não usa gethostbyname , etc.

    
por 06.03.2014 / 17:42