Manual
do
Maker
.
com
Quando ler ou ouvir "configurar o dnsmasq", certamente virão várias coisas à sua mente depois desse artigo.
O dnsmasq é um "canivete suíço" que resolve diversas questões, e tudo de forma simples. Muito simples!
Ele oferece quatro servi ços importantes, sendo: um servidor DNS, um servidor DHCP (com suporte a DHCPv6) e PXE, e um servidor TFTP. Não conhece algum desses serviços? Bem, aqui vou mostrar algumas configurações, mas o próximo artigo publicado (que já está pronto, só vou esperar mais um dia para publicá-lo) mostrará toda a excelência dessa ferramenta.
Como um pacote de repositório, está disponível em todos os Linux e pode ser instalado com o respectivo gerenciador de pacotes. Está disponível também para Raspberry.
Para instalar é o padrão, não que precise, mas para não faltar informação:
sudo apt-get update
sudo apt-get install -y dnsmasq
Por padrão ele já habilita um servidor DNS. Para desabilitá-lo (caso não seja desejada essa função), defina a porta como 0 no arquivo de configuração. No Ubuntu fica em /etc/dnsmasq.d/dnsmasq.conf:
port=0
Como cache de DNS, pode ser uma das melhores e mais práticas opções. Já mostrei em outros dois artigos como configurar o bind para servir à rede local, inclusive resolvendo nomes de dispositivos da rede.
Para configurar o dnsmasq para resolver nomes localmente, basta adicionar ao arquivo o endereço de escuta. Se for apenas para o próprio computador:
listen-address=::1,127.0.0.1
Assim ele resolverá tanto IPv4 quanto IPv6. Se for para beneficiar toda a rede, apenas adicione o IP do computador que o hospedará. Claro, é primordial que o IP do computador em que configurar o dnsmasq não mude. Sendo assim, ou deve-se configurar um IP estático, ou atribuir o IP pelo MAC address, configurando-o no roteador da rede. No arquivo de configuração seria algo como:
listen-address=::1,127.0.0.1,192.168.1.200
Também temos a opção de limitar o tamanho de cache. Nesse caso:
cache-size=1000
Outra coisa interessante é poder utilizar o DNSSEC para aumentar a segurança e evitar manipulação de dados. Para isso, adicione ao arquivo de configuração:
conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec
Para que seja feito uso de seu servidor DNS, é fundamental indicá-lo como servidor único no arquivo /etc/resolv.conf. Basta adicionar (por exemplo):
nameserver 192.168.1.200
#ou local, na interface de loopback:
nameserver 127.0.0.1
#...e ipv6:
nameserver ::1
E se estiver utilizando o openresolv, edite o arquivo /etc/resolvconf.conf e adicione:
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
Depois, execute resolvconf -u para que os arquivos sejam criados. Caso esqueça de fazê-lo, a inicialização do serviço falhará. Para saber o status da inicialização do serviço dnsmasq, há várias maneiras:
sudo service dnsmasq status
#ou...
sudo journalctl -u dnsmasq.service
Ou ainda, lendo os logs de sistema, seja dmsg, messages etc.
Para fazer forwarding (quando ele não for capaz de resolver a partir de seu próprio cache), adicione os DNSs de encaminhamento. No caso, os populares do Google:
no-resolv
server=8.8.8.8
server=8.8.4.4
A opção no-resolv é para que ele não fique resolvendo nomes apenas nele mesmo.
Para adicionar um domínio personalizado para hosts de sua LAN, adicione:
local=/lan/
domain=lan
Assim, os hosts definidos em /etc/hosts (que já é o suficiente para ping a partir da própria máquina) serão acessados também pelos demais hosts da rede. Por exemplo, um ping seria algo como:
ping dobitaobyte.lan
E coloque no arquivo de configuração também:
expand-hosts
De outro modo, será necessário adicionar o domínio aos hosts definidos em /etc/hosts.
A primeira resolução a um destino será sempre feita pelos DNS de forwarding, mas após isso a resolução será sempre mais rápida, pois já estará contida no cache do dnsmasq.
Suponhamos que o interesse é outro; apenas ter um servidor DHCP fácil de configurar. E que fácil! Para quem já configurou o isc-dhcp-server (que também não é lá coisa para gurus), configurar o DHCP server no dnsmasq é de babar na sopa!
Para definir um nome de domínio, adicione ao arquivo (nesse momento, supõe-se: vazio) o seguinte:
domain=meudominio.com
O gateway padrão é a porta de saída de uma rede para outra, seja ela pública ou não. Para exemplificar aos que não conhecem muito de rede, é o endereço IP que leva seu computador ao mundo. Supondo que sua rede seja 192.168.0.0/24 (onde são possíveis até 254 hosts), provavelmente seu gateway é o 192.168.0.1. Em miúdos, seu roteador WiFi ou o Modem de sua operadora de Internet. Normalmente o gateway tem duas interfaces de rede e, no caso do roteador de saída, de um lado está o IP da LAN e do outro, o IP público de Internet.
Para definir o default gateway (que é fundamental pelas razões supracitadas), adicione:
dhcp-option=3,192.168.0.1
A flag inicial será explicada no próximo artigo (garanto que será bastante agradável, se curte Raspberry), atenha-se apenas ao formato e ao posicionamento do endereço IP do gateway.
O servidor DHCP também precisa especificar o DNS que resolverá nomes para a rede; ou "os" DNSs. Utilizando os do Google para exemplificar:
dhcp-option=6,8.8.8.8,8.8.4.4
Repare que a separação é feita por vírgula.
Outra coisa impressionante que o dnsmasq faz de maneira simples é roteamento, mas para uso doméstico é pouco provável que utilize, exceto caso tenha separado sua rede IoT da rede de navegação. Mas vou criar um exemplo; suponhamos que sua rede IoT seja uma classe B com endereçamento 172.16.0.0 com subnet para 128 hosts (/25) e ela deve passar por um firewall (172.16.0.1<->192.168.0.0/24) antes de sair para a rede 192.168.0.0/24. Nesse caso:
dhcp-option=192.168.0.0/24,172.16.0.1
E claro, precisamos definir os IPs que serão distribuídos e o lease-time deles. Para isso:
dhcp-range=192.168.0.100,192.168.0.200,12h
Isso significa que por 12h não haverá renovação dos IPs, que serão distribuídos do 100 ao 200. IPs estáticos fora dessa range podem ser atribuídos a hosts servidores, mas se desejar atribuir os IPs estáticos por DHCP, também é fácil:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.0.254
Para testar a sintaxe de suas configurações (independente do serviço configurado), utilize:
dnsmasq --test
Para saber quais IPs estão sendo atribuídos (e se estão), podemos consultar o arquivo /var/lib/misc/dnsmasq.leases:
Nesse caso foi apenas um, que é a surpresa do próximo artigo (que concluí antes desse, mas não quis publicar ainda).
Configurar um TFTP agora ficou mais fácil! Basta adicionar 2 linhas ao arquivo de configuração, sendo uma delas a ativação do serviço e a outra, o caminho do diretório TFTP. Para aumentar a segurança, uma terceira flag pode ser utilizada, mas nesse caso a propriedade do diretório e conteúdo deve ser do usuário dnsmasq. Supondo a configuração:
enable-tftp
tftp-root=/srv/tftp
tftp-secure
Devemos então criar o diretório /srv/tftp e atribuí-lo ao usuário dnsmasq:
sudo mkdir /srv/tftp
sudo chown -R dnsmasq.dnsmasq /srv/tftp
Para utilizar o servidor PXE, fundamentalmente devemos ter configurados também os serviços TFTP e DHCP. Supondo uma configuração como proxy DHCP em uma rede que já contenha um servidor DHCP rodando:
interface=enp0s0
bind-dynamic
dhcp-range=192.168.0.1,proxy
Após isso será necessário ainda configurar um boot compatível com PXE, como o PXELinux, na raiz do TFTP. Para enviar um arquivo, adicionamo-lo da seguinte forma:
dhcp-boot=lpxelinux.0
Se dependente de plataforma, podemos defini-lo assim:
pxe-service=x86PC, "PXELINUX (BIOS)", "bios/lpxelinux"
pxe-service=X86-64_EFI, "PXELINUX (EFI)", "efi64/syslinux.efi"
A maior parte desse artigo foi referência da documentação do Arch Linux, do qual deixo a referência. Esse material foi fundamental para atingir o propósito do próximo artigo (já concluído, mas não publicado). Espero que acompanhe, principalmente se for usuário de Raspberry Pi!
Revisão: Ricardo Amaral de Andrade
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.