Domain Name Service (DNS)
Introdução
Domain Name Service (DNS) é um serviço de Internet que mapeia endereços IP e nomes de domínio totalmente qualificados (FQDN) uns aos outros. Desta forma, o DNS alivia a necessidade de lembrar os endereços IP. Os computadores que executam DNS são chamados servidores de nomes. O Ubuntu é fornecido com BIND (Berkley Internet Naming Daemon), o programa mais comum utilizado para manter um servidor de nomes no Linux.
Instalação
Em um prompt de terminal, digite o seguinte comando para instalar o dns:
sudo apt install bind9
Um pacote muito útil para testar e solucionar problemas de DNS é o pacote dnsutils. Muitas vezes essas ferramentas já estarão instaladas, mas para verificar e/ou instalar o dnsutils digite o seguinte:
sudo apt install dnsutils
Configuração
Servidor de nomes em cache
Primeiro iremos configurar o servidor de nomes em cache
sudo nano /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
auth-nxdomain no; # conform to RFC1035
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
// listen-on-v6 { any; };
listen-on port 53 { localhost; 192.168.0.0/24; };
allow-query { localhost; 192.168.0.0/24; };
forwarders { 8.8.8.8; 8.8.4.4; };
recursion yes;
};
Agora o servidor está escutando a porta 53 e aceitando conexões da nossa LAN, e ainda definimos dois servidores que são usados caso nosso DNS não resolva algo ele redireciona para eles, no caso estamos usando os servidores da Google (8.8.8.8 e 8.8.4.4).
Após editar o arquivo, salve-o e digite o seguinte comando:
sudo systemctl restart bind9.service
DNS Primario
Para adicionar uma zona DNS ao BIND9, transformando o BIND9 em um servidor primário, edite o arquivo a seguir:
sudo nano /etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
Adicionamos o FQDN example.com
a nossa Zona de DNS.
Agora criaremos o arquivo da zona do FQDN, a partir de um template, digite o seguinte comando:
sudo cp /etc/bind/db.local /etc/bind/db.example.com
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA example.com. root.example.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.example.com.
@ IN A 192.168.0.200
@ IN AAAA ::1
ns IN A 192.168.0.200
Atenção!
Sempre que você alterar esse arquivo, lembre-se de incrementar o Serial antes de reiniciar o serviço do bind. No exemplo o arquivo criado já terá o Serial incrementado para 2.
Agora que a zona está configurada e resolvendo nomes para endereços IP, uma zona reversa precisa ser adicionada para permitir que o DNS resolva um endereço para um nome.
Vamos editar novamente o arquivo onde adicionamos nossa zona, digite o seguinte comando:
sudo nano /etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192";
};
Novamente iremos criar nosso arquivo de zona, utilizando um template, digite o seguinte comando:
sudo cp /etc/bind/db.127 /etc/bind/db.192
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ns.example.com. root.example.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.
10 IN PTR ns.example.com.
Tudo certo, agora só reiniciar o serviço do Bind, digite o comando:
sudo systemctl restart bind9.service
Testando
Primeiro vamos verificar se está tudo certo, digite o comando:
named-checkzone example.com /etc/bind/db.example.com
A mensagem deve ser OK
, sendo diferente, existem problemas a serem solucionados.
Escolhemos o Windows 10 para efetuar o teste, definimos nosso dns como primario e executamos o comando ping ns.example.com
no cmd, e o resultado foi como esperado, fomos redirecionados para o 192.168.0.200
.
Considerações
Não criamos o servidor secundário, mas é altamente recomendado ter dois servidores DNS, dessa forma mantendo a disponibilidade dos serviços em casos de queda de energia por exemplo. O material oficial apresentado nas referências desse documento contém a configuração do servidor secundário.