Home / Dicas e Tutoriais / Criando um Servidor de DNS no Ubuntu 14.04

Criando um Servidor de DNS no Ubuntu 14.04

Hoje vamos configurar um DNS Server no Ubuntu 14.04 LTS.
Este artigo é voltado mais para usuários avançados, estudantes de TI e Linux e administradores de redes.

Explicação simples:

Um servidor de DNS (Domain Name System), faz a resolução de nomes em sua máquina ou máquinas em sua rede, ou seja, todas as máquinas em sua rede com o DNS configurado para o IP de um  servidor de DNS, irão perguntar a esse servidor, o endereço IP do nome do site que você deseja navegar ou outra máquina de sua rede. Um teste simples é abrir um terminal e digitar ping nome_do_site, e o resultado será o IP deste site, por exemplo: ping www.google.com.br, o resultado será a resposta do IP: 173.194.118.127. Para uma explicação mais ampla, consulte este outro ARTIGO e a Wikipedia.

Geralmente quando temos uma máquina com DHCP ativado, como em nossa casa por exemplo, ela pegará um número de IP aleatório conforme o roteador distribuir e também pegará o DNS do seu provedor, como a NET, Telefônica e etc. A não ser que você altere o endereço de DNS de sua máquina, como por exemplo para um serviço de DNS público, como o do OpenDNS (208.67.0.220, 208.67.222.222) ou o do Google (8.8.8.8 e 8.8.4.4).

dns_clientConfiguração de IP no Windows

Porém, nas empresas, é necessário um servidor de DNS interno, porque as máquinas não precisam resolver apenas os nomes dos sites que as pessoas irão navegar, também precisam resolver os nomes das outras máquinas e servidores na mesma rede.

É aí que entra a necessidade de implementar um servidor de DNS interno.

Isso é uma das primeiras coisas que são feitas em qualquer empresa que esteja começando e deseja criar a sua rede interna com servidores e máquinas que compartilham serviços. Sem isso todos os usuários teriam que decorar alguns endereços de IP da rede ao invés de nomes de máquinas, pois a navegação em um compartilhamento de rede por exemplo, não funcionaria digitando-se o nome da máquina no navegador de arquivos, funcionaria apenas pelo IP.

Obs. Além de servidor de DNS, é importante uma rede interna ter um servidor de DHCP (que pode ser configurado em seu roteador, ou criar um servidor para fazer isso), e veremos isso em outro artigo, e um servidor de domínio (Com o Microsoft Active Directory ou no Linux com o Samba), para criar contas de usuários da sua rede e controlar as permissões e políticas por usuário ou grupos e departamentos, que você pode conferir neste ARTIGO.

Este tutorial divide-se em Quatro Passos:

Primeiro Passo – Configurar IP estático e nome do seu servidor e dompinio DNS
Segundo Passo – Instalar o Software de DNS
Terceiro Passo – Configurar o seu DNS – Bind9
Quarto Passo – Testar a navegação e resolução de nomes

Primeiro Passo – Configurar IP estático e nome do seu Servidor

Você poderá fazer isso no Ubuntu Server 14.04 LTS, ou em um Ubuntu 14.04 Desktop também.
Passarei comando usando o editor de texto Gedit, para quem usa interface gráfica, mas se estiver em um servidor sem interface, use um editor de texto como o vi, vim ou nano.

Configurar rede – IP estático.

sudo gedit /etc/network/interfaces

Adicione as seguintes linhas, mudando conforme sua placa de rede, e sua rede.
No meu caso, minha placa de rede é a eth0, o IP que quero fixar é o 189, minha rede é a 192.168.0.0, e meu gateway atual é o 7.
Confira abaixo as linhas que inseri:

auto eth0
 iface eth0 inet static
 address 192.168.0.189
 netmask 255.255.255.0
 network 192.168.0.0
 broadcast 192.168.0.255
 gateway 192.168.0.7

Se estiver usando um Linux com interface gráfica, poderá configurar pelo software de gerenciamento de conexões de rede na extremidade direita da barra de tarefas, ou pelo Painel de Configurações do Sistema, conforme imagem abaixo, preenchendo com os dados de sua rede e IP desejado:

bind29

Nome do servidor.

Para editar o nome do seu servidor edite o arquivo /etc/hostname.

sudo gedit /etc/hostname

E altere ou mantenha o nome do seu servidor como desejar.
Salve e feche o arquivo.

Repare que o nome da minha máquina é labdns

Agora altere o nome do seu domínio para resolução da sua máquina

Obs. (não se refere ao domínio Ldap, ou Active Directory)

sudo gedit /etc/hosts

Insira uma linha no começo do arquivo e coloque o número do seu IP e nome de seu domínio e apelido de sua máquina.
Este nome completo pode ser qualquer um que quiser.
No exemplo abaixo ficou assim:

192.168.0.189    labdns.site.local labdns
127.0.0.1        localhost
127.0.1.1        labdns

Salve e feche o arquivo

Reinicie sua máquina

Edite o arquivo /etc/resolv.conf

sudo gedit /etc/resolv.conf

E adicione um servidor de DNS para sair para internet, isso será provisório, apenas para instalarmos o software de DNS que usaremos.
No meu caso inseri o DNS do openDNS 208.67.220.220, mas você pode usar o do Google se preferir 8.8.8.8, ou outro de sua escolha.

nameserver 208.67.220.220

Salve e feche.

Segundo Passo – Instalar o Bind9

Agora basta instalarmos o nosso programa de DNS com o seguinte comando:

sudo apt-get install bind9

Depois de instalado vamos ver se o serviço de DNS está no ar.

sudo /etc/init.d/bind9 status

O resultado deverá ser:

* bind9 is running

OK, instalado e rodando.

Terceiro Passo – Configurar o seu DNS – Bind9

Agora iremos configurar nosso DNS através de quatro arquivos:

1 – named.conf.options: 
Definir os DNSs de Foward (encaminhamento)

2 – named.conf.local:
Define e possui o caminho dos arquivos (abaixo) de Zonas de pesquisa Direta e Reversa

3 – db.zona_direta e db.zona_reversa:
Criaremos um arquivo contendo instruções de zona de pesquisa direta, e outra para pesquisa reversa

1 – Configurando o “Foward”

Isso irá servir para que, caso nosso servidor de DNS não consiga resolver um nome ele possa encaminha a pesquisa para outro servidor de DNS.
No meu caso eu adicionarei um outro DNS interno (pode ser o gateway do seu roteador), e um DNS público, como o Google ou o OpenDNS, veja só:

sudo gedit /etc/bind/named.conf.options

E edite as seguintes linhas removendo o “//” e adicionando os DNS públicos:

bind9
(A primeira para meu gateway e a segunda para o DNS do Google)

bind10

Salve e feche

2 – Adicionando as Zonas de Pesquisa:

Vamos editar o arquivo named.conf.local para adicionar uma zona de pesquisa direta e uma zona de pesquisa reversa

Você poderá editá-lo através do comando:

gedit /etc/bind/named.conf.local

Como mencionado anteriormente, poderá usar o “nano” ou o “vi” no lugar do gedit.

Bom, agora basta adicionar as duas zonas de pesquisa ao arquivo, a direta e reversa.
No meu caso, ficou assim:

bind8
// Zona de pesquisa direta
 zone "site.local" {
 type master;
 file "/etc/bind/db.labdns.site.local";
 };
// Zona de pesquisa reversa
 zone "0.168.192.in-addr.arpa" {
 type master;
 file "/etc/bind/db.192";
 };

Obs. Observe que se minha rede é 192.168.0.0, a minha pesquisa reversa será “0.168.192”, e qualquer falha nesse arquivo impedirá que o serviço de DNS suba.

Salve e feche.

3 – Criando os arquivos de Zonas de Pesquisa Direta e Reversa

Agora sim criaremos os arquivo de zona dos quais esta configuração acima está apontando.

Vamos fazer isso copiando 2 arquivos de configuração e renomeando eles ao mesmo tempo e então depois os editando.

Faça isso com os seguintes comandos:

sudo cd /etc/bind
sudo cp db.local db.labdns.site.local
sudo cp db.127 db.192

Liste o conteúdo da pasta para verificar que eles foram criados:

ls

bind11 bind12

Agora vamos editar

gedit db.labdns.site.local

Altere as linhas conforme o nome da sua máquina, nome completo do seu domínio e seu IP, veja só no exemplo abaixo:

Antes:

bind13

Depois de Editado:

Obs. Não se esqueça do ponto após o nome da máquina, nome do domínio ou nome completo.

bind14

Obs. Lembre-se sempre de substituir os nome de máquina, nome completo do servidor e número de IP para o seus dados.

E agora vamos editar o arquivo de pesquisa reversa

sudo gedit /etc/bind/db.192

Depois de editado:

bind16

Na primeira marcação substituí o “localhost” pelo nome completo do servidor e em “root” pelo nome do domínio.
Nas outras 4 linhas abaixo acrescentei o nome de meu servidor na primeira linha, e nome completo do servidor na última com o número do IP do servidor (192.168.0.189). E nas duas linhas do meio inseri duas entradas opcionais, uma para o meu roteador (no meu caso é o 192.168.0.7) e um nome de máquina da minha rede para testar a resolução do nome (linux-iwck com IP 192.168.0.235).
As demais linhas que existiam abaixo eu removi.

Salve e saia.

Pronto, agora o arquivo de configuração “named.conf.local” está configurado com as zonas criadas e apontando para o arquivo de zonas que criamos e editamos “db.labdns.site.local” e “db.192”.

Testando Tudo – 6 Testes

Esta parte é essencial, pois como disse, qualquer errinho na configuração dos arquivos, seja um ponto ou um ponto e vírgula ou a retirada de uma “/” que comenta uma linha, já é razão para o serviço do DNS nem subir.

1 – Reiniciando o Serviço

sudo /etc/init.d/bind9 restart

Se tudo der certo a saída será:

bind17

2 – Verificação dos arquivos de Zonas

Vamos verificar se não há nenhum erro nos arquivos de zonas que criamos com os seguintes comandos:

named-checkzone site.local /etc/bind/db.labdns.site.local

E depois

named-checkzone site.local /etc/bind/db.labdns.site.local

Se der certo, o resultado será como este:

bind23

3 – Teste os hosts que estão dentro de sua zona de pesquisa direta do DNS.

Se tudo estiver certo ele trará a configuração dos hosts que você adicionou para ele resolver.

host -l site.local

bind18

4 – Teste se seu domínio de DNS está correto

nslookup site.local

Se tudo estiver certo, a saída será como esta:

bind19

Também teste com o comando dig.

dig site.local

Se tudo estiver certo a saída será como esta, com os campos que selecionei apontando para o nome de seu servidor e IP:

bind20

5 – Testando a Zona Reversa

Para testar a Zona Reversa de nosso DNS, vamos usar o comando “host” e o IP de nossa máquina que queremos que ele traga o nome dela.
Isso é exatamente o que a resolução reversa faz, ou invés de pesquisar um nome e ele trazer o IP, você pesquisa o IP e ele traz o nome. 😉

bind21
Você poderá adicionalmente dar um ping no nome desta máquina. No meu caso “ping linux-iwck”.
E então mesmo que a máquina não esteja ligada o resultado deverá ser:
(mesmo que a máquina esteja desligada ou não exista e não retorne o ping, no meu caso retornou pois a máquina existe realmente e está ligada)

PING linux-iwck (192.168.0.235) 56(84) bytes of data.

bind25

Como pode ver acima, ele trouxe entre parenteses o IP da máquina. Resolução funcionando.

Então, nossa configuração de zona reversa está correta.

6 – Testando o Foward (encaminhamento) do arquivo “named.local.options”

Para testarmos basta darmos um ping em uma página da internet

ping www.google.com.br

bind26

 7 – Configure o teste o servidor de DNS em uma máquina “client”

Esta etapa deve ser realizada em outra máquina desktop de sua rede.

Se for uma máquina Linux:

Configure pela interface, No ícone de rede (na extremidade da barra de tarefas).
O programa de configuração de rede irá depender de seu ambiente gráfico, mas na maioria deles tem essa aparência:

bind24

Ou edite o arquivo resolv.conf deste Linux.

 sudo gedit /etc/resolv.conf

E edite as seguintes linhas:
(conforme o IP do seu DNS server e nome do domínio do seu DNS server):

nameserver       192.168.0.189
search           site.local

 

Se for uma máquina Windows

bind27

Feito isso, basta pingar nesta máquina “client” o IP do seu servidor de DNS, se estiver pingando, está tudo correto.

bind28

Testes finalizados, tudo ok!

Bom isso aí pessoal, boa sorte nos laboratórios aí.

Abraços,

Cleuber

About Cleuber

Cleuber Silva Hashimoto. Administrador

14 comments

  1. Rapaz, você é o cara! 🙂

    Está de parabéns, belo trabalho!

  2. Ricardo Fabrício

    Valeu demais!! Ajudou muito na atividade que tava fazendo aqui no curso de redes hoje. Valeu MEsmo!!!

  3. Gianluca perini

    Cara, muito bom o tópico.
    Quando rodo o comando :”named-checkzone casa.gian /etc/bind/db.PC-GIAN.casa.gian”, está me retornado o erro: “zone casa.gian/IN: has no NS records
    zone casa.gian/NI:not loaded due to errors.” E os comandos abaixo desse só retornam erro.

    Um outro detalhe: no item 6.2, seria “named-checkzone site.local /etc/bind/db.192”.

    Valeu pela ajuda.

    • Valeu Gianluca!
      Bom, creio que você deve criar as zonas de pesquisa normais e reversas primeiro, depois reinicie o serviço e teste o checkzone novamente.
      Quanto a sintaxe do outro comando mencionado, vou dar uma olhada.

      Valeu.

  4. Carlos Roberto Poletto

    Você está de parabéns.
    Apesar de nunca ter postado nada até agora, estou utilizando suas dicas quase todos os dias.
    Realmente você fez um site muito profissional.
    Os passos a passos são exatos, sem erros. Realmente muito bom.
    Estou tendo uma dificuldade para configurar o DNS.
    Vou explicar melhor:
    Criei um servidor virtual em minha máquina onde rodo o windows. virtualizei o ubuntu server 14.04 pelo virtualbox e estou fazendo todos os testes possíveis.
    Minha máquina é cliente de uma rede wireless, portanto não possuo IP fixo, mas mesmo assim criei um IP reservado no roteador somente para minha máquina virtual e sempre ele pega o mesmo IP, daí no servidor coloquei na interfaces como explicado aqui e tudo funcionando muito bem.
    Todos os passos deste tutorial de DNS foram seguidos e revistos.
    O meu problema começou nos testes, exatamente no teste 3:
    3 – Teste os hosts que estão dentro de sua zona de pesquisa direta do DNS.
    Retornou o seguinte erro:
    host -l site.local
    Host site.local not found: 9(NOTAUTH)
    ; Transfer failed.
    Daí pra frente todos os outros testes falharam.
    Quando pingo dentro do servidor pelo nome está funcionando.
    Quando pingo de outra máquina da rede não funciona.

    Desde já agradeço sua resposta.
    E parabens pelo seu site.

    Carlos Roberto Poletto

    • Obrigado Carlos!
      Procure fixar um endereço IP na máquina para o mesmo que ele está pegando no DHCP. (servidores sempre precisam de IP fixo).
      Bom, daí tente refazer os testes da sessão 3.
      Obs. Em outros casos, quando queremos resolver um nome na rede pelo ip, é necessário editar o arquivo /etc/hosts/ com o endereço de ip seguido do nome da máquina. (por isso a necessidade de ipfixo)

      • Carlos Roberto Poletto

        Ola Cleuber,

        Obrigado pela sua pronta resposta

        Já fiz isso, dê uma olhada no hosts:
        172.16.1.150 vus64bits.site.local vus64bits
        127.0.0.1 localhost
        127.0.1.1 vus64bits
        127.0.0.1 cgidemo.dev
        127.0.0.1 mysite.dev
        # The following lines are desirable for IPv6 capable hosts
        ::1 localhost ip6-localhost ip6-loopback
        ff02::1 ip6-allnodes
        ff02::2 ip6-allrouters

        Pelo jeito não adiantou, continua do mesmo jeito.
        Olhe meus testes:
        host -l site.local
        Host site.local not found: 9(NOTAUTH)
        ; Transfer failed.

        Agora olha esse outro teste
        host -l 172.16.1.150
        150.1.16.172.in-addr.arpa domain name pointer vus64bits.site.local.

        E olha só que coisa estranha:
        ping vus64bits.site.local
        PING vus64bits.site.local (172.16.1.150) 56(84) bytes of data.
        64 bytes from vus64bits.site.local (172.16.1.150): icmp_seq=1 ttl=64 time=0.091 ms
        64 bytes from vus64bits.site.local (172.16.1.150): icmp_seq=2 ttl=64 time=0.102 ms

        PINGOU no próprio servidor, mas nos terminais só funciona ping vus64bits. Se eu colocar vus64bits.site.local não funciona.
        Se eu vou em um navegador qualquer e digito http://vus64bits funciona, porem se eu coloco http://vus64bits.site.local não funciona.
        O fato de funcionar acho que é porque instalei o samba.

        Uma dúvida minha é que se o servidor DNS tem que ser ligado diretamente no roteador e depois distribuir ou rotear para os terminais. Talvez seja esse meu erro, pois ele é um servidor virtualizado pelo virtualbox e está rodando em um terminal windows, portanto ele não é o primeiro a ser ligado.

        Desde já agradeço.

        Abraços.

        Carlos Roberto Poletto

        • hummmm…pode ser isso. Nos meus testes em que passei esse tutorial deu tudo certo, e era uma VM também, com a placa de rede em modo “Bridge” e ip fixo. Assim ele irá usar um ip direto do roteador. Acho que dará certo.

  5. Opa… no servidor DNS todos os testes foram perfeitos.

    Mais na maquina cliente que eu testei… só consigo pingar por nome os dominios locais… os dominios da internet não… só por IP, não por nome.

  6. Irei agora mesmo subscrever seu rss pois eu não posso achar seu
    serviço de e-newsletter. Seu blog tem algum?

  7. Muito bom, excelente didática

Leave a Reply

x

Check Also

Elementary OS 6 Odin Lançado – Confira as Novidades

Desenvolver um sistema operacional não é ...