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).
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:
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:
(A primeira para meu gateway e a segunda para o DNS do Google)
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:
// 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
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:
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.
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:
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á:
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:
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
4 – Teste se seu domínio de DNS está correto
nslookup site.local
Se tudo estiver certo, a saída será como esta:
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:
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.
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.
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
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:
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
Feito isso, basta pingar nesta máquina “client” o IP do seu servidor de DNS, se estiver pingando, está tudo correto.
Testes finalizados, tudo ok!
Bom isso aí pessoal, boa sorte nos laboratórios aí.
Abraços,
Cleuber

Cleuber Silva Hashimoto
AdministradorGestor de Infraestrutura | Suporte | Cibersegurança.
Graduado em Gestão de TI e Pós-graduado em Segurança da Informação e Computação Forense. Fundador da Agência WebGenese e criador do cleuber.com.br
Rapaz, você é o cara!
Está de parabéns, belo trabalho!
Valeu Wagner!
Valeu demais!! Ajudou muito na atividade que tava fazendo aqui no curso de redes hoje. Valeu MEsmo!!!
Que Bom! Valeu Ricardo!
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.
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)
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.
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.
Irei agora mesmo subscrever seu rss pois eu não posso achar seu
serviço de e-newsletter. Seu blog tem algum?
Rapaz, quando eu criei o site tinha, preciso ver agora como está isso, mas é possível você cadastrar meu site em um cliente de leitura de feeds rss.
Estes exemplos podem ajudar:
https://cleuber.com.br/index.php/2016/01/11/como-instalar-o-feedreader-um-bonito-cliente-rss
https://cleuber.com.br/index.php/2016/01/08/como-instalar-o-liferea-no-ubuntu-mint-elementary-os-e-outros
Abraço
Muito bom, excelente didática