Tutorial: Instale seu Servidor DNS no Linux com Bind9 Passo a Passo

Nesse tutorial vamos dar todo o passo a passo para que você instale uma configuração básica do servidor DNS BIND9 no Linux.

Criado para resolver os problemas relacionados a tradução de nomes e IPs foi criado o DNS (Domain Name System) em 1983. 

O DNS foi criado para ter uma estrutura hierárquica e com um banco de dados distribuídos geograficamente.

Instalando o BIND9 no Linux

Inicialmente, vamos instalar o Bind9 no Linux (Ubuntu). Para isso vamos iniciar fazendo o update dos repositórios do apt e depois vamos usar o comando para instalar o bind9.

Atualizar repositórios e fazer upgrade:

sudo apt update && sudo apt upgrade

Instalar o bind9 com apt:

sudo apt install bind9

Testando a instalação do bind9

Depois de instalar, vamos verificar se o servidor está operacional e funcionando corretamente. Para isso, vamos usar os comandos abaixo.

named -v

Em seguida vamos verificar o status do bind9 com os comandos abaixo.

sudo systemctl status bind9

ou

sudo service bind9 status

Para sair da tela de status do “systemctl status bind9” e do “service bind9 status” pressione CTRL + c.

Configurando o bind9 no Linux

Agora, vamos fazer a configuração do bind9 e para isso, vamos entrar no diretório de configuração que fica em “/etc/bind“.

Para entrar no diretório de configuração do bind9 vamos usar o comando abaixo.

cd /etc/bind/

Em seguida, podemos usar o comando “ls” para listar o conteúdo do diretório “/etc/bind“.

ls

Depois de usar o comando “ls” vamos ver 2 arquivos que vamos precisar alterar: “/etc/bind/named.conf.options” e “/etc/bind/named.conf.local“.

Antes de alterar os arquivo, vamos criar copias de segurança desses arquivos usando os comandos abaixo.

sudo cp named.conf.options named.conf.options_OLD
sudo cp named.conf.local named.conf.local_OLD

Configurando o named.conf.options

Vamos usar um editor para configurar o arquivo “named.conf.options“. Em nosso caso, vamos usar o editor nano. Para isso vamos usar o comando abaixo para abrir o arquivo “named.conf.options“.

sudo nano named.conf.options

Em seguida, vamos introduzir o texto abaixo no final do arquivo de configuração e antes do “};”.

A figura abaixo mostra o local correto de onde introduzir o texto que vamos usar como exemplo.

Abaixo está o texto que vamos adicionar na configuração.

listen-on-v6 { none; };
listen-on port 53 { localhost; 192.168.56.0/24; };
allow-query { localhost; 192.168.56.0/24; };
forwarders { 8.8.8.8; };
recursion yes;

Abaixo temos a descrição dos campos usados na configuração.

  • listen-on-v6 { none; }; aqui estamos indicando que não vamos usar IPv6.
  • listen-on port 53 { localhost; 192.168.56.0/24; };= aqui estamos indicando que o servidor DNS vai escutar na porta 53 e vai atender ao localhost(127.0.0.1) e a nossa rede que é a “192.168.56.0/24“.
  • allow-query { localhost; 192.168.56.0/24; }; = os Endereços que podem fazer requisição ao nosso DNS.
  • forwarders { 8.8.8.8; };= Para domínios externos vamos encaminhar para DNS externo. Nesse caso, estamos usando o DNS do google para fazer os encaminhamentos externos.
  • recursion yes;= Vamos ativar as requisições recursivas.

Lembre-se que aqui estamos usando como exemplo a rede “192.168.56.0/24” e você precisa adaptar para seu endereço de rede. Além disso, estamos usando o DNS da google para encaminhamento externo e você pode escolher outro DNS como por exemplo o do seu provedor de Internet.

Configurando o named.conf.local

Agora, vamos configurar o seguindo arquivo do bind9, o “named.conf.local”. Para isso, precisamos ir até o diretório “/etc/bind/“.

cd /etc/bind/

Em seguida vamos usar o editor nano para editar o arquivo “named.conf.local”.

sudo nano named.conf.local

Dentro do arquivo “named.conf.local“, vamos adicional no final o texto abaixo como na figura a seguir.

zone "labredes.teste" {
type master;
file "/etc/bind/forward.labredes.teste";
};
zone "56.168.192.in-addr.arpa" {
type master;
file "/etc/bind/reverse.labredes.teste";
};

Abaixo temos a descrição da configuração da zona direta.

  • type master = Define o servidor como mestre para o domínio labredes.teste.
  • file “/etc/bind/forward.labredes.teste” = Define o arquivo de zona direta.

Em seguida, temos abaixo a descrição da configuração da zona reversa.

  • type master = Define o servidor como mestre para a zona reversa.
  • file “/etc/bind/reverse.labredes.teste” = Define o arquivo de zona reversa.

O próximo passo vai ser a criação dos arquivos de zona. Nesse caso, nossos arquivos terão os nomes: “forward.labredes.teste” e “reverse.labredes.teste“.

Criando o arquivo de zona forward

Agora, vamos criar o arquivo de zona forward. Em nosso caso, o arquivo terá o nome: “forward.labredes.teste“. Para criar esse arquivo, vamos usar o comando abaixo.

sudo nano /etc/bind/forward.labredes.teste

Em seguida, vamos inserir o texto abaixo no arquivo de zona forward que criamos.

$TTL    604800
@       IN      SOA     primario.labredes.teste. x.laberedes.teste. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      primario.labredes.teste.
primario       IN      A       192.168.56.12
labredes.teste. IN MX 10 mail.labredes.teste.
www IN A 192.168.56.102
mail IN A 192.168.56.103
web IN CNAME www.labredes.teste.

Abaixo está a descrição de cada campo apresentado na figura do arquivo “forward.labredes.teste“.

  • 0 = Define o tempo de vida (em segundos) para os registros em cache do servidor DNS.
  • 1 = Define o registro SOA (Start of Authority).
  • 2 = Número de série da zona, incrementado a cada alteração.
  • 3 = Tempo que um servidor secundário deve aguardar antes de verificar atualizações.
  • 4 = Tempo que um servidor secundário deve aguardar antes de tentar novamente uma atualização.
  • 5 = Tempo que um servidor secundário deve aguardar antes de descartar informações da zona.
  • 6 = Tempo de armazenamento para registros inexistentes.
  • 7 = Informação do servidor de nomes.
  • 8 = Define o endereço IP do servidor de nomes “primario“.
  • 9 = Define o registro MX (Mail Exchanger) para o domínio, apontando para o servidor de email.
  • 10 = Define o endereço IP do host “www“.
  • 11 = Define o endereço IP do host “mail“.
  • 12 = Define um apelido (CNAME) “web” para o host “www“.

Criando o arquivo de zona reverse

Agora, vamos criar o arquivo de zona forward. Em nosso caso, o arquivo terá o nome: “reverse.labredes.teste“. Para criar esse arquivo, vamos usar o comando abaixo.

sudo nano /etc/bind/reverse.labredes.teste

Em seguida, vamos inserir o texto abaixo no arquivo de zona reverse que criamos.

$TTL    604800
@       IN      SOA     primario.labredes.teste. x.laberedes.teste. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      primario.labredes.teste.
primario IN A 192.168.56.12
12 IN PTR primario.labredes.teste.
102 IN PTR www.labredes.teste.
103 IN PTR mail.labredes.teste.

Abaixo está a descrição de cada campo apresentado na figura do arquivo “reverse.labredes.teste“.

  • 0 = Define o tempo de vida (em segundos) para os registros em cache do servidor DNS.
  • 1 = Define o registro SOA (Start of Authority).
  • 2 = Número de série da zona, incrementado a cada alteração.
  • 3 = Tempo que um servidor secundário deve aguardar antes de verificar atualizações.
  • 4 = Tempo que um servidor secundário deve aguardar antes de tentar novamente uma atualização.
  • 5 = Tempo que um servidor secundário deve aguardar antes de descartar informações da zona.
  • 6 = Tempo de armazenamento para registros inexistentes.
  • 7 e 8 = Informação do servidor de nomes.
  • 9 = Define o nome do host “primario” para o endereço IP “192.168.56.12”.
  • 10 = Define o nome do host “www” para o endereço IP “192.168.56.102”.
  • 11 = Define o nome do host “mail” para o endereço IP “192.168.56.103”.

Reiniciando e Habilitando o BIND9

Agora, vamos reiniciar o servidor DNS BIND9 para que as modificações tenham efeito. Para reiniciar o servidor BIND9 vamos usar o comando abaixo.

sudo systemctl restart bind9

Vamos usar o comando abaixo para habilitar o bind9. Dessa forma, o servidor DNS BIND9 vai ser inicializado junto com o sistema operacional.

sudo systemctl enable named

Verificando se existem erros de configuração no BIND9

Depois de configurar os arquivos do BIND9 vamos usar os comandos abaixo para verificar se existe algum erro na nossa configuração.

Verificar erros de sintaxe no “named.conf.local“.

sudo named-checkconf /etc/bind/named.conf.local

Verificar erros na zona direta (forward).

named-checkzone labredes.teste /etc/bind/forward.labredes.teste

Verificar erros na zona reversa (reverse).

named-checkzone labredes.teste /etc/bind/reverse.labredes.teste

Caso tenha erros, vamos corrigir os erros e reiniciar o servidor com o comando abaixo.

sudo systemctl restart bind9

Se os erros forem apenas nos arquivos de zona, vamos corrigir e podemos reiniciar a zona com o comando abaixo.

sudo rndc reload

Testando o BIND9 localmente

Uma vez configurado o BIND9, vamos fazer alguns testes localmente para ver a resposta do nosso servidor DNS.

O primeiro teste que vamos fazer é verificar a resposta do servidor DNS a uma consulta sobre nosso domínio. Para isso, estamos usando o comando “dig” e em seguida vamos inserir o IP de nosso servidor DNS “192.168.56.12” e depois o nosso domínio “labredes.teste“.

dig @192.168.56.12 labredes.teste

Vamos entender a resposta da consulta a nosso DNS apresentada na figura acima.

  • 1 = “@IP” é o IP de nosso servidor DNS, nesse caso, é o responsável por responder a consulta DNS do comando “dig“.
  • 2 = Aqui está o endereço que queremos consultar. Nesse caso, o endereço é o nosso nome de domínio “labredes.teste“.
  • 3 = Aqui temos a resposta da consulta. Nesse caso podemos ver que o servidor respondeu com informações sobre o registro SOA (Start of Authority) de nosso servidor BIND9.

No segundo teste, vamos verificar a resposta do servidor DNS a uma consulta sobre o nosso servidor de email. Para isso, estamos usando o comando “dig” e em seguida vamos inserir o IP de nosso servidor DNS “192.168.56.12” e depois o nome de nosso servidor de email seguido do nosso domínio “mail.labredes.teste“.

dig @192.168.56.12 mail.labredes.teste
  • 1 = “@IP” é o IP de nosso servidor DNS, nesse caso, é o responsável por responder a consulta DNS do comando “dig“.
  • 2 = Aqui está o endereço que queremos consultar. Nesse caso, o endereço é o nosso nome que demos para nosso servidor de email seguido do nosso domínio “mail.labredes.teste“.
  • 3 = Aqui temos a resposta da consulta. Nesse caso podemos ver que o servidor BIND9 respondeu com o IP do nosso servidor de email192.168.56.103“.

No próximo teste, vamos verificar a resposta do servidor DNS a uma consulta sobre o nosso servidor WEB. Para isso, estamos usando o comando “dig” e em seguida vamos inserir o IP de nosso servidor DNS “192.168.56.12” e depois o apelido e de nosso servidor WEB seguido do nosso domínio “web.labredes.teste“.

dig @192.168.56.12 web.labredes.teste
  • 1 = “@IP” é o IP de nosso servidor DNS, nesse caso, é o responsável por responder a consulta DNS do comando “dig“.
  • 2 = Aqui está o endereço que queremos consultar. Nesse caso, o endereço é o apelido “CNAME” que demos para nosso servidor WEB seguido do nosso domínio “web.labredes.teste“.
  • 3 = Aqui temos a resposta da consulta. Nesse caso podemos ver que o servidor BIND9 respondeu com o nome do servidor WEB “www.labredes.teste” vinculado ao apelido do nosso servidor WEB “web.labredes.teste“. Além disso, a resposta também contém o IP do servidor WEB “192.168.56.102“.

Testando o servidor BIND9 com um cliente

Agora vamos criar uma rede interna para permitir que um host cliente possa usar o nosso DNS BIND9 como servidor de nomes. Para isso, vamos inserir uma segunda máquina na mesma rede que está a máquina do nosso servidor BIND9.

Quem desejar fazer a prova de conceito, pode criar uma rede com o VirtualBox.

Em nosso caso, vamos inserir uma máquina cliente com sistema operacional Lubuntu.

Antes de tudo, precisamos configurar o cliente para apontar para nosso servidor DNS.

Configurando um cliente Lubuntu para apontar para o DNS

Para fazer o host do cliente usar nosso DNS, vamos clicar no símbolo do lubuntu no canto inferior esquerdo.

Em seguida, vamos digitar network na aba de pesquisa.

Depois disso, vamos selecionar a opção “Edit connections”.

Agora, vamos selecionar a interface de rede que vamos usar e depois vamos clicar no símbolo de engrenagem na parte inferior a esquerda.

O próximo passo é escolher a aba “IPv4 Settings” e digitar o IP do nosso servidor DNS BIND9. Depois disso, clique em salvar “Salve”.

Reiniciando a interface do cliente após a nova configuração apontando para o nosso DNS. Para isso, vamos usar o comando abaixo.

sudo systemctl restart NetworkManager

Configurando um cliente Ubuntu para apontar para o DNS

Se você estiver usando um cliente com o Ubuntu, você pode procurar por rede “Network” e clicar no símbolo de engrenagem.

Depois disso, você vai clicar na aba de IPv4 e vai inserir o IP do servidor BIND9. Em seguida, clique em aplicar “Apply”.

Reiniciando a interface do cliente após a nova configuração apontando para o nosso DNS. Para isso, vamos usar o comando abaixo.

sudo systemctl restart NetworkManager

Testando o BIND9 no cliente

Agora que já configuramos a interface do cliente para apontar para nosso DNS BIND9, vamos fazer os testes para ver se o cliente está acessando os endereços que cadastramos no nosso BIND9.

O primeiro teste que vamos fazer é usar o comando “ping” para o endereço “primario” de nosso servidor DNS. Esse teste é importante porque somente o nosso servidor DNS sabe quem é o “primario.labredes.teste“.

Dessa forma, se não apontarmos para nosso servidor DNS não teremos como saber quem é o “primario.labredes.teste“.

Para testar vamos usar o comando abaixo.

ping primario.labredes.teste

Podemos ver que recebemos resposta do comando “ping” e inclusive temos a resposta do servidor BIND9 que está hospedado no IP “192.168.56.12“.

O segundo teste que vamos fazer é usar o comando “dig” para o nome do nosso servidor WEB. Nesse teste, não vamos informar o servidor DNS antes do nome que será consultado.

Dessa forma, o comando vai utilizar o servidor DNS default do host cliente.

Para fazer esse teste vamos usar o comando abaixo.

dig web.labredes.teste

Podemos verificar na consulta com o “dig” que tivemos uma resposta do servidor DNS informando que é um apelido para “www.labredes.teste” e inclusive apresentando o IP “192.168.56.102“.

Veja mais:

SSH: Como criar chave pública

Como usar o Ngrok ?

Instalar Ubuntu 24 em VirtualBox

Como fazer X11 Forwarding com SSH 

Instalar servidor SSH Windows

https://www.isc.org/bind

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer