Tutorial de configuração de servidor DNS – BIND9

Iniciando a configuração do servidor DNS – BIND9

Este é o quinto artigo de uma série de vários posts que tencionam a configuração básica de um servidor de redes linux através do uso de máquinas virtuais. Para acompanhar os demais artigos clique aqui. Neste artigo iremos tratar da configuração de um servidor DNS.

Servidores de resolução de nomes de domínio são utilizados por nós todos os dias, são eles que traduzem nomes de sites em endereços IP’s. Essa tradução ocorre sempre que nós acessamos um site, tudo de maneira transparente, não vemos o processo acontecer. Se não existissem tais servidores teríamos que decorar os endereços IP’s de cada site que fossemos utilizar. Estes servidores operam sob protocolos como o DNS (Domain Name System) e WINS (Windows Internet Name Service), logo, DNS não é o único protocolo de resolução de nomes de domínio, contudo, possivelmente é o mais utilizado. O uso de tais servidores não é restrito a resolução de nomes de domínio na internet, também podem ser utilizados em um Active Directory e emails. A resolução pode ocorrer de duas maneiras, é possível encontrar o IP através do nome e vice-versa (resolução reversa).

Baixando o BIND9 via apt-get

Primeiro precisamos baixar uma implementação de um servidor de DNS, uma das mais utilizadas é o BIND (Berkeley Internet Name Domain), para isso basta acessar o terminal do linux e logado como root digitar o seguinte comando:

apt-get install bind9

Conceitos teóricos do BIND9

(caso prefira, vá direto para a parte prática um pouco mais abaixo)
O BIND9 trabalha com DNSSec, o que o torna mais seguro em relação ao BIND8 além de conter novos registros de recursos sob os quais falaremos adiante.
O BIND opera sob 4 formas distintas: Master (servidor autoritativo primário), Slave (servidor autoritativo secundário), caching-only (sem autoridade – apenas um cache de informações) e forwarding (que remete a solicitação para outros servidores de nomes).
Estou utilizando como servidor uma máquina virtual Debian, apenas em modo texto para evitar ao máximo possíveis inconsistências e deixar o servidor mais leve.
Agora partiremos para a configuração dos principais arquivos envolvidos no processo, basicamente existem 3 arquivos principais que precisam de uma maior atenção, são eles: o named.conf.local que é onde iremos criar as nossas zonas de domínio, o resolv.conf que é um arquivo do próprio linux onde iremos especificar os endereços de nossos servidores DNS e os arquivos que contém os RR (Resource Records) que serão referenciados no named.conf.local

Além destes arquivos, dando um comando ls dentro da pasta do bind podemos observar a existência de outros, que são:


bind.keys

db.0
db.127
db.255
db.empty
db.local
db.root
named.conf
named.conf.default-zones
named.conf.local
named.conf.options
rndc.key
zone.rfc1918

Os arquivos iniciados com db armazenam as configurações das zonas de domínio específicas para os domínios nomeados dentro do arquivo, ou seja, fazem as associações entre IP’s e nomes de domínio. Esses arquivos são chamados de registros de recursos, o arquivo db.local por exemplo contém o endereço do localhost.
O db.root contém os endereços de todos os servidores raiz de DNS, são representados no navegador com um ponto (.), é o ponto final que ninguém usa embora ele seja acrescentado automaticamente, caso queira testar tente acessar um site como o da UOL fazendo www.uol.com.br. repare que não irá dar erro se você colocar o ponto final, esse ponto final é justamente o servidor raiz. Estes servidores são responsáveis por encaminhar requisições de DNS para os servidores Top Level Domains, Os Top Level Domains ou TLD’s, são servidores de grande abrangência e se dividem em domínios de países, responsáveis por registros como: (br, us, uk, jp) , e domínios genéricos como: (com, edu, net). No Brasil por exemplo o registro.br é responsável pelo gerenciamento do domínio .br. O named.conf.default-zones contém as zonas de domínio padrão do BIND como por exemplo a zona localhost e a zona de broadcast.

 

Parte prática – Informando as zonas de domínio

Primeiro vamos configurar o named.conf para isso, através do editor de texto de sua preferência (no meu caso utilizarei o pico) faça:

pico /etc/bind/named.conf.local

Perceba que nas primeiras linhas há uma série de comentários, e nas três últimas linhas temos três includes, esses includes apontam pra arquivos dentro da pasta /etc/bind/arquivos estes arquivos armazenam algumas zonas de domínio, inclusive as 13 zonas principais que são responsáveis pelos servidores raiz de DNS sem os quais a internet não funcionaria (arquivo db.root sob o qual já falamos). Esses servidores contém o endereço dos top level domains que por sua vez contém os endereços de outros servidores DNS até chegar aos servidores autoritativos que têm de fato o endereço buscado pelo usuário, de modo que é possível percebermos que tudo funciona de maneira hierárquica dos servidores raiz até os servidores locais.

Podemos dizer então que o nosso servidor BIND que acabamos de instalar é suficiente para que possamos obter o endereço de praticamente qualquer site hospedado na grande rede, mas nosso intuito é personalizar e termos nosso próprio servidor com nossas próprias zonas de domínio, e é o que faremos.
Antes de iniciar a configuração do named.conf é bom lermos os comentários que estão dentro do arquivo, na última linha de comentário temos o seguinte: “se você está apenas adicionando zonas, por favor, faça isto no arquivo /etc/bind/named.conf.local, tendo em vista que neste primeiro momento apenas adicionaremos zonas, iremos seguir o conselho exposto.

Faça:

pico /etc/bind/named.conf.local

 

agora iremos adicionar as zonas de domínio

zone “debian.com.br” { //Informe o nome do domínio desejado

type master; //master é servidor primário e slave é secundário

file “/etc/bind/db.zonaDebian”; //indica o local onde o arquivo que contém os endereços de DNS ficará

};

// Zona de reverso, o bind realiza a conversão de Endereços em IP’s e também faz o procedimento contrário, convertendo IP’s em nomes.

zone “20.in-addr.arpa” {

type master;
file “/etc/bind/db.20”;

};

Agora iremos criar o arquivo referenciado na linha file que aponta para /etc/bind/db.zonaDebian, logo faremos:

touch db.zonaDebian

Esse comando deve ser executado dentro da pasta /etc/bind/

agora para editar o arquivo:

pico db.zonaDebian

Neste exemplo a máquina que hospeda o servidor DNS possui o endereço IP 192.168.3.10, seu nome será ns1.debian.com.br.

o arquivo criado ficou da seguinte forma:

$TTL 604800
@         IN       SOA      ns1.debian.com.br. admin.debian.com.br. (
          2013120400 ; Serial
          604800     ; Refresh
          86400      ; Retry
          2419200    ; Expire
          604800 )   ; Negative Cache TTL
;
                   NS       ns1.debian.com.br.
                   NS       ns2.debian.com.br.
                   MX       10    mail
ns1.debian.com.br. A        20.21.11.11
ns2.debian.com.br. A        10.2.1.3
ns3                A        9.9.9.9
mail               A        102.12.12.1

www            CNAME        ns1.debian.com.br.

Destrinchando o arquivo de registro de recursos db.zonaDebian

A primeira linha ($TTL) Indica o tempo que os registros permanecem no cache do DNS sem atualização e é obrigatória, normalmente é dada em segundos, mas pode ser dada em horas, dias, semanas.
SOA – é o preâmbulo, o início da configuração da zona de domínio, contém inicialmente o nome da zona (representado por um sinal de @ o que equivale ao nome da zona de domínio ou seja debian.com.br) a diferença de usar o arroba é que ele será repetido automaticamente nas demais linhas caso não seja informado outro nome de zona, depois a sigla IN indicando que se refere a Internet, a sigla SOA indicando que se trata do início do documento, o nome do servidor primário DNS e o e-mail do administrador.
Em resumo um registro de recurso é uma tupla (linha) contendo 5 campos, sendo que alguns podem ser omitidos, seguem a seguinte ordem:
Domain Name Informa o domínio ao qual o registro se aplica, existem muitos registros para cada domínio, e cada cópia do banco de dados armazena informações sobre vários domínios, esse campo é a chave de pesquisa primária utilizada para atender às consultas
Time_to_live indica a estabilidade do registro, é dado em segundos
Class caso esteja relacionado a internet seu valor será sempre IN
Type informa o tipo de registro, dentre os mais importantes podemos citar:

Tipo Significado Valor
SOA Início da Autoridade Parâmetros para essa zona
A Endereço IP de um Host Inteiro de 32 bits
MX Troca de mensagens de Correio Domínio para correio eletrônico
NS Servidor de Resolução de Nomes de Domínio Nome de um servidor para este domínio
CNAME Nome Canônico (apelido) Nome de domínio
PTR Ponteiro Nome alternativo para endereço IP
HINFO Descrição de host CPU e sistema operacional em ASCII

Depois há uma série de números, que obrigatoriamente devem ser informados, esses números indicam respectivamente:

O número de série da zona de domínio, normalmente iniciando com o ano, seguido do mês, dia e um número sequencial qualquer.
Período de refresh para servidores slave.
Período de espera até uma nova tentativa de refresh em caso de erro.
Período de expiração para servidores slave e
TTL default para os RR que não possuem valor especificado.
em seguida informamos os nameservers que o servidor de DNS primário irá armazenar, informamos no arquivo em questão o ns1.debian.com.br. e o ns2.debian.com.br. Informamos também um registro do tipo MX (Mail Exchanger) com prioridade 10 (quanto menor o número da prioridade maior será a prioridade dada ao servidor de e-mail no recebimento de e-mails). E por último foram feitas as associações entre nameserver e seus respectivos IP’s.

depois de criar o arquivo podemos testar através do seguinte comando

named-checkzone nome_da_zona endereco_da_zona

Este comando é muito útil pois poderá ajudar na descoberta de possíveis erros, Se estiver tudo ok reinicie o bind:

service bind9 restart

Testando o Servidor DNS

para testar o servidor de nomes utilizaremos o comando NSLOOKUP que serve justamente para isso. Antes certifique-se que o seu arquivo /etc/resolv.conf aponta para o nosso servidor DNS, abra o arquivo e o edite inserindo a seguinte linha

nameserver ip_do_servidor //coloque o ip de sua máquina

comente as demais linhas.

Uma outra maneira de definir o seu servidor de DNS padrão é acessar o arquivo de configuração do seu servidor DHCP, conforme fizemos no artigo passado, no entanto ainda não possuíamos um servidor DNS até então, agora já podemos especificar um servidor DHCP, para isso abra o arquivo dhcpd.conf:

pico /etc/dhcp/dhcpd.conf

Acrescente as seguintes linhas logo após o option routers:
option domain-name-servers 192.168.3.10;
option domain-name “debian-server”;

Dessa forma o cliente irá sempre buscar o servidor DNS padrão do servidor DHCP

Voltando a configuração do DNS, para testar insira o comando nslookup e o endereço desejado. No nosso caso temos vários endereços que podem ser objeto de teste.
nslookup ns1.debian.com.br

Você deverá obter a seguinte resposta:

Teste Bind nslookup

Teste Bind nslookup

 

para os demais testes faça:

nslookup ns1.debian.com.br

nslookup mail.debian.com.br

perceba que apesar de declararmos o nameserver mail, precisamos indicar o endereço completo, caso contrário ele não irá encontrar o servidor e aparecerá a mensagem:

** server can’t find mail.: NXDOMAIN

ao declararmos mail sem o ponto final (note que nos nameservers colocamos um ponto final que indica o servidor raiz) o BIND automaticamente irá completar com o nome da zona de DNS.
se dermos um nslookup www.uol.com.br, conseguiremos obter uma resposta do servidor BIND com o IP correspondente, mas observe que a resposta não será de um servidor sob o qual nosso servidor tenha autoridade, ou seja, o BIND não encontrou no banco de dados local o IP correspondente a www.uol.com.br foi preciso uma resposta de um servidor fora do nosso domínio, no caso em questão o servidor: homeuol.ipv6uol.com.br que atende também pelo apelido (canonical name) www.uol.com.br

Note que nosso servidor ns1.debian.com.br também possui um canonical name declarado na última linha do nosso arquivo de zona de domínio, (www) como não possui ponto final automaticamente é convertido para www.debian.com.br. Ao executarmos o comando

nslookup www.debian.com.br

obteremos a seguinte saída:

Teste Bind9

Teste Bind9

 

Criando os registro de recursos da zona de reverso:

O diferencial da zona de reverso é o uso da linha que contém a diretiva PTR, no caso em questão criamos o arquivo db.20 mencionado no named.conf.local, o arquivo é similar ao db.zonaDebian
$TTL 604800
@         IN        SOA   ns1.debian.com.br. admin.debian.com.br. (
          2013120400 ; Serial
          604800     ; Refresh
          86400      ; Retry
          2419200    ; Expire
          604800 )   ; Negative Cache TTL
;
                   NS    ns1.debian.com.br.
                   NS    ns2.debian.com.br.

11.11.21           PTR   ns1.debian.com.br.
A última linha contém a alteração mais importante, a parte final do endereço IP pesquisado, note que os últimos 3 octetos do endereço IP estão invertidos e não foi informado o primeiro octeto haja vista que o mesmo já consta no nome da zona de domínio. Para testar basta fazer:

nslookup 20.21.11.11

O resultado deverá ser o seguinte:

Teste DNS Bind9 reverso

Teste DNS Bind9 reverso

Considerações Finais

Observe que os endereços IP’s e os nomes utilizados são apenas para ilustrar e se tentássemos acessar esses endereços no navegador não teríamos retorno algum, para um exemplo mais prático no próximo artigo falaremos do Apache2, servidor web bastante utilizado. Vamos também dar um exemplo sobre como fazer nosso servidor DNS criar um registro de recurso para resolver o nome de um site local, você não precisará digitar localhost://pasta_do_site, poderá fazer algo como: www.meusite.com.br, até o próximo artigo.

Para mais detalhes aconselho a leitura dos seguintes artigos que também foram referências para este:

http://www.numaboa.com.br/informatica/linux/instalacoes/424-bind showall=&limitstart=

http://www.unitednerds.org/thefallen/docs/index.php?area=DNS&tuto=SlackwareShow#toc7

 

Compartilhe com seus amigosShare on Google+Share on FacebookTweet about this on Twitter

18 ideias sobre “Tutorial de configuração de servidor DNS – BIND9

  1. Pingback: Configuração de Servidores Linux | Concursos de TI

    1. wosh1ngton Autor do post

      Genival, os exemplos foram testados, prova disso são os prints colocados no decorrer do artigo, se tiver alguma dúvida ou alguma mensagem de erro basta informar que posso tentar te ajudar.

      Responder
  2. Pingback: Instalando o Servidor Web Apache 2

  3. Pingback: Iniciando a configuração do servidor DNS – BIND9 | Guia ISP

  4. Elcio Costa Júnior

    Boa Tarde!
    Artigo muito bom o seu wosh1ngton. Tenho algumas duvidas, se poder ajudar, eu agradeço.
    Bom… Estou ah montar um servidor de e-mails, tenho o seguinte ambiente: 1 maquina cloud hospedado no UOLHOST, Apenas 1 IP publico setado nesta maquina, 1 Domínio valido, Ubuntu 14.04lts puro, já tentei o Zimbra que vem com pacotes instalados, e já tentei o iRedMail que também vem com os pacotes(postfix, devecot, etc) inclusos, já falei com o pessoal da UOLHOST e os mesmo já direcionaram o reverso do meu IP para o meu servidor. Tenho o seguinte problema: depois de toda a configuração feita, meu servidor não envia e-mails, ele apenas recebe (falando de e-mails externos). Bom eu nao configurei o Bind, para o meu domínio eu estou usando com próprios servidores de DNS da UOL. Ah pergunta é: o meu problema é autenticação ou e o Bind, eu preciso configurar o Bind mesmo usando os Servidores de DNS da UOL. eu se eu preciso como faço isso usando só endereço IP????. Amigo se puder me ajudar, por favor me mande um e-mail. desde já agradeço muito.

    Responder
    1. wosh1ngton Autor do post

      Elcio, obrigado pelos elogios.
      Quanto ao seu problema, confesso que não sei o que pode ser.
      Mas acredito que o próprio UOLHost resolva os endereços do seu servidor, não acho que seu problema seja solucionado configurando o BIND.

      Responder
      1. Terêncio

        amigo boa tarde estou com problemas de entendimento, pk você colocou os endereços ips ali? eles são do quê?, eu tenho um ddns.net será que posso subistituir pelos endereços acima? agradeceria se pudesse me passar seu whats para me ajudar a criar meu servidor dns, pk estou hospedando sites pelo ISPConfig essa parte do DNS é a mais complicada para mim

        Responder
  5. Hugo Luiz

    Boa noite,
    Não imaginaria encontrar um material raro com explicação clara do bind9. Você deu início do que é o BIND9 até detalhar seus arquivos e como eles funciona. Fico imensamente grato a parar seu tempo pra escrever.

    Responder
  6. Daniel Pereira

    Primeiramente quero agradecer por esse conteúdo, ele é muito claro e didático. Parabéns.
    Fiquei com uma dúvida na seguinte parte:

    db.zonaDebian
    ns1.debian.com.br. A 20.21.11.11
    ns2.debian.com.br. A 10.2.1.3

    -Esse dois ip’s fornecidos (20.21.11.11; 10.2.1.3) Foram obtidos de forma aleatória ?
    Tenho um servidor vps aonde tenho 2 ip (locahost e outro “31.310.12.486”) e gostaria de saber se posso utilizar esses mesmos números que você forneceu para o ns1 e ns2 acima.
    Desde já agradeço.

    Responder
    1. wosh1ngton Autor do post

      Primeiramente, obrigado pelo comentário.
      Quanto a sua pergunta, sim, os IPs são exemplificativos e foram obtidos de maneira aleatória,
      você pode utilizar endereços reais que deverá funcionar, desde que as configurações estejam de acordo.

      Responder
  7. Anderson

    Obrigado pelo artigo e também tenho a mesma dúvida dos amigos acima, sou obrigado a ter um segundo ip na minha maquina ou obrigado a ter um segundo servidor dns para conseguir apontar dentro do site registro.br para o meu servidor criado?

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *