Manual

do

Maker

.

com

DNS no Raspberry - Acessar dispositivos da rede pelo nome

DNS no Raspberry - Acessar dispositivos da rede pelo nome

Que tal configurar um DNS no Raspberry para acessar  dispositivos na rede pelo nome? E afinal, hoje em dia quem não tem ao menos 2 dispositivos conectados à sua rede wireless doméstica, não é mesmo? Muitas das vezes as pessoas sequer se dão conta do número de aparelhos conectados à sua rede e em muitos casos, nem é necessário saber. Mas vou exemplificar meu caso. Na sala tenho a smart TV, o blue-ray, roteador wireless, MODEM da banda larga, 2 notebooks (um meu e um de minha esposa), 1 ultrabook, 2 smartphones, 3 tablets, 1 Raspberry (que é minha central IoT, em configuração), fora os dispositivos de testes como os Arduinos com ethernet shield, vários ESP8266, boards MIPS com WiFi, Galileo, duplicador forense, etc. Para isso, basta configurar um servidor DNS no Raspberry!

Claro que não é comum ter esse tanto de dispositivos conectados, mas desses, tenho certeza que 2 ou 3 você tem aí. Então, não seria mais fácil se na necessidade de acessar um dispositivo, ou ao menos ver se ele está respondendo na rede, acessá-lo pelo nome invés de endereço IP?

A configuração proposta aqui vai te dar um recurso extra - seu servidor DNS no Raspberryr vai também resolver nomes públicos pra sua rede, ou seja, você não vai mais precisar colocar DNS externo para resolver nomes! Vamos começar a brincadeira já com resultados na sequência.

sudo apt-get install bind9

Após a instalação, teste o seu DNS, que já estará rodando como serviço do seu Raspberry (essa dica de DNS serve para PC/notebook também).

cd /etc
cp resolv.conf resolv.conf-bkp
echo "nameserver 127.0.0.1" >/etc/resolv.conf
ping -c2 manualdomaker.com

O resultado deverá mostrar 0% de perda e assim você saberá que seu DNS está funcionando adequadamente.

Fácil até aqui? - Ótimo, vamos começar a parte "rústica" da coisa. Alguns arquivos deverão ser editados/criados. Use um editor gráfico ou um editor de console, mas atente-se em preservar a estrutura dos dados dispostos aqui; um espaço no lugar errado e tudo estará perdido, sem exagero.

/etc/bind/named.conf.local

O primeiro passo é configurar a zona para a rede local. Edite esse arquivo (pré-existente porém sem conteúdo) e deixe-o de maneira semelhante, sem mexer na estrutura:

# Definicao de zona
zone "dobitaobyte.lan" IN {
 type master;
 file "/etc/bind/dobitaobyte.lan.db";
 };

# Reverso: 1.168.192 (coloque a sua, a minha rede eh 192.168.1)
zone "1.168.192.in-addr.arpa" {
 type master;
 file "/etc/bind/rev.1.168.192.in-addr.arpa";
};

Eu sei que aqui se abre uma lacuna quanto aos exclarecimentos, mas configuração de DNS é quase um tema filosófico. Vou pular a parte chata porque assim eu me preservo das chances de erro na explicação, além de te poupar de um assunto tedioso. Agora vamos ao segundo arquivo, salve esse e sigamos:

/etc/bind/named.conf.options

Aqui será configurado o forwarder. Esse cara (o forwarder) é quem vai se encarregar de resolver nomes para o seu DNS, quando ele não for capaz de fazê-lo. Nesse caso, a primeira requisição será lenta, mas depois seu DNS saberá o que fazer e não refará a consulta, fique tranquilo.

forwarders {
      # Apesar de nao ser mais viavel, ainda uso o DNS do google
      8.8.8.8;
};

Salve esse arquivo e parta para o próximo.

/etc/bind/seuDominio.com.db

Esse arquivo inicia com um tipo de header contendo informações mais profundas e que não cabe no momento. Em seguida, uma área onde definimos nosso mail exchange e nosso name server. Por fim, a lista de dispositivos com seus respectivos nomes.

$ORIGIN .
$TTL 86400
dobitaobyte.lan. IN SOA ns1.dobitaobyte.lan. admin.dobitaobyte.lan. (
 2006081401
 28800
 3600
 604800
 38400
 )

dobitaobyte.lan. IN NS ns1.dobitaobyte.lan.
dobitaobyte.lan. IN MX 10 ns1.dobitaobyte.lan.

$ORIGIN dobitaobyte.lan

localhost IN A 127.0.0.1
kgb IN A 192.168.1.3
ns1 IN A 192.168.1.2
cia IN A 192.168.1.4
wrt IN A 192.168.1.1
djames IN A 192.168.1.5
flavia IN A 192.168.1.6
tv IN A 192.168.1.250
perola IN A 192.168.1.7
thabatha IN A 192.168.1.8
samsungtab IN A 192.168.1.9
mototab IN A 192.168.1.10
esp IN A 192.168.1.11
nodemcu IN A 192.168.1.12
carambola IN A 192.168.1.13

Não é uma boa prática colocar exemplos usando informações reais, mas não quero que você tenha dúvida para implementar isso em sua rede.

/etc/bind/rev.1.168.192.in-addr.arpa

Hora de configurar o reverso. Esse não é um problema para configurar:

//O numero 2 na ultima linha se refere ao IP do Raspberry, que eh o DNS server 
@ IN SOA ns1.dobitaobyte.lan. admin.dobitaobyte.lan. (
 2006081401;
 28800; 
 604800;
 604800;
 86400 
)

 IN NS ns1.dobitaobyte.lan.
2 IN PTR dobitaobyte.lan

Na última linha perceba que tem um número "2", que é o IP do meu Raspberry e que será o DNS; você também precisará apontar o IP do seu servidor DNS. Reinicie o bind, instale o dnsutils e faça um teste:

service bind9 restart && apt-get install dnsutils

Então faça um ping pra um host. Eu testei o kgb, mas antes não se esqueça que seu DNS deve estar configurado no arquivo /etc/resolv.conf:

echo "nameserver 192.168.1.2" > /etc/resolv.conf

Esse IP é o que escolhi para o raspberry, que é o responsável pelo DNS. Depois fiz um ping em KGB.

Funcionou! Mas é chato ter que digitar kgb.dobitaobyte.lan, não acha? Seria mais legal digitar apenas kgb. Mas isso é simples de resolver, é só modificar o /etc/resolv.conf:

echo "search dobitaobyte.lan" > /etc/resolv.conf
echo "nameserver 192.168.1.2" >> /etc/resolv.conf

E como resultado:

ping_kgb1-1.webp

O servidor DNS já está devidamente configurado, mas ainda restam duas questões.

Configurar IP estático no WiFi

Claro que você não poderá ficar recebendo IP por DHCP toda a vez que reiniciar, afinal, isso é um servidor agora! Porém, meu roteador não está funcionando a atribuição de IP por MAC, então eu decidi fazer um forward do servidor DHCP para o Raspberry - ou seja - agora o Raspberry vai servir também DHCP pra rede. Desse modo eu garanto o controle e atribuição IP por MAC para todos os hosts. Para tal, preciso primeiro configurar o IP estático na interface wlan0 e para isso algumas modificações serão necessárias no sistema.

/etc/wpa_supplicant/wpa_supplicant.conf

Edite esse arquivo e deixe-o com o conteúdo como este, ajustando apenas as variáveis:

trl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="SeuSSID"
scan_ssid=1
psk="senhaSecreta"
key_mgmt=WPA-PSK
id_str="rpi"
priority=15
}

Resta efetuar algumas modificações no arquivo das interfaces. Comente ou remova qualquer coisa relacionada à wlan0, substituindo-a por esse bloco de configurações:

allow-hotplug wlan0

iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface rpi inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1

Repare que a interface aponta para a configuração do wpa_supplicant e logo abaixo a configuração manual da interface é feita indicando "rpi" como interface. Esse "rpi" foi a string que escolhi como id da interface no arquivo de configuração do wpa_supplicant.

Servidor DHCP

Primeiramente, configurei meu roteador com a opção de DHCP forwarder. Depois disso, você precisará instalar o servidor DHCP no Raspberry:

sudo apt-get install dhcp3-server

Então o serviço falhará após a instalação e agora já podemos configurá-lo adequadamente.

/etc/dhcp/dhcpd.conf

Só um pequeno adendo antes dessa configuração. Perceba que coloquei abaixo uma range de .20 a .30, de forma que os IPs fixos estão fora da faixa de IPs distribuidos por DHCP. Isso é fundamental.

Perceba também que os hosts que receberão os mesmos IPs atribuidos pelo MAC devem conter uma seção específica, indicando o que for necessário, como no exemplo (que coloquei só um host, mas você tem que colocar uma seção para cada host).

Edite agora esse arquivo e crie uma seção assim:

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.20 192.168.1.30;
    option domain-name-servers ns1.dobitaobyte.lan;
    option domain-name "dobitaobyte.lan"
    option routers 192.168.1.1;
    option broadcast-address 192.168.1.255;
    default-lease-time 600;
}

host kgb {
    hardware ethernet 30:3a:64:3a:08:cc;
    fixed-address 192.168.1.3;
}

Salve e então configure só mais um arquivo para indicar a interface que o dhcp-server deve escutar:

/etc/default/isc-dhcp-server

Edite esse arquivo e na última linha você pode ver o parâmetro INTERFACES="". Adicione a wlan0. Deve ficar assim:

INTERFACES="wlan0"

Force uma parada e reinicio do DHCP:

/etc/init.d/dhcpcd stop && /etc/init.d/dhcpcd start

Parece complicado, mas realmente não é, apenas necessita de cuidados. E se você conseguir atribuir os IPs estáticos através do roteador wireless, você já descarta a configuração de um servidor DHCP, tornando o processo mais simples ainda. Espero que tenha gostado!

Recomendo também a leitura desse outro artigo sobre DNS.

Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.

Próximo post a caminho!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.