O DNSMasq é um serviço que combina DNS e DHCP de maneira elegante e muito fácil de configurar. O foco dele é consumir poucos recursos de memória e espaço em disco, portanto é indicado à redes mais simples e com poucos hosts.
Devido à esta característica, é muito comum vê-lo sendo utilizado em distribuições Linux para roteadores básicos, como é o caso do OpenWrt ou o DD-WRT. Pelo mesmo motivo, ele é perfeito para ser executado no Raspberry Pi.
Nesse post eu irei demonstrar e explicar uma configuração básica que fiz para minha rede de casa.
O DNSMasq está disponível como um pacote .deb
para a distribuição
Raspbian e portanto pode ser instalado através do apt-get:
O arquivo de configuração principal fica em /etc/dnsmasq.conf
. É possível
realizar toda a configuração direto nele, no entanto, recomendo utilizar o
diretório /etc/dnsmasq.d
por questão de organização. Para isso, basta retirar
o comentário na ultima linha do arquivo /etc/dnsmasc.conf
:
A partir de então, todo arquivo de texto que for criado no /etc/dnsmasq.d
será utilizado como configuração do DNSMasq:
Utilizei o nome
network.conf
, mas qualquer um é válido.
O primeiro passo é configurar um nome de domínio. A configuração a ser setada
é a domain
. Este domínio ficará acessível apenas localmente e através deste
servidor DNS.
Por padrão, o DNSMasq carrega os servidores nameserver
direto do arquivo
/etc/resolv.conf
como servidores DNS. No entanto, é possível utilizar a opção
no-resolv
para alterar este comportamento e poder configurar os servidores
externos de DNS manualmente:
Utilizei os servidores do OpenDNS ao invés do fornecido pelo meu provedor de internet. O GoogleDNS também é uma boa opção.
Para outras configurações do serviço de DNS, consultar o manual do DNSMasq
Na sequencia, partimos para configurar o serviço de DHCP. Há a opção
dhcp-range
para setar o range de IPs que serão distribuídos entre os clientes
da rede.
Neste caso, o servidor irá anunciar o range de endereços de 10.0.0.50
até
10.0.0.59
. É importante ajustar o range conforme a quantidade de dispositivos
que forem ser conectados à rede.
Também é importante reparar o valor 120m configurado junto com o range, que é o lease time para esse range.
A configuração de lease time costuma ser algo que varia bastante conforme a aplicação. O valor mais usual é de 24h, que geralmente já é suficiente. Períodos mais curtos geralmente são utilizados em redes WiFi públicas, como em lojas/restaurantes, onde há uma grande rotatividade de clientes acessando a rede.
A opção dhcp-option
permite configurar os options do pacote DHCP diretamente.
Utilizo ela para anunciar o endereço Gateway para os clientes, já que o DNSMasq
não possui uma opção específica para configurar o Gateway que será anunciado
aos clientes.
O primeiro argumento recebe o valor da opção conforme a RFC 2132 (ou
essa página da IANA) diretamente ou o “enum” option:router
. O
segundo argumento é o valor que será anunciado, no caso 10.0.0.254
, que é o
IP do modem/roteador.
Finalmente, a linha dhcp-authoritative
serve para indicar que este é o
servidores principal da rede.
Para mais opções de como configurar o DHCP, consultar o manual do DNSMasq
Ao completar a edição dos arquivos de configuração, basta reiniciar o serviço e está tudo pronto para ser utilizado:
Hosts com endereço Fixo
Como é disponibilizado um range de IPs e estes tem um tempo limitado de lease, é inevitável que mais cedo ou mais tarde o endereço fornecido a um dispositivo seja diferente.
Na maioria dos casos isto não é um problema, porém em algumas situações é importante estabelecer endereços fixos de IP para alguns elementos. Os casos mais comuns são servidores de arquivos ou de impressão mas as vezes até caso seja necessário realizar Port Forwarding no NAT.
Para fazer isto, basta criar uma entrada do tipo dhcp-host
, por exemplo:
Neste caso, o endereço 10.0.0.1
fica reservado para o dispositivo com
endereço MAC AA:BB:CC:DD:EE:FF
. É possível fazer com que estes hosts fixos
possuam leases temporários também, no entanto é mais usual manter este lease
como infinite, já que será sempre o mesmo host.
Notar que os endereços não estão dentro do outro range.
Outra característica muito interessante do DNSMasq é que ao especificar um nome
para o dispositivo, este já é incluso automaticamente no DNS. Então, das
proximas vezes que eu precisar acessar a impressora a partir de um PC, ao invés
de apontar para 10.0.0.2
, é possível acessar printer.raspberry.local
(nome
de domínio local, configurado no início).