você está aqui: Home → Colunistas → Sysadmin
Por Rubens Queiroz de Almeida
Data de Publicação: 26 de Junho de 2007
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 -sil
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ípíco 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.