Você está na página 1de 8

Introdução ao DNS 

Artigo adaptado do link: http://www.debianfordummies.org/wiki/index.php/DFD_DNS_HOWTO 

Boa parte da usabilidade da Internet vem da facilidade que temos para localizar um computador 
conectado.  Apesar  da  maioria  dos  computadores  só  conseguirem  localizar  outros  através  de 
endereços IP, nós humanos podemos localizá­los facilmente através de um nome inteligível. É o 
que  acontece,  por  exemplo,  quando  acessamos  a  página  oficial  do  sistema  operacional  Linux 
através do nome www.linux.org, ao invés de precisarmos usar o número 198.182.196.56 que, cá 
entre  nós,  é  bem  mais  feio.  Esta  conversão  de  nome  para  números  é  feita  automaticamente 
através do mecanismo de DNS (sigla de Domain Name System). 

Os administradores de rede gostam de colocar uns  nomes um  tanto quanto criativos  nas suas 


máquinas.  Alguns  usam  nomes  de  cidades  da  região  em  que  a  LAN  está  localizada  (como 
Olinda, Buíque e Jaboatão). Outros gostam de usar nomes de personagens de quadrinhos como 
Mônica,  Cebolinha,  Cascão,  Magali.  Outros  preferem  nomes  de  grandes  nomes  da  música 
brasileira como Raul Seixas, Elis Regina e Tom Jobim. Assim como o DNS é usado na Internet, 
pode  também  ser  usado  em  uma  rede  interna  para  facilitar  sua  utilização.  Isso  permite,  por 
exemplo que ao invés de digitarmos ssh 10.1.1.4, possamos digitar simplesmente ssh raulseixas, 
uma seqüência bem mais fácil de ser memorizada. 

Vamos  aprender aqui  a  configurar uma  máquina  em  uma  rede  para  saber  localizar  as  demais 
pelo  nome,  ou  seja,  servir  de  "telefonista"  para  nossa  rede.  Ela  vai  receber  pedidos  do  tipo 
"Estou querendo falar com raulseixas. Qual o endereço dele?" e vai responder "Para falar com o 
maluco beleza,  tente 10.1.1.4".  Neste  artigo vamos  utilizar  o  programa named,  que é parte do 
pacote BIND, disponível em praticamente todas as distribuições Linux. Ele é o programa que vai 
ficar  rodando  para  receber  requisições  de  mapeamento  de  nomes  em  endereços  IP  e,  claro, 
respondê­las adeqüadamente.
Instalação inicial do Bind9 
Obter e instalar o  named em sua máquina Debian é fácil. Basta procurar em seu gerenciador 
de  pacotes  preferidos  pelo  pacote  bind9.  Não  é  obrigatório,  mas  é  sempre  bom  obter  a 
documentação, que está no pacote bind9­doc. 

# apt­get install bind9 
# apt­get install bind9­doc 

O  bondoso  apt­get  vai  então  nos  mostrar  algumas  mensagens  e  instalar  os  pacotes  que 
queremos. Depois que ele completar seu trabalho, já teremos nosso servidor DNS funcionando. 
Não foi fácil? 

Para tirar a prova, podemos pedir a ele o endereço para alguns nomes. Para isso vamos usar o 
dig,  um  programa  que  faz  parte  do  pacote  dnsutils.  Poderíamos  também  editar  o  arquivo 
/etc/resolv.conf  para  utilizar o  novo  servidor  de nomes, mas  é  mais  higiênico  fazermos  isso 
somente no final, quando tudo estiver funcionando perfeitamente. 

# apt­get install dnsutils 
# exit 
$ dig www.linux.org @127.0.0.1 

; <<>> DiG 9.2.4 <<>> www.linux.org @127.0.0.1 
;; global options:  printcmd 
;; Got answer: 
;; ­>>HEADER<<­ opcode: QUERY, status: NOERROR, id: 55879 
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0 

;; QUESTION SECTION: 
;www.linux.org.                 IN      A 

;; ANSWER SECTION: 
www.linux.org.          41122  IN      A       198.182.196.56 

;; AUTHORITY SECTION: 
linux.org.              41122   IN      NS      ns0.aitcom.net. 
linux.org.              41122   IN      NS      ns.invlogic.com. 

;; Query time: 7 msec 
;; SERVER: 127.0.0.1#53(127.0.0.1) 
;; WHEN: Sun Dec 11 01:45:26 2005 
;; MSG SIZE  rcvd: 104 

O  que  pedimos  foi  para  o  programa  dig  obter  o  endereço  IP  da  máquina  de  nome 
www.linux.org,  utilizando para isso  o  servidor de nomes localizado  em  127.0.0.1  (este é o 
endereço da máquina onde o comando foi executado, ou seja, seu próprio computador). Ele nos 
respondeu que o endereço é 198.182.196.56 (olhe a seção ANSWER SECTION). 

Note  que  não  informamos  ao  nosso  servidor  em  lugar  nenhum  o  endereço  IP  da  máquina 
www.linux.org, mesmo assim ele conseguiu nos fornecer  um número. Ele foi capaz de fazer 
isso porque se comunicou com uma das máquinas chamadas de servidores­raiz. O endereço IP 
dessas  máquinas  fica,  em  um  sistema  Debian,  gravado  em  um  arquivo  chamado, 
sugestivamente, de db.root.
O  problema  é  que  esses  endereços  podem  mudar  com  o  tempo,  apesar  disso  não  ser  muito 
freqüente.  Da  última  vez  que  instalei  o  pacote  bind9 ,  ele  veio  com  um  db.root  de  2003. 
Felizmente,  é  fácil atualizar  o  arquivo.  Só  precisamos  usar  o  dig  (se  você  não  instalou ainda, 
faça  agora).  Vamos  pedir  a  ele  que  obtenha  a  localização  atual  dos  servidores­raiz  e  vamos 
gravar a resposta em um arquivo. 

# # Só para ter certeza que estamos no lugar certo 
# pwd 
/etc/bind 
# dig ns . @a.root­servers.net. > db.root.new 

Isso  vai  gravar  a  resposta  do  servidor  a.root­servers.net.  no  arquivo  db.root.new.  Se  este 
servidor não responder, tente um dos outros (b.root­servers.net, c.root.­servers.net e assim por 
diante). Se estiver curioso, você pode dar uma olhada no conteúdo do arquivo. O próximo passo 
é substituir o arquivo antigo pelo novo e reiniciar o programa servidor de nomes para que ele leia 
o  novo  arquivo.  Note  que  essas  instruções  são  para  uma  instalação  Debian  padrão,  sua 
configuração pode ser um pouco diferente. 

# mv db.root db.root.old 
# mv db.root.new db.root 
# /etc/init.d/bind9 restart 
Stopping domain name service: named. 
Starting domain name service: named. 

Com  isso  nosso  servidor  DNS  já  pode  resolver  os  nomes  dos  computadores  na  Internet. 
Precisamos disso porque vamos substituir o servidor DNS antigo (que deve ser uma máquina do 
seu provedor de Internet) por um novo e queremos que ele continue sendo capaz de fazer o que 
o antigo fazia. Porém essa configuração ainda não inclui os nomes das máquinas internas, para 
estas  ainda  precisamos  dos  endereços  IP.  Para  "batizar"  nossas  máquinas  vamos  precisar de 
um domínio interno. 

Configurando um Domínio 
O serviço de nomes (DNS) é organizado hierarquicamente em domínios, deste modo isola­se o 
conjunto de nomes pertencentes a um domínio dos nomes de outro. O controlador do domínio 
pode adicionar quaisquer nomes dentro deste domínio e não haverá perigo de colisão de nomes 
acidental. Estes nomes podem ser subdomínios (nomes que aceitam mais nomes subordinados) 
ou  hosts  (nomes  de  máquinas  específicas,  sem  subordinados).  Para  ficar  mais  claro,  vamos 
tomar como exemplo o domínio  debianfordummies.org. Subordinados a este domínio podem 
ser  registrados  vários  sub­nomes  como,  por  exemplo,  o  www.debianfordummies.org  (que 
provavelmente  é  o  endereço  que  você  acessou),  o  ftp.debianfordummies.org  e  o 
mail.debianfordummies.org.  Mais  informações  sobre  domínios  podem  ser  encontradas na 
RFC  1035  (cuidado  ao  clicar  neste  link,  leva  a  conteúdo  extremamente  interessante  mas 
também  extremamente  técnico).  Vamos  usar  um  domínio  para  identificar  nossas  máquinas. 
Neste  exemplo,  todas elas estarão abrigadas sob  o mesmo domínio, mas é fácil  registrar mais 
de um domínio uma vez que você pega o jeito. Recomenda­se utilizar um domínio controlado por 
você, para evitar bloquear acidentalmente outro domínio externo. Daqui em diante vamos utilizar 
um domínio chamado de  meudominio.org.br, que ainda não existe (pelo menos não existia 
quando  este  artigo  foi  escrito).  Para  fazer  isso  no  nosso  sistema  Debian,  vamos  precisar 
modificar  um  pouco  o  conteúdo  do  diretório  /etc/bind .  Primeiramente  vamos  adicionar  uma 
zona  correspondente  ao  nosso  domínio,  adicionando  o  trecho  abaixo  ao  final  do  arquivo 
named.conf.local
zone "meudominio.org.br" { 
type master; 
file "/etc/bind/db.meudominio"; 
}; 

A segunda linha (type master) diz ao  named (o programa que estamos usando como servidor 
de  nomes,  lembra?)  que  ele  possui  os  endereços  para  a  zona  meudominio.org.br  e  não 
precisa  consultar  ninguém  para  responder  por  ela.  A  terceira  indica  o  caminho  do  arquivo  no 
sistema de arquivos local onde ele vai encontrar o mapeamento de nomes para endereços IP. É 
este arquivo que vamos criar agora. 

Digamos que na nossa rede temos serviços web e ftp localizados na máquina 192.168.1.10, um 
servidor  de  nomes  na  máquina  192.168.1.11  e  um  serviço  de  e­mail  numa  terceira  máquina 
192.168.1.12. Esquematizando, temos o mapeamento abaixo. 

ftp ­­> 192.168.1.10  ­­> servidor ftp 
www ­­> 192.168.1.10  ­­> servidor web 
ns  ­­> 192.168.1.11  ­­> servidor dns secundario 
mail ­> 192.168.1.12  ­­> servidor de email 

O  que precisamos fazer é traduzir este mapeamento para a linguagem entendida pelo named. 
Abra seu editor favorito e crie o arquivo /etc/bind/db.meudominio com o seguinte conteúdo. 

$TTL 86400 

@  IN      SOA     ns.meudominio.org.br. minhamaquina.meudominio.org.br. ( 
1130118145  ; Serial 
10800  ; Refresh 
3600  ; Retry 
604800  ; Expire 
86400 )  ; Minimum 

meudominio.org.br.      IN      NS      ns.meudominio.org.br. 
ftp.meudominio.org.br.  IN      A       192.168.1.10 
www.meudominio.org.br.  IN      A       192.168.1.10 
ns.meudominio.org.br.  IN      A       192.168.1.11 
meudominio.org.br.      IN      MX 10   mail.meudominio.org.br. 
mail.meudominio.org.br.  IN      A       192.168.1.10 

As  quatro  últimas  linhas  especificam  nosso  mapeamento,  exatamente  como  definimos 
anteriormente.  Sempre  que  quisermos  adicionar  novos  nomes,  só  precisamos  editar  este 
arquivo.  Se,  por exemplo, quisermos  adicionar  endereços para  as máquinas  dos personagens 
imaginários  André  e  Beto,  localizadas  nos  IPs  192.168.1.17  e  192.168.1.18,  respectivamente, 
basta adicionarmos ao final do arquivo /etc/bind/db.meudominio o trecho abaixo. 

andre.meudominio.org.br.        IN      A       192.168.1.17 
beto.meudominio.org.br.         IN      A       192.168.1.18 

Observe ainda que é possível especificar que o mesmo IP responderá por mais de um nome. A 
máquina  192.168.1.10  do  nosso  exemplo  está  respondendo  pelos  nomes  ftp  e  www 
simultaneamente.  O  contrário,  especificar  vários  endereços  para  o  mesmo  nome,  também  é 
possível. Para maiores detalhes, consulte o manual do bind . 

Agora  que  terminamos  de  editar  nossos  arquivos  é  hora  de  fazer  uma  revisão  rápida  neles  e 
reiniciar o serviço de nomes, para que ele carregue os novos dados.
# /etc/init.d/bind9 restart 
Stopping domain name service: named. 
Starting domain name service: named. 

Para  testar  nossa  configuração,  vamos  usar  novamente  o  dig.  Do  mesmo  modo  que 
consultamos anteriormente o endereço para uma máquina na rede externa (a  www.linux.org ), 
agora vamos consultar o endereço para um nome de máquina na rede interna. 

$ dig ftp.meudominio.org.br @127.0.0.1 

; <<>> DiG 9.2.4 <<>> ftp.meudominio.org.br @127.0.0.1 
;; global options:  printcmd 
;; Got answer: 
;; ­>>HEADER<<­ opcode: QUERY, status: NOERROR, id: 41734 
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 

;; QUESTION SECTION: 
;ftp.meudominio.org.br. IN  A 

;; ANSWER SECTION: 
ftp.meudominio.org.br. 86400 IN A   192.168.1.10 

;; AUTHORITY SECTION: 
meudominio.org.br. 86400   IN  NS      ns.meudominio.org.br. 

;; ADDITIONAL SECTION: 
ns.meudominio.org.br. 86400 IN     A       192.168.1.11 

;; Query time: 6 msec 
;; SERVER: 127.0.0.1#53(127.0.0.1) 
;; WHEN: Tue Dec 27 10:08:05 2005 
;; MSG SIZE  rcvd: 100 

Configuração das máquinas cliente 
Para  ser capaz  de  resolver  nomes  uma máquina  precisa  ter  acesso  a  um  servidor de  nomes. 
Uma forma bastante comum de dar este acesso é gravar estaticamente o endereço do servidor 
de  nomes  na  máquina.  Também  há  meios  de  informar  o  endereço  do  servidor  de  nomes 
dinamicamente, quando a máquina entra na rede. 

Neste  ponto do  artigo  já  temos  um  servidor de  nomes  funcionando,  mas  nossas máquinas na 
rede  ainda  utilizam  o  servidor  de  nomes  antigo.  Se  tentarmos  acessar  algum  dos  nomes  sob 
nosso  domínio  recém­criado,  não  vamos  obter  o  endereço  desejado  simplesmente  porque  o 
servidor que está sendo consultado não sabe da existência desses nomes. 

Considerando que nosso servidor do exemplo está no endereço 192.168.1.11, podemos usar o 
dig novamente para testar a conexão das outra máquinas da rede ao servidor DNS. O comando 
é o mesmo que executamos anteriormente, mas agora vamos tentar de outra máquina da rede e 
não do próprio servidor. Por isso não podemos mais usar seu endereço de retorno (o 127.0.0.1) 

$ dig ftp.meudominio.org.br @192.168.1.11 

; <<>> DiG 9.2.4 <<>> ftp.meudominio.org.br @192.168.1.11 
;; global options:  printcmd 
;; Got answer: 
;; ­>>HEADER<<­ opcode: QUERY, status: NOERROR, id: 41734 
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 

;; QUESTION SECTION: 
;ftp.meudominio.org.br. IN  A
;; ANSWER SECTION: 
ftp.meudominio.org.br. 86400 IN A   192.168.1.10 

;; AUTHORITY SECTION: 
meudominio.org.br. 86400   IN      NS      ns.meudominio.org.br. 

;; ADDITIONAL SECTION: 
ns.meudominio.org.br. 86400 IN     A       192.168.1.11 

;; Query time: 7 msec 
;; SERVER: 192.168.1.11#53(192.168.1.11) 
;; WHEN: Tue Dec 27 13:24:18 2005 
;; MSG SIZE  rcvd: 100 

Uma resposta parecida com esta indica que o servidor está visível externamente. Só precisamos 
configurar as demais máquinas para utilizar o novo servidor como resolvedor de nomes. 

Para  redirecionar  a  resolução  de  nomes  de  um  sistema  Debian,  basta  modificar  o  arquivo 
/etc/resolv.conf.  Outros  sistemas  precisam  ser  configurados  de  outras  formas,  consulte  sua 
documentação  para  maiores  informações.  Provavelmente  seu  resolv.conf  parece  com  isso 
aqui. 

search 
nameserver 198.41.0.4 

A  cláusula  nameserver  especifica  o  endereço  do  servidor  de  nomes  a  ser  utilizado  pela 
máquina.  Podemos  trocar  ou  adicionar  o  endereço  do  nosso  novo  servidor  ao  topo  da  lista. 
Quando algum nome precisar ser resolvido, os servidores serão consultados em seqüência e a 
resposta do primeiro será utilizada. O novo  resolv.conf vai ficar mais ou menos assim. 

search 
nameserver 192.168.1.11 
nameserver 198.41.0.4 

Agora já podemos tentar executar um  ping para as máquinas da rede utilizando seus nomes, ao 
invés  dos  endereços.  Outra  forma  de  testar  a  nova  configuração  é  executar  o  dig  sem  o 
parâmetro do servidor de nomes (a parte da arroba), assim ele vai utilizar o servidor DNS padrão 
do sistema. 

Para  facilitar  ainda  mais  nossa  vida,  podemos  mexer  ainda  na  cláusula  search.  Esta  cláusula 
indica  em  quais  domínios  os  nomes  serão  procurados,  em  ordem.  Basicamente  o  sistema  de 
resolução de nomes vai colocar o sufixo do domínio automaticamente quando tentamos buscar 
um nome qualquer. Ou seja, se adicionarmos o nosso domínio aqui, podemos nos referenteciar 
às  nossas máquinas  apenas  pelo  primeiro  nome  como  ftp,  www  ou  andre.  Não  precisaremos 
mais utilizar o nome completo. O resolv.conf finalmente fica assim. 

search meudominio.org.br 
nameserver 192.168.1.11 
nameserver 198.41.0.4 

A lista anterior estava vazia, isso significa que nenhuma busca em domínios era feita, por isso os 
hosts precisavam ser especificados com nome e sobrenome. Mas agora nosso domínio está 
sendo usado, por isso agora podemos escrever somente ping ftp ou digitar  na barra do nosso 
navegador apenas www.
Esta foi uma pequena introdução ao DNS, na verdade nem arranhamos a superfície direito. Para 
quem quiser se aprofundar, aí estão algumas referências. 

Configurando DNS Reverso 
O DNS reverso é um meio de que outras maquinas podem ter certeza de que você é você, por 
exemplo, é normal servidores de email, checarem se o seu dns é mesmo valido, um exemplo pra 
voce ver como isso funciona seria usando o comando host 

host terra.com.br 

ele retornará a seguinte saida 

terra.com.br has address 200.176.3.142 

fazendo o contrario, 

host 200.176.3.142 

obtemos o seguinte resultado 

142.3.176.200.in­addr.arpa domain name pointer www.terra.com.br. 

Então esse é o dns reverso 

Para  configurar  isso,  inicialmente  vamos  configurar  o  arquivo  /etc/bind/named.conf.local  (  em 


nosso exemplos, usamos apenas ips internos, então vou continuar com este padrão ) 

adicione ao fim do arquivo, a seguinte entrada 
zone "1.168.192.in­addr.arpa" { 
type master; 
file "/etc/bind/db.11"; 

note  que  se  usamos  o  ip  192.168.1.11  no  nosso  servidor,  então  a  zone  será  1.168.192.in­ 
addr.arpa,  isso  corresponde  ao  ip  ao  contrario  sem  o  ultimo  numero.  Bom,  aqui  fazemos 
referencia ao arquivo db.11, então precisamos cria­lo e dentro dele e entraremos com o seguinte 
endereço 

; 
; BIND reverse data file for meudominio.org.br 
; 
$TTL    604800 
@       IN      SOA     meudominio.org.br. ns.meudominio.org.br. ( 
1  ; Serial 
604800  ; Refresh 
86400  ; Retry 
2419200  ; Expire 
604800 )  ; Negative Cache TTL 
; 
IN      NS      meudominio.org.br. 
11     IN      PTR     ns.meudominio.org.br. 

olhando com atenção nas duas ultimas linhas, podemos ver o seguinte
IN      NS      meudominio.org.br. 

é o dominio principal 

11  IN      PTR     ns.meudominio.org.br. 

o ip e o host.dominio da maquina 

agora que você configurou, você pode reiniciar o bind 

/etc/init.d/bind9 restart 

agora para testar, vamos usar o comando host 

host ns.meudominio.org.br 
ns.meudominio.org.br has address 192.168.1.11 
host 192.168.1.11 
11.1.168.192.in­addr.arpa domain name pointer ns.meudominio.org 

viu, agora você tem um reverso de seus endereços, você pode usar também, o mesmo arquivo 
para vários outros hosts, como no exemplo abaixo: 

11     IN      PTR     ns.meudominio.org.br. 
12     IN      PTR     www.meudominio.org.br. 
13     IN      PTR     mail.meudominio.org.br.

Você também pode gostar