Qual é a diferença entre `dig` e` host` ao consultar um servidor de nomes específico?

11

Eu estava usando este comando para verificar se configuraria as coisas corretamente com um provedor DNS:

host hostname.example.com ns1.example-nameserver.com

Tanto quanto posso dizer, isso pede ns1.example-nameserver.compara procurar hostname.example.come relata a resposta. Eu estava recebendo uma resposta de host não encontrada, então pensei que tinha feito errado. No entanto, sem especificar o nome do servidor (permitindo assim o nome do servidor do meu ISP para procurá-lo) eu tenho a resposta correta ( hostnamese um CNAMEse importa). Não consegui entender isso, então procurei e encontrei o digcomando:

dig @ns1.example-nameserver.com hostname.example.com

Tanto quanto posso dizer, isso faz o mesmo que o hostcomando - pede a um servidor de nomes específico para procurar um host. Portanto, concluo que eles devem fazê-lo de maneira diferente e que os servidores de nomes em cache devem usar o mesmo método que dig.

Minha conclusão é certa ou errada, se estiver certa:

Qual é a diferença entre esses dois métodos de pesquisa?

Se estiver errado:

Quais são os meus mal-entendidos sobre o DNS e os comandos hoste digque me levaram a essa conclusão?

Exemplo de saída:

$ host cardiff.tzmchapters.org ns1.livedns.co.uk
Using domain server:
Name: ns1.livedns.co.uk
Address: 213.171.192.250#53
Aliases: 

Host cardiff.tzmchapters.org not found: 3(NXDOMAIN)

$ dig @ns1.livedns.co.uk cardiff.tzmchapters.org

; <<>> DiG 9.8.3-P1 <<>> @ns1.livedns.co.uk cardiff.tzmchapters.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23620
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;cardiff.tzmchapters.org.   IN  A

;; ANSWER SECTION:
cardiff.tzmchapters.org. 3600   IN  CNAME   ghs.google.com.

;; AUTHORITY SECTION:
google.com.     3600    IN  SOA ns1.livedns.co.uk. admin.google.com. 1354213742 10800 3600 604800 3600

;; Query time: 27 msec
;; SERVER: 213.171.192.250#53(213.171.192.250)
;; WHEN: Mon Apr 22 23:47:05 2013
;; MSG SIZE  rcvd: 128
jhabbott
fonte
os dois comandos devem funcionar da mesma maneira neste caso. Você pode mostrar a saída completa de cada comando?
Renan
Observe como ambos dige hostrelate NXDOMAIN. Com digvocê pode vê-lo no cabeçalho (5ª linha não em branco da saída) e com hostisso é mais óbvio. NXDOMAINsignifica que o domínio não existe. No entanto, a CNAMEé retornado na seção de respostas! Eu acredito que é um bug no servidor DNS!
Celada
Então, nesse caso, não dige hosttanto enviar exatamente o mesmo pacote de consulta, obter o mesmo pacote de resposta exata (além de quaisquer marcas de tempo), mas interpretá-lo de forma diferente? Será que hostsai assim que vê NXDOMAIN?
jhabbott
FWIW Eu tenho o problema exatamente oposto em um subdomínio específico. O uso do host nesse subdomínio específico fornece o registro esperado, mostrando que esse subdomínio específico é resolvido com um nome de host canônico esperado. No entanto, ao usar dig neste subdomínio específico - recebo uma resposta de que o registro não existe. Além disso, navegar para este subdomínio com um navegador não funciona. Eu tentei várias vezes, verificando erros de ortografia, etc. Os comandos claramente NÃO estão funcionando da mesma maneira.
user12345

Respostas:

13

host,, dige nslookuptodos compartilham quase a mesma funcionalidade. No caso de você estar perguntando sobre (fazer uma pergunta DNS específica para um servidor de nomes específico) dige host(e de fato nslookup) se comportar exatamente da mesma maneira.

Para solução de problemas de DNS, digé preferível porque seu formato de saída é mais "bruto": na saída, ele mostra diretamente o conteúdo de todos os 4 campos na resposta DNS: pergunta, resposta, autoridade e seções adicionais (além dos sinalizadores no cabeçalho) , e também tem mais opções. host, por outro lado, possui um formato de saída mais amigável.

Se você não precisar de uma opção que um dos comandos possua e os outros não, ou de uma informação que um deles gera e os outros não, então tudo se resume a uma questão de preferência.

Celada
fonte
2
Se eles fazem a mesma coisa no lado da rede (a consulta real), como posso obter um host não encontrado ao usar, hostmas a resposta correta ao usar dig? Mesmo se o servidor estiver configurado usando uma configuração específica (por opção ou acidente) para causar isso, ele deverá conseguir diferenciar as solicitações.
jhabbott
Não! Os dois comandos que você dá na sua pergunta são equivalentes e devem produzir a mesma resposta! Tem certeza de que digdeu uma resposta real e não um registro na seção adicional ou autoridade? Como Renan sugere, pode ajudar a mostrar a saída.
22413 Celada
Ok, eu adicionei alguns exemplos de saída. Eu obtenho o mesmo resultado em casa e no trabalho. Quando não especifico um servidor de nomes para usar e meu ISP lida com a consulta, hostfunciona bem. Tente você mesmo e deixe-me saber os resultados.
jhabbott
Apenas analisando isso - o ISP acabou me dizendo que o servidor estava configurado para não responder a consultas diretas de clientes, apenas para outros servidores de nomes que solicitam transferências de informações - a digconsulta é feita de maneira diferente, como faria um servidor de nomes?
jhabbott
1
dig pode fazer ambas as perguntas regulares (todos os tipos, com excepção AXFR) e transferências de zona (tipo AXFR) mas os operadores de DNS geralmente restringem as transferências de zona para escravos autorizados para que você provavelmente quer usar perguntas regulares
Celada
0

Se você estiver usando o nome de host que não seja o FQDN, os resultados poderão ser diferentes, pois hostusarão os domínios de pesquisa resolv.conf, enquanto dignão o padrão.

Você precisa usar a +searchopção se desejar digusar resolv.conf(ou adicioná-lo a ~/.digrc).

Por exemplo:

$ host foo
foo.myfqdn.com has address 10.1.2.3

$ dig +short foo
# (no result)

$ dig +short +search foo
10.1.2.3
wisbucky
fonte