Domains Names System, em português, sistema de nomes de domínios, é uma plataforma de serviços que faz a conversão entre nomes e endereços de computador. Ele opera na porta 53 da pilha TCP/IP.
Basicamente, computadores só compreendem endereços numéricos, no caso da Internet, endereços IP. Mas lembrar endereços numéricos e tão ou mais complexo do que lembrar dos números de telefone de todas as pessoas que conhecemos ao longo da vida. O que fazemos para lidar com tantos telefones é usar agendas indexadas que associam os nomes dessas pessoas aos seus telefones, assim, quando queremos falar com alguém, pesquisamos nessa agenda pelo nome que se associará ao número de telefone desta pessoa.
O DNS funciona de forma similar. Diversos sistemas espalhados pela Internet indexam as redes (domínios de rede) pelos nomes que são humanamente compreensíveis, e associam esses nomes aos endereços IP reais dessas redes. Quando digitamos o endereço de um site no navegador, estamos digitando um nome de uma rede. O navegador então, faz uma consulta aos DNS que ele conhece para obter os endereços reais dessa rede, e finalmente nos direciona para ela, obtendo seu conteúdo.
Execute o comando abaixo como "root" para instalar o aplicativo "Bind9", responsável pelo sistema de nomes no Linux:
apt install bind9
Caso ocorra alguma falha durante a instalação, tente comandar:
apt install bind9 --fix-missing
O comando abaixo exibe a versão do aplicativo e serve para comprovar sua instalação e funcionamento:
named -v
Se tudo está correto, você obterá a versão do Bind 9, parecida com:
BIND 9.16.27-Debian (Extended Support Version) <id:96094c5>
Para controlar o serviço usamos o comando "systemctl", onde, para iniciar o serviço, comandamos:
systemctl start named
O comando abaixo faz com que o serviço seja iniciado junto com o sistema:
systemctl enable named
Podemos verificar o status do Bind usando o seguinte comando:
systemctl status named
Na saída do comando, em algum momento, deve aparecer a informação:
named.service - BIND Domain Name Server
Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-08-22 08:07:18 UTC; 26s ago
Docs: man:named(8)
Se precisar reiniciar o serviço, após uma configuração, por exemplo, comandamos:
systemctl restart named
E, para interromper o serviço:
systemctl stop named
Anote esses comandos de "start", "stop" e "restart" porque eles são essênciais, não só para o DNS, mas para, praticamente, todos os serviços instalados no Debian.
A resolução de nomes é um banco de dados que converte nomes de sistemas no seu endereço IP correspondente e vice-versa. Assim, a configuração consiste, basicamente na criação de duas "tabelas de zonas", uma para a "zona direta" que converte nomes em endereços IP e outra para a "zona reversa" que converte endereços IP no respectivo nome de sistema.
Praticamente toda a configuração fica nos arquivos do diretório "/etc/bind/", então, já acesse este diretório pelo terminal, comandando:
cd /etc/bind/
Para que o DNS funcione você terá que, neste momento, escolher um nome para sua rede e, em consequência, para seu(s) servidor(es). Nos exemplos, usarei o nome de domínio "software.livre" e onde teremos os seguintes hosts:
software.livre → Wildcard que aponta para o servidor principal;
ns.software.livre → Servidor de nomes, responsável pelo domínio "software.livre";
server.software.livre → Servidor principal;
www.software.livre → Servidor de hospedagem do site principal.
ATENÇÃO! Nos exemplos usarei o domínio local "software.livre", mas, você pode, opcionalmente, substituir pelo domínio escolhido para suas aplicações. Só anote para não esquecer...
Para começar, edite o arquivo "/etc/bind/named.conf.options" para configurar o encaminhamento. A consulta DNS será encaminhada para os estes servidores quando o servidor DNS local não puder resolver a consulta.
Para editar o arquivo, comande:
mousepad /etc/bind/named.conf.options
Com muita atenção, localize, descomente, removendo o "//" e edite o seguinte trecho, sem alterar mais nada:
forwarders {
208.67.222.222;
208.67.220.220;
};
Salve o arquivo e feche o editor.
IMPORTANTE! Em todas as configurações que vamos fazer, usaremos, além o IP do nosso servidor DNS (192.168.99.1), também os endereços "208.67.222.222" e "208.67.220.220". Esse são os servidores DNS públicos do serviço "OpenDNS" da Cisco. Você pode trocar estes endereços por outros como, por exemplo, os servidores DNS públicos do Google (8.8.8.8 e 8.8.4.4) ou ainda pelos servidores DNS do seu provedor de Internet.
ATENÇÃO! O sistema Linux é fortemente "case-sensitive", ou seja, diferencia letras maiúsculas de letras minúsculas. Tenha atenção a esse detalhe na hora de programar.
INDENTAÇÃO!
O Linux "ama" tabulações. Use tabulações. Evite excesso de espaços. Prefira tabulações. A tecla [Tab] é sua amiga. Tabulações são mais leves.
1tab = 4spaces em média. Vamos preservar as tabulações.
Agora, edite o arquivo "/etc/bind/named.conf.local" para definir as zonas de pesquisa direta e reversa para nosso domínio, comandando:
mousepad /etc/bind/named.conf.local
Mais uma vez, com bastante atenção, inclua as linhas abaixo no arquivo:
# Define o arquivo de configuração da "zona direta":
zone "software.livre" {
type master;
file "/etc/bind/forward.software.livre";
};
# Define o arquivo de configuração da "zona reversa":
zone "99.168.192.in-addr.arpa" {
type master;
file "/etc/bind/reverse.software.livre";
};
← Adicione uma linha em branco aqui!
Salve e feche o arquivo quando terminar. Em seguida, verifique se há algum erro no arquivo de configuração usando o seguinte comando:
named-checkconf
Se a configuração estiver correta, nada deve acontecer na saída do comando. Somente erros serão informados
Uma breve explicação do arquivo de configuração é mostrada abaixo:
software.livre é nossa zona de encaminhamento, ou seja, nosso domínio local;
99.168.192.in-addr.arpa é nossa zona reversa, ou seja, resolve IP para nome. Observe que o começo é, justamente, o Id da rede ao contrário;
forward.software.livre é o nome do arquivo de zona de pesquisa direta onde a configuração dos nomes será feita;
reverse.software.livre é o nome do arquivo de configuração da zona de pesquisa inversa.
Agora, precisamos criar os dois arquivos de configuração das zonas de pesquisa direta e reversa para o domínio "software.livre".
Uma zona de pesquisa direta é uma zona DNS que converte um nome em um endereço IP. Quando um computador solicita o endereço IP de um nome de host específico, a zona de pesquisa direta é verificada e o resultado desejado é retornado. Uma zona de pesquisa inversa é o oposto de uma zona de pesquisa direta e converte um endereço IP no nome de domínio totalmente qualificado (FQDN).
Se você ainda não está no diretório de configurações do Bind9, acesse-o pelo comando:
cd /etc/bind/
Copie um arquivo de zona de pesquisa direta e reversa de amostra, assim não precisamos criá-los "do zero". Execute os seguintes comandos:
cp db.127 reverse.software.livre
cp db.local forward.software.livre
Abra o arquivo de pesuisa da "zona direta", comandando:
mousepad forward.software.livre
Edite as linhas com bastante atenção, para ter o seguinte resultado:
$TTL 604800
@ IN SOA ns.software.livre. root.ns.software.livre. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns.software.livre.
ns IN A 192.168.99.1
www IN A 192.168.99.1
@ IN AAAA ::1
← Adicione uma linha em branco aqui!
Observe que, nestes arquivos, todas as referências ao nome de domínio "software.livre", terminam com um ponto (.)!
Salve e feche o editor, em seguida, abra e edite o arquivo de "zona reversa" com o comando:
mousepad reverse.software.livre
Ele deve ter exatamente o seguinte conteúdo:
$TTL 604800
@ IN SOA ns.software.livre. root.ns.software.livre. (
1
604800
86400
2419200
604800 )
@ IN NS ns.software.livre.
ns IN A 192.168.99.1
1 IN PTR ns.software.livre.
← Adicione uma linha em branco aqui!
Salve e feche o editor.
Agora, precisamos configurar nosso servidor como DNS primário da rede, inclusive, informar isso ao próprio servidor, então, abra, no editor, o arquivo "/etc/resolv.conf", onde esta informação é armazenada nos sistemas Linux. Comande:
mousepad /etc/resolv.conf
E, troque o conteúdo do arquivo por:
search software.livre
nameserver 192.168.99.1
nameserver 208.67.222.222
nameserver 208.67.220.220
Salve o arquivo e reinicie o serviço para aplicar as novas configurações, comandando:
systemctl restart named
Antes de outros testes, vamos validar as configurações nos arquivos de zona direta, comandando:
named-checkzone software.livre /etc/bind/forward.software.livre
O resultado deve ser como:
zone forward.exampledomain/IN: loaded serial 2
OK
Vamso validar agora, a configuração da zona reversa, comandando:
named-checkzone 99.168.192.in-addr.arpa /etc/bind/reverse.software.livre
Se tudo está certo, o resultado será:
zone reverse.exampledomain/IN: loaded serial 1
OK
Se alguma mensagem diferente aparecer, abra o arquivo novamente e verifique a sintaxe das configurações, principalmente as tabulações...
Dada a importância do serviço de nomes, os sistemas operacionais modernos tem diversas ferramentas para diagnosticar seu funcionamento, como é o caso do "named-checkzone" e "named-checkconf" que usamos até agora. Vamos usar outras ferramentas para averiguar se a resolução de nomes está funcional.
Ainda no terminal, comande:
dig ns.software.livre
O resultado deve ser algo como:
; <<>> DiG 9.16.27-Debian <<>> ns.software.livre
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63637
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 40d93d44b7ca565601000000628c5ad56dcac6f0b1514a42 (good)
;; QUESTION SECTION:
;ns.software.livre. IN A
;; ANSWER SECTION:
ns.software.livre. 604800 IN A 192.168.0.100
;; Query time: 0 msec
;; SERVER: 192.168.99.1#53(192.168.99.1)
;; WHEN: Mon Ago 22 08:11:01 UTC 2022
;; MSG SIZE rcvd: 101
Confuso, eu sei, mas observe que, aparece em algum lugar "NOERROR" e, no final, o endereço IP do servidor (192.168.99.1), indicando que a zona direta está funcionando.
Agora, comande:
dig -x 192.168.99.1
Mais uma vez, a saída será parecida com:
; <<>> DiG 9.16.27-Debian <<>> -x 192.168.99.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30781
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 4a5142404834525201000000628c5ae3121db292d16d361a (good)
;; QUESTION SECTION:
;1.99.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.99.168.192.in-addr.arpa. 604800 IN PTR ns.software.livre.
;; Query time: 0 msec
;; SERVER: 192.168.0.100#53(192.168.0.100)
;; WHEN: Mon Ago 22 08:11:15 UTC 2022
;; MSG SIZE rcvd: 125
Comprovando que a "zona reversa" está funcionando.
Além do comando "dig" temos o "nsookup", também disponível no windows, que tem uma saída menos detalhada, porém, mais limpa. Teste-o, comandando:
nslookup ns.software.livre
A saída será parecida com:
Server: 192.168.99.1
Address: 192.168.99.1#53
Name: ns.software.livre
Address: 192.168.99.1
Isso indica que a resolução de nomes está funcional.
Agora, para testar a resolução de IP, comande:
nslookup 192.168.99.1
A saída esperada deve ser:
100.0.168.192.in-addr.arpa name = nameserver.exampledomain.com.
Se deu tudo certo, parabéns! O servidor DNS é um dos mais "chatinhos" de configurar em uma rede.
Por padrão, toda vez que iniciamos o Linux ele reescreve o arquivo de resolução de nomes ("/etc/resolv.conf"), conforme as configurações do servidor DHCP do provedor, conectado na interface de entrada (enp0s3 → NAT, no VirtualBox).
Para que isso não cocorra e ele mantenha as configurações dos nossos servidores DNS, vamos instalar o aplicativo "resolvconf". Comande:
apt update
apt install resolvconf
Agora, abra o arquivo de configuração do "resolveconf", comandando:
mousepad /etc/systemd/resolved.conf
Localize , descomente removendo o hash ("#") da frente e edite as linhas abaixo:
•••
DNS=192.168.99.1 208.67.222.222 208.67.220.220
•••
Domains=software.livre
•••
Salve e feche o editor.
Agora, abra o arquivo de configuração das interfaces de rede e edite-o comandando:
mousepad /etc/network/interfaces
De ve ficar assim:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# Configuração da interface de loopback - Não altere
auto lo
iface lo inet loopback
# Configuração da interface local (Acesso ou hospedeiro) como DHCP
auto enp0s3
iface enp0s3 inet dhcp
# Configuração da interface do servidor (rede interna) com IP estático
auto enp0s8
iface enp0s8 inet static
address 192.168.99.1
netmask 255.255.255.0
dns-nameserver 192.168.99.1
dns-nameserver 208.67.222.222
dns-nameserver 208.67.220.220
dns-search software.livre
← Adicione uma linha em branco aqui!
Salve, feche o editor e, na sequência, reinicie a rede, comandando:
ifdown -a
ifup -a
Exiba o arquivo do resolver:
mousepad /etc/resolv.conf
Para ver se está como:
•••
nameserver 192.168.99.1
nameserver 208.67.222.222
nameserver 208.67.220.220
search software.livre
•••
Se tudo deu certo, para testar o domínio mais uma vez e encerrar os ajustes, faça:
ping software.livre
Teste oo outros hosts também, com os comandos:
ping www.software.livre
ping ns.software.livre
Precisamos avisar ao nosso servidor DHCP para configurar os clientes da rede de forma correta, usando o novo domínio. Abra o arquivo de configuração do UDHCP, comandando:
mousepad /etc/udhcpd.conf
Edite as linhas corretas para ficar como:
start 192.168.99.100
end 192.168.99.200
interface enp0s8
max_leases 100
option dns 192.168.99.1 208.67.222.222 208.67.220.220
option subnet 255.255.255.0
option router 192.168.99.1
option domain software.livre
option lease 864000
Salve e feche o editor e, na sequencia, reinicie o serviço DHCP, comandando:
systemctl restart udhcpd
À princípio, nada precisa ser feito nos clientes. Basta reiniciar a interface de rede deles para obter novas configurações via DHCP, já que tudo já foi feito no cliente.