De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 22 de outubro de 2018
Erros são comuns e, mesmo após um serviço muito cuidadoso na configuração de seu servidor DNS, é preciso testar o trabalho realizado para verificar se tudo está funcionando como deveria. No dia a dia estas consultas também são importantes, pois uma pequena alteração descuidada, como esquecer um simples ponto final no nome de um domínio, pode levar o sistema a funcionar de maneira errônea. Vai registrar um domínio novo? Antes de tudo você precisa verificar se os seus servidores estão respondendo corretamente pelo novo domínio. No Brasil e em muitas partes do mundo o registro não é aceito se houver algum erro.
É claro que tais ferramentas existem, das mais simples às mais complexas. As
mais famosas são nslookup
, host
e dig
.
A ferramenta mais conhecida, ao menos para aqueles que trabalham há mais
tempo com administração de sistemas, é o nslookup
. Vejam só o que ocorre
quando invocamos o em um sistema Debian GNU/Linux:
$ nslookup
Note: nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead. Run nslookup with
the `-sil[ent]' option to prevent this message from appearing.
>
Esta mensagem nos informa que este software está obsoleto e possivelmente
não mais será distribuído. A mensagem sugere o uso dos utilitários dig
ou host
.
Esta ferramenta possui inúmeras deficiências que tornam impróprio o seu uso como ferramenta de diagnósticos para administradores de redes. Não é o objetivo deste texto explorar esta passagem, mas uma busca no Google com os termos "nslookup deprecated" trará inúmeras páginas que abordam o assunto.
Infelizmente, nem o comando dig
ou host
, possuem uma característica
extremamente interessante do nslookup
, a possibilidade de execução
interativa. Na saída do comando acima podemos ver, na última linha, o prompt
">
", que é o sinal que o nslookup
nos envia informando que está
aguardando por nossos comandos.
Por todas estas razões e pela conveniência que esta ferramenta nos oferece, e
também por ser amplamente conhecida, iremos abordá-la a seguir. Descreveremos
apenas as opções mais comuns, explorando em mais detalhes os programas host
e dig
, que ainda não tiveram a sua sentença de morte decretada.
Invocando o comando nslookup
como abaixo:
$ nslookup -si
Ficamos apenas com o prompt, a mensagem aborrecida some e podemos trabalhar
em paz. Passemos então a analisar, primeiramente, as funcionalidades do
comando nslookup
.
Basicamente, 90% ou mais do trabalho de um servidor DNS se resume na resolução de nomes de domínio em números IP. Afinal de contas sabemos que os computadores só trabalham bem com números ao passo que nós humanos nos identificamos melhor com nomes.
Para não sermos aborrecidos a todo instante com a mensagem anunciando o
triste fim previsto para o nslookup
, criamos um alias do comando
nslookup
já com a diretiva para ficar quieto. Aliases podem ser criados
globalmente, para todos os usuários de um sistema, acrescentando a seguinte
linha no arquivo /etc/profile
:
alias nslookup="nslookup -sil"
Esta diretiva é válida em geral para sistemas GNU/Linux, onde a shell padrão é
bash
. Para outros sistemas derivados do Unix leia a documentação apropriada
para determinar o local exato onde o alias deve ser inserido.
Para definir um alias apenas para um usuário, incluimos a mesma linha no
arquivo .bashrc
(não se esqueça do ".
" antes do nome do arquivo).
Pronto, isto feito podemos trabalhar em paz. Vamos lá então desvendar os
mistérios do comando nslookup
:
Em sua forma mais imediata, podemos especificar diretamente na linha de comando o que buscamos:
$ nslookup www.example.com.br
Server: 200.204.0.138
Address: 200.204.0.138#53
Non-authoritative answer:
Name: www.example.com.br
Address: 200.171.229.140
O comando nslookup
foi invocado com um argumento, o nome do computador cujo
endereço IP queremos determinar. Neste caso, a resposta é exibida e o comando
é encerrado logo em seguida.
As duas primeiras linhas indicam o endereço IP do servidor DNS, 200.204.0.138, e a segunda linha, Address, especifica, além do endereço IP, a porta em que o serviço DNS está atendendo, a porta de número 53 (indicada como 200.204.0.138#53).
Caso precisemos de mais informações, é conveniente invocarmos o nslookup
interativamente:
$ nslookup
>
> www.example.com.br
> www.example.com.br
Server: 200.204.0.138
Address: 200.204.0.138#53
Non-authoritative answer:
Name: www.example.com.br
Address: 200.171.229.140
Observar a informação Non-authoritative answer, que nos informa
que esta é uma resposta não oficial, ou seja, este é um dado que veio do
cache do servidor DNS consultado e não diretamente do servidor oficial do
domínio example.com.br
.
As informações exibidas, nos dois casos, são exatamente as mesmas e a apresentação dos dados é também, como não poderia deixar de ser, rigorosamente igual.
Continuando com nossa exploração do comando vamos agora sair do normal e descobrir quais são os servidores DNS de um determinado domínio.
$ nslookup
> set type=ns
> example.com.br
Server: 200.204.0.138
Address: 200.204.0.138#53
Non-authoritative answer:
example.com.br nameserver = ns1.everydns.net.
example.com.br nameserver = ns2.everydns.net.
example.com.br nameserver = ns3.everydns.net.
example.com.br nameserver = ns4.everydns.net.
Authoritative answers can be found from:
ns1.everydns.net internet address = 64.158.219.3
ns2.everydns.net internet address = 216.218.240.206
ns4.everydns.net internet address = 63.219.183.200
Invocamos neste caso o programa nslookup
no modo interativo. Em
seguida, informamos ao programa que estamos buscando por registros do
tipo NS (set type=ns
). Digitamos então o nome do domínio para o qual
buscamos identificar os servidores DNS, example.com.br
. Descobrimos
então que o domínio example.com.br
é atendido por quatro servidores
DNS: ns1.everydns.net
, ns2.everydns.net
, ns3.everydns.net
e
ns4.everydns.net
. Excelente configuração, com alto grau de redundância!
O mesmo resultado podemos obter fornecendo todas as informações diretamente na linha de comando:
$ nslookup -query=ns example.com.br
Com a diretiva query
indicamos o tipo de registro que desejamos obter. Este
comando também pode ser abreviado para o seguinte formato:
nslookup -q=ns example.com.br
A diretiva query
pode ser abreviada para a letra q
.
O comando nslookup
é configurado para encaminhar suas consultas ao servidor
DNS especificado no arquivo /etc/resolv.conf
. Em muitos casos, a informação
gravada neste arquivo é gerada dinâmicamente, via DHCP, pelo provedor de
acesso que usamos. Entretanto, em determinadas situações, precisamos alterar
este valor, direcionando nossas consultas para um outro servidor.
Um caso típico ocorre quando precisamos registrar um novo domínio. O registro de um novo domínio só é aceito se já existir um servidor DNS corretamente configurado e respondendo pelo domínio que se deseja registrar. O teste de funcionamento deste servidor DNS é feito quando do preenchimento do formulário no Registro.BR.
Como o nosso domínio ainda não foi registrado, o único servidor DNS que o conhece é o do nosso provedor. A teia de relacionamentos que faz o DNS funcionar ainda não está operacional. Ninguém vai apontar para o nosso novo domínio e todos os servidores DNS que forem interrogados sobre ele simplesmente darão de ombros e responderão que não fazem a mínima idéia de quem seja www.linuxweb.com.br.
Usemos novamente o comando nslookup
no modo interativo:
$ nslookup
> server 200.204.0.138
Default server: 200.204.0.138
Address: 200.204.0.138#53
O servidor 200.204.0.138 é aquele que está registrado no arquivo
/etc/resolv.conf
da máquina onde estamos executando o comando
nslookup
. Este é o servidor DNS de meu provedor de acesso. O domínio
linuxweb.com.br
será registrado no servidor DNS cujo número IP é
66.45.225.133.
Então, em nosso exemplo, precisamos especificar quem conhece o nosso servidor,
através da diretiva server
:
> server 66.45.225.133
Default server: 66.45.225.133
Address: 66.45.225.133#53
>
Pronto, estamos conectados ao servidor que nos conhece. Vamos então consultá-lo quanto ao nosso novo domínio:
> www.linuxweb.com.br
Server: 66.45.225.133
Address: 66.45.225.133#53
Name: www.linuxweb.com.br
Address: 66.45.225.133
> set type=ns
> linuxweb.com.br
Server: 66.45.225.133
Address: 66.45.225.133#53
linuxweb.com.br nameserver = ns2.dicas-l.com.br.
linuxweb.com.br nameserver = ns1.dicas-l.com.br.
Realizei duas consultas ao servidor DNS, uma solicitando o número IP do
computador de nome www.linuxweb.com.br
e outra solicitando os nomes dos
servidores DNS responsáveis pelo domínio. As duas consultas foram bem
sucedidas, retornando respostas corretas. Está tudo pronto para o registro.
Até aqui tudo bem, nosso servidor nos conhece. Mas o registro de um domínio
na Internet envolve outras coisas. Certamente desejaremos enviar e receber
mensagens em nosso domínio zero quilometro. No DNS isto é feito através dos
registros MX (Mail Exchanger). O padrão é que o nslookup
responda
às consultas fornecendo o número IP dos nomes que lhe são fornecidos. Para
isto precisamos novamente informar ao nslookup
que iremos mudar seu modo
de funcionamento, solicitando informações de outro tipo.
> set type=mx
> linuxweb.com.br
Server: 66.45.225.139
Address: 66.45.225.139#53
linuxweb.com.br mail exchanger = 0 mail.linuxweb.com.br.
Descobrimos que o domínio linuxweb.com.br
é atendido por apenas um
servidor de correio eletrônico (não é uma boa idéia, sempre é bom ter um
servidor backup).
Normalmente consultamos o DNS para obter o número IP associado a um nome de
domínio, como www.example.com.br.
Podemos entretanto, realizar consultas ao
DNS para obtermos a informação reversa, ou seja, ao fornecermos o número IP
obtemos o nome.
Vejamos um exemplo:
> set type=ptr
> 207.171.175.29
Server: 200.204.0.138
Address: 200.204.0.138#53
Non-authoritative answer:
29.175.171.207.in-add207.171.175.29r.arpa name = 175-29.amazon.com.
Authoritative answers can be found from:
175.171.207.in-addr.arpa nameserver = ns-3.amazon.com.
175.171.207.in-addr.arpa nameserver = ns-1.amazon.com.
175.171.207.in-addr.arpa nameserver = ns-2.amazon.com.
ns-1.amazon.com internet address = 207.171.178.132
ns-2.amazon.com internet address = 12.163.227.100
ns-3.amazon.com internet address = 207.171.171.132
Estas são as informações associadas ao número IP 207.171.175.29, associado
ao nome www.amazon.com
.
Este tipo de consulta é bastante raro, mas faz parte das consultas padrão que devemos realizar ao registrar um novo nome de computador. É conveniente que não nos esqueçamos de fazer tanto o registro do endereço (registro tipo A) e do registro reverso (registro PTR). Esta informação geralmente é usada por motivos de segurança, para localizar crackers ou spammers. Frequentemente os nomes de domínio usados por spammers são forjados, de modo a tentar dificultar sua identificação, ou seja, os nomes usados não possuem o registro reverso, o que pode indicar um problema.
O comando nslookup
pode ser usado no modo interativo e no modo direto. O
modo interativo é usado quando se deseja fazer múltiplas consultas a um serviço
DNS e o modo direto é usado quando se deseja obter a resposta imediata para
uma consulta.
O modo default de funcionamento é para a obtenção de registros A
(Address). Para alternar entre os tipos de registros, no modo de
consulta direta, utilizamos a diretiva query
ou q
. No modo interativo
especificamos o tipo de registro desejado através da diretiva set type=X
,
onde X pode assumir os valores A (para Address), MX (para
Mail Exchange), PTR (para resolução reversa), NS (para //Name
Server), SOA (Start of Authority//) e outros tipos não tão comuns.
Usar o comando host
é bem simples e de muitas maneiras similar ao comando
nslookup
. Adicionalmente, com comparação com o nslookup
, o comando
host é mais simples, tanto no uso quanto no tipo de informações que podem
ser obtidas.
Para quem não conhece nada do comando host, uma boa maneira de se começar é digitar:
$ host
Usage: host [-aCdlrTwv] [-c class] [-n] [-N ndots] [-t type] [-W time]
[-R number] hostname [server]
-a is equivalent to -v -t *
-c specifies query class for non-IN data
-C compares SOA records on authoritative nameservers
-d is equivalent to -v
-l lists all hosts in a domain, using AXFR
-i Use the old IN6.INT form of IPv6 reverse lookup
-N changes the number of dots allowed before root lookup is done
-r disables recursive processing
-R specifies number of retries for UDP packets
-t specifies the query type
-T enables TCP/IP mode
-v enables verbose output
-w specifies to wait forever for a reply
.......-W specifies how long to wait for a reply
Ao contrário do comando nslookup
, que entra no modo de operação interativo,
o comando host
exibe sua sintaxe de uso. Muitas das informações de uso
do comando host
requerem um bom conhecimento de DNS, mas não precisamos
nos preocupar com isto, pois um dos objetivos principais deste comando
é a facilidade de uso, fornecendo uma interface simples de uso para as
consultas mais comuns, ao mesmo tempo em que permite um nível um pouco maior
de sofisticação.
Para a forma mais simples de consulta, resolução de nomes para números IP, basta digitar o nome do comando seguido do nome do computador:
$ host www.ibm.com
www.ibm.com has address 129.42.20.99
www.ibm.com has address 129.42.21.99
www.ibm.com has address 129.42.16.99
www.ibm.com has address 129.42.17.99
www.ibm.com has address 129.42.18.99
www.ibm.com has address 129.42.19.99
Vejam que interessante, o computador www.ibm.com
possui quatro endereços
IP. Esta é uma técnica bem comum para distribuição de carga.
Se fornecemos um nome ele nos retorna um número IP e se lhe fornecemos um número IP ele nos retorna um nome. Aproveitemos o resultado acima para mais um teste:
$ host 129.42.20.99
99.20.42.129.in-addr.arpa domain name pointer www.ibm.com.
Sofisticando um pouco mais, vamos realizar a mesma consulta porém utilizando
o servidor DNS de nome ns1.dicas-l.com.br
:
$ host www.ibm.com ns1.dicas-l.com.br
Using domain server:
Name: ns1.dicas-l.com.br
Address: 66.45.225.139#53
Aliases:
www.ibm.com has address 129.42.19.99
www.ibm.com has address 129.42.20.99
www.ibm.com has address 129.42.21.99
www.ibm.com has address 129.42.16.99
www.ibm.com has address 129.42.17.99
www.ibm.com has address 129.42.18.99
Vemos que existe um mapeamento correto entre o endereçamento direto e o reverso. O administrador deste domínio trabalhou direito.
Consultas a outros tipos de registro como MX, NS, SOA, PTR, etc, podem ser
obtidos também com a especificação da diretiva -t
:
$ host -t ns example.com.br
example.com.br name server ns1.everydns.net.
example.com.br name server ns2.everydns.net.
example.com.br name server ns3.everydns.net.
example.com.br name server ns4.everydns.net.
Ou:
$ host -t SOA example.com.br
example.com.br SOA ns1.everydns.net. hostmaster.example.com.br. 1117670007 3600 900 1209600 3600
Ou ainda:
$ host -t mx example.com.br
example.com.br mail is handled by 10 mx-sec.terraempresas.com.br.
example.com.br mail is handled by 5 mail.example.com.br.
Ao contrário do comando nslookup
o comando host
não distingue entre
informações oficiais, obtidas diretamente do servidor DNS responsável
por um domínio e respostas não oficiais, obtidas do cache do servidor que
especificamos no arquivo /etc/resolv.conf
.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários