DNS Debian · 3 min read · Oct 02, 2025
Construindo Um Sistema DNS Debian
Construindo Um Sistema DNS Debian
Versão 1.0
Autor: Joe Topjian
OK, este é o último artigo sobre DNS… por um tempo, pelo menos.
Este artigo mostrará como construir um sistema DNS completo com Debian. Isso inclui um servidor Master, um servidor Slave, DDNS e um monte de DNSSEC. Estarei usando o BIND 9 para o servidor.
O Servidor Master
Primeiro, vamos colocar nosso servidor Master em funcionamento. Como o BIND é conhecido por ter sua cota de exploits, vamos colocá-lo em uma prisão chroot. Não vou cobrir isso, pois Falko escreveu um excelente guia sobre isso aqui.
Depois de ter tudo preso, faça o RNDC funcionar. RNDC é uma pequena ferramenta de linha de comando para controlar o BIND. Para usá-lo, copie o conteúdo de /etc/bind/rndc.key para /etc/bind/named.conf. Reinicie o BIND e você está pronto para começar. Agora você pode usar o RNDC para interagir com o BIND em vez de trabalhar diretamente com o BIND. Para mais informações sobre os comandos do RNDC, veja aqui.
Em seguida, é hora de criar o arquivo de zona. Para este exemplo, vou usar o TLD fictício hemingway. Não há razão realmente – apenas porque posso e sei com certeza que nunca entrará em conflito com um nome de domínio real.
Para organização, criei dois diretórios para armazenar os arquivos de zona, um master e um slave – para armazenar arquivos de zona master e slave, respectivamente.
/etc/bind/zones/master
/etc/bind/zones/slave
Não se esqueça de editar /etc/bind/named.conf.options e mudar a opção de diretório para “/etc/bind”.
O arquivo de zona ficará assim ( /etc/bind/zones/master/master.hemingway):
| $ORIGIN hemingway $TTL 1d @ IN SOA ns1 hostmaster ( 2005103008 ; serial 43200 900 604800 10800 ) NS hemingway. A 127.0.0.1 |
A zona reversa para o 192.168.1.0/24 ( /etc/bind/zones/192.168.1.rev) ficará assim:
| $TTL 1d ; $ORIGIN 1.168.192.IN-ADDR.ARPA. @ IN SOA ns1.hemingway. hostmaster.hemingway. ( 2005103001 2h 15m 2w 3h ) IN NS ns1.hemingway. IN NS ns2.hemingway. |
Agora edite /etc/bind/named.conf.local com as novas zonas:
| zone "hemingway" { type master; file "zones/master/master.hemingway"; }; |
| zone "1.168.192.IN-ADDR.ARPA" { type master; file "zones/192.168.1.rev"; }; |
Recarregue o DNS e verifique seus logs. Você não deve ter erros, mas você nunca sabe…
rndc reload
Agora que o BIND sabe qual domínio hospedar, é hora de adicionar alguns nomes de host a ele. Usaremos DDNS para isso. Para configurar o DDNS, você pode seguir meus artigos sobre DDNS aqui.
Para realmente adicionar os hosts com DDNS, vou usar meu script ddns.py.
ddns.py add jake.hemingway A 192.168.1.11
ddns.py add bill.hemingway A 192.168.1.12
ddns.py add robert.hemingway A 192.168.1.13
ddns.py add brett.hemingway A 192.168.1.14
Os arquivos PTR correspondentes também foram adicionados, mas estou pulando isso para economizar espaço.
Agora temos um servidor DNS Master totalmente funcional resolvendo quaisquer nomes de host que lhe dermos.
O Servidor Slave
Agora que o servidor Master está configurado, é hora de passar para o Slave. Em outra máquina, configure uma instalação do BIND em prisão, assim como o Master.
O Slave puxará transferências de zona do Master. Como essas transferências de zona vão pela rede em texto simples, vamos querer protegê-las.
Em ambos os arquivos /etc/bind/named.conf.options do master e do slave, adicione o seguinte
| dnssec-enable yes; |
Usando o comando dnssec-keygen descrito aqui, crie uma chave. Adicione o hash MD5 a uma nova declaração de chave em ambos os arquivos /etc/bind/named.conf:
| key "TRANSFER" { algorithm hmac-md5; secret "jXc2Lreaw4QHHTb/MjiHAw=="; }; |
No master, adicione a seguinte declaração de servidor a /etc/bind/named.conf:
| server IP-OF-SLAVE { keys { TRANSFER; }; }; |
No slave, faça o inverso:
| server IP-OF-MASTER { keys { TRANSFER; }; }; |
No master, adicione o seguinte aos blocos de zona em /etc/bind/named.conf.local:
| allow-transfer { key TRANSFER; }; |
O bloco de zona no Slave deve ficar assim:
| zone hemingway { type slave; file "zones/slave/slave.hemingway"; masters { IP-OF-MASTER; }; allow-notify { IP-OF-MASTER; }; }; |
Finalmente, certifique-se de que ambos os servidores tenham seus relógios sincronizados. As transferências de zona não ocorrerão se não estiverem.
Uma vez que você tenha terminado, inicie o servidor slave. Você deve agora ter um novo arquivo em /etc/bind/zones/slave/ da transferência de zona. Se não tiver, verifique seus logs – eles são muito verbosos com erros.
Finalizando
É isso! É muito trabalho e eu realmente passei por cima, mas isso deve colocá-lo em funcionamento. Para referência e mais informações, por favor, leia meus artigos sobre DDNS aqui e consulte o maravilhoso livro Pro DNS e BIND (não é uma propaganda – é realmente um bom livro!).
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.