Usando o Raspberry PI como Servidor de nomes (DNS)
Introdução
Seja por razões de performance ou pessoais, usar o RaspberryPI como servidor de nomes pode ser muito útil.
Eu, por exemplo, utilizo o RPi como servidor web e pretendo implementar projetos que devem ser acessados através de nomes (como http://intranet.raspi ou http://jardim.intranet.raspi). Dá pra fazer isso alterando o arquivo hosts local, mas é mais divertido fazer isso configurando um servidor de nomes no RPi.
De quebra, ganho performance na resolução de nomes externos, que ficarão em cache no RPi.
Em resumo: se eu digitar google.com, preciso abrir a página do Google mas, por outro lado, se eu digitar jardim.intranet.raspi, quero abrir a página para controlar a irrigação e as luzes do meu jardim.
Antes de continuar, tenha certeza de que seu equipamento está atualizado:
sudo apt update
sudo apt upgrade
Bind9
Vou usar o Bind9 pra fazer isso. O Bind9 é um servidor de nomes muito conhecido e fácil de configurar.
Acesse o seu RPi e, no console, digite:
sudo apt install bind9 dnsutils
Com isso instalamos o bind9 e algumas ferramentas para consultas e testes.
Configurando o DNS
Para alterar as propriedades e fazer a coisa toda funcionar, vamos editar o arquivo /etc/bind/named.conf.options pra ficar desse jeito:
acl internals {
127.0.0.0/8;
192.168.0.0/24;
};
options {
directory "/var/cache/bind";
forwarders {
1.1.1.1;
1.0.0.1;
8.8.8.8;
8.8.4.4;
};
listen-on port 53 {
127.0.0.1;
192.168.0.14;
};
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { none; };
allow-query {
internals;
};
allow-transfer {
none;
};
allow-recursion {
internals;
};
O arquivo deve estar 100% livre de erros. Você pode confirmar isso usando o comando sudo named-checkconf. Se estiver tudo certo, nada aparecerá na saída. Reinicie o serviço com sudo service bind9 restart.
Perceba que, agora, o servidor de nomes é o seu RaspberryPI, então você precisa alterar o arquivo resolv.conf usando sudo nano /etc/resolv.conf para usar o servidor local. O meu ficou assim:
nameserver 192.168.0.14
Troque o IP pelo do seu RPi. Aproveita também para configurar um IP fixo pra ele.
1, 2, 3, testando...
É hora do teste. Primeiro vamos ver se o Bind9 está fazendo o serviço direito usando dig google.com.br (ou qualquer outro endereço externo). A saída deve ser:
pi@raspi:~ $ dig google.com.br
; <<>> DiG 9.10.3-P4-Raspbian <<>> google.com.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4579
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.br. IN A
;; ANSWER SECTION:
google.com.br. 299 IN A 172.217.30.3
;; AUTHORITY SECTION:
. 12583 IN NS k.root-servers.net.
. 12583 IN NS j.root-servers.net.
. 12583 IN NS m.root-servers.net.
. 12583 IN NS h.root-servers.net.
. 12583 IN NS b.root-servers.net.
. 12583 IN NS e.root-servers.net.
. 12583 IN NS a.root-servers.net.
. 12583 IN NS f.root-servers.net.
. 12583 IN NS d.root-servers.net.
. 12583 IN NS c.root-servers.net.
. 12583 IN NS g.root-servers.net.
. 12583 IN NS i.root-servers.net.
. 12583 IN NS l.root-servers.net.
;; Query time: 196 msec
;; SERVER: 192.168.0.14#53(192.168.0.14)
;; WHEN: Fri Mar 15 21:31:18 -03 2019
;; MSG SIZE rcvd: 269
pi@raspi:~ $
Esteja atendo para duas coisas: o endereço do site que você usou para teste (no caso do google.com.br, 172.217.30.3) e o SERVER, que deve ser o IP do seu RPi.
Perceba que o tempo de resposta (aqui na minha internet) foi de 196 milissegundos. Executando novamente o dig google.com.br, o tempo caiu para 3 milissegundos! Só por isso já vale a pena configurar o DNS localmente (sua internet ganha muita velocidade na resolução de nomes). Faça o teste na sua rede aí e confira. Isso irá se repetir sempre que alguém acessar um endereço novo e a otimização estará disponível a partir do segundo acesso.
Aplicando o novo DNS
Agora você precisa configurar a sua rede para usar o novo DNS. Existem muitas maneiras de fazer isso e esse não é o foco desse post. Minha recomendação é que configure o seu roteador para fornecer o endereço do DNS para os clientes DHCP, assim todos os seus equipamentos se beneficiarão disso.
Criando a zona local
Agora vou configurar a zona local, para administrador os endereços que deverão ser resolvidos localmente, direcionando o nome digitado (intranet.local, por exemplo) para o IP do servidor correspondente. Isso será feito através de sudo nano /etc/bind/named.conf.local.
zone "intranet.raspi" {
type master;
file "/etc/bind/intranet.raspi";
};
Minha zona se chamará intranet.raspi (raspi é o hostname do meu RPi). Ela é do tipo master e o arquivo de configuração está marcado ali. É uma boa ideia manter os nomes da zona e do arquivo iguais pra ficar mais fácil encontra-los depois.
Agora vou editar o arquivo da zona usando sudo nano /etc/bind/intranet.raspi.
$TTL 604800
@ IN SOA intranet.raspi. www.intranet.raspi. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS intranet.raspi.
@ IN A 192.168.0.14
jardim IN A 192.168.0.14
O que você precisa mesmo entender aqui é que SOA determina o nome do domínio (intranet.raspi). Os números que seguem são os tempos, em segundos, que cada ação daquela irá acontecer (refresh, retry, etc.). Serial é um número que deve ser único para cada zona configurada.
Mais abaixo temos a lista de endereços. As duas primeiras linhas fazem referência ao próprio servidor.
A última linha contém o subdomínio "jardim".
Essa configuração me permite acessar dois endereços locais: intranet.raspi e jardim.intranet.raspi. Se for necessário, posso criar um novo subdomínio adicionado uma nova linha, assim:
blog IN A 192.168.0.14
Ou ainda...
blog IN CNAME intranet.raspi.
E, assim, o endereço blog.intranet.raspi será resolvido localmente.
É claro que, para que tudo isso funcione, é preciso que o servidor web do RPi esteja devidamente configurado e com os vhosts em pleno funcionamento.
Comentários
Postar um comentário