Já escrevi alguns artigos sobre configuração de servidor DNS com bind9, nessa referência, para Raspberry. Nesse breve artigo vamos ver como configurar um servidor DNS com DNSMasq, para acelerar o tempo de resolução de nomes, tornando a navegação do seu Raspberry e de sua rede mais rápidos. De quebra, vai poder acessar seus dispositivos da rede por nome.
Instalação do DNSMasq
Essa parte é tão fácil quanto a configuração. Abra um terminal em seu Raspberry e digite os comandos:
sudo su apt-get update apt-get install dnsmasq
Mantenha o terminal aberto como está. Precisamos definir algumas linhas no serviço de DNS para termos nosso servidor DNS com DNSMasq funcional.
Configurar o DNSMasq como servidor DNS
Agora devemos editar o arquivo /etc/dnsmasq.conf para fazermos algumas definições. Tudo estará comentado (com trama no início da linha), então pode colocar as definições a seguir no início do arquivo, sem problemas. Use seu editor preferido. Pelo terminal, sugiro o nano, mas se quiser um editor gráfico, digite:
xdg-open /etc/dnsmasq.conf
Então inclua as linhas:
listen-address=::1,127.0.0.1,<ip do seu RPi>
ATENÇÃO:
Se for utilizar como servidor DNS apenas para o próprio Raspberry, não precisa adicionar o <IP DO RPi>, apenas se quiser servir DNS para sua rede também. Isto é, outros computadores poderão se beneficiar do servidor DNS instalado no Raspberry.
Defina a porta de serviço, sendo por padrão a UDP/53:
port=53
Quando seu servidor DNS não tem referência em cache, ele deve buscar a referência fora. Isso é chamado de forwarding, que é um encaminhamento para a resolução, tornando-se disponível no cache a partir de então. O forwarding é definido na variável server e podemos ter vários apontamentos:
server=8.8.8.8 server=8.8.4.4 server=192.168.1.2
Como já tenho um servidor DNS rodando em outro Raspberry (com bind9), passei ele também para a resolução, que ainda deve ser mais rápido que uma consulta na Internet.
O parâmetro final é a interface a escutar. Podemos optar por eth0, wlan0 ou ambos. No meu caso o Raspberry está conectado por WiFi, então é wlan0 mesmo:
interface=wlan0
Juntando, tudo o que precisa ser adicionado ao arquivo /etc/dnsmasq.conf são essas linhas:
interface=wlan0 port=53 listen-address=127.0.0.1,192.168.1.200 server=8.8.8.8 server=8.8.4.4
Reinicie o serviço do DNSMasq e veja como está seu arquivo /etc/resolv.conf. Se estiver usando outro DNS, troque-o pelo IP de sua interface.
sudo service dnsmasq restart
Se nunca editou o arquivo /etc/resolv.conf, o formato para resolução de nomes através do IP de exemplo 172.16.4.8 ficaria assim:
nameserver 172.16.4.8
Se tiver domínio haverá uma linha adicional.
Resolução de problemas
Se por alguma razão tiver problemas na configuração de seu servidor DNS com DNSMasq, siga essas dicas, mas é bastante incomum não funcionar de primeira.
Checar o status do serviço
Normalmente um erro é reportado pelo próprio status. Se tiver erro de digitação no arquivo ou algo incorreto deve aparecer no terminal ao digitar:
service dnsmasq status
Checar o arquivo /etc/resolv.conf
Se o DNS não estiver nesse arquivo ou a definição estiver digitada errada, ou se tiver outro serviço controlando o arquivo /etc/resolv.conf, também não funcionará. Se for apenas falta da definição e já não estiver contida essa linha, adicione-a:
#coloque o ip do SEU raspberry nameserver 172.16.0.100
Checar se está rodando openresolv
Se estiver, edite o arquivo /etc/resolvconf.conf e adicione o seguinte conteúdo:
name_servers="::1 127.0.0.1" # Escreve os arquivos resolv e de configuração estendida do dnsmasq dnsmasq_conf=/etc/dnsmasq-conf.conf dnsmasq_resolv=/etc/dnsmasq-resolv.conf
Por fim, execute o comando resolvconf -u para que ocorra a atualização dos arquivos.
Checar status novamente
Toda a vez que fizer alguma modificação, verifique o último status. Não modifique todas as coisas de uma vez senão jamais será identificada a origem do problema. Temos a já citada forma mais acima, como também o journalctl:
sudo service dnsmasq status #ou... sudo journalctl -u dnsmasq.service
Garanta que o IP do Raspberry está reservado
O RPi não poderá mais mudar de IP para que outros hosts possam encontrá-lo, caso deseje utilizá-lo como servidor DNS da rede, invés de resolver nomes apenas para si mesmo. Nesse caso, verifique na interface de rede se houve mudança:
ifconfig wlan0 #ou eth0, se for conexão cabeada
Se o IP mudou, significa que não foi reservado o IP ou houve algum erro na configuração da reserva. Para reservar o IP ou para verificar a reserva, pegue o endereço MAC na interface de rede e confira em seu roteador. Para pegar o MAC já limpo:
ifconfig wlan0|egrep ether|awk '{print $2}'
Verifique se o adicionou corretamente, se a configuração está habilitada em seu roteador, etc. Cada roteador tem sua própria interface com o usuário, por isso não consigo descrever o processo exato para cada caso, mas é fácil achar, certamente está no menu de configuração DHCP.
Modifique o servidor DNS a ser distribuído em sua rede
Seu roteador é provavelmente o servidor DHCP da rede. Ele oferece o IP, gateway e os servidores DNS que deverão ser utilizados pelos seus hosts. Para que o servidor DNS seja o Raspberry, procure pela definição dos DNSs na configuração do DHCP do seu roteador. É fácil também, não se preocupe.
Garanta que as definições DHCP dos hosts já foram atualizadas
Não basta configurar o servidor DNS e o DHCP em seu roteador. Os hosts precisam saber que uma modificação deve ser aplicada e para isso é necessário renovar o IP em suas interfaces. Em Windows (não sei se ainda é assim porque não uso há um bom tempo), abra o terminal (digite CMD no menu) e digite:
ipconfig /release ipconfig /renew
Em Linux:
#para ethernet: sudo ifdown eth0 sudo ifup eth0 #wlan etc sudo service networking restart #ou.. sudo service network restart
Ou reinicie os sistema, seja lá ele qual for.
Bônus
Para resolver nomes em sua rede interna, podemos definir os hosts em /etc/hosts e adicionar mais alguns parâmetros ao arquivo /etc/dnsmasq.conf. É simples, apenas adicione isso:
local=/lan/ domain=lan
Os hosts definidos em /etc/hosts devem estar utilizando IP estático, claro. O formato de inserção dos hosts deve ser assim:
#defina o ip de SEUS hosts e o nome de resolução para o respectivo ip 10.0.0.18 dobitaobyte
Reinicie o serviço do DNSMasq sempre que fizer alguma modificação:
sudo service dnsmasq restart
Agora deve ser possível acessar outro host pelo nome:
ping -c4 nome_do_host
É isso. Esse artigo “Servidor DNS com DNSMasq” é mais complementar para facilitar a busca por referência, já que alguns artigos sobre o tema foram escritos anteriormente.
Procurando onde comprar Raspberry Pi 4?
Para RPi 4 recomendo nosso parceiro MASUGUX. Uma curiosidade é que corajosamente eles estão migrando do Mercado Livre após muitos anos, devido à insatisfação com o ML. Acho que atualmente o ML não é mais bom para ninguém, já foi mais vantajoso para ambos, comprador e vendedor. Mas enfim, hoje você encontra a MASUGUX no Shopee e para contatos, eles já têm um domínio que ainda não aponta para uma loja, mas tem as informações necessárias. Recomendo fortemente, o parceiro é de longa data, confiável, atencioso e honesto… bora dar uma força para essa migração, inclusive comprando outros itens de sua lista que eventualmente sejam úteis ao seu projeto.
Revisão: Ricardo Amaral de Andrade
Artigos relacionados
RPi Pico com RF HC12 e MicroPython
Boot manager na RPi Pico
Como usar ADC no Raspberry Pi Pico