dnsmasq (Português)
dnsmasq proporciona serviços como cache DNS e servidor DHCP. Como um Sistema de Nomes de Domínio (DNS), pode armazenar em cache as consultas DNS para melhorar a velocidade de conexão para sites previamente visitados. E como um servidor DHCP, dnsmasq pode ser usado para prover endereços IP internos e roteamento para computadores em uma LAN. Ambos serviços podem ser implementados. dnsmasq é considerado leve e de fácil configuração; é próprio para o uso pessoal como também para uma rede com até 50 computadores. Ainda oferece suporte a servidor PXE.
Contents
Instalação
Instale dnsmasq pelo repositório oficial.
Configuração do cache DNS
Para configurar dnsmasq como um daemon de armazenamento DNS em um único computador edite /etc/dnsmasq.conf
e descomente a diretiva listen-address
, adicionando o endereço de IP localhost:
listen-address=127.0.0.1
Para usar este computador para que outros computadores conectados a mesma rede possam consultar com seu endereço IP na LAN:
listen-address=192.168.1.1 # Exemplo de endereço de IP
Neste caso é recomendável que você tenha um endereço de IP estático em sua LAN.
Arquivo de endereços DNS
Depois de configurar dnsmasq o cliente DHCP necessitará ser reconfigurado para que o endereço localhost preceda os endereços DNS conhecidos em /etc/resolv.conf
. Isso faz com que todas as consultas sejam enviadas para dnsmasq antes que sejam resolvidas com um DNS externo. Depois que o cliente DHCP esteja configurado a rede precisa ser reiniciada para que as mudanças tenham efeitos.
resolv.conf
Uma opção seria a simples configuração de resolv.conf
. Para fazer isso basta que o primeiro nameserver em /etc/resolv.conf
aponte para localhost:
/etc/resolv.conf
nameserver 127.0.0.1 # nameservers externos ...
Agora as consultas DNS serão resolvidas primeiro com dnsmaq, somente checando servidores externos se dnsmasq não puder resolver a consulta. Observe que dhcpcd tende a modificar /etc/resolve.con
por padrão, então se você usa DHCP seria uma boa ideia proteger /etc/resolv.conf
. Para fazer isso adicione nohook resolv.conf
ao arquivo de configuração dhcpcd.conf:
/etc/dhcpcd.conf
... nohook resolv.conf
Seria possível também proteger contra escrita seu resolv.conf:
# chattr +i /etc/resolv.conf
Caso queira desfazer a proteção contra escrita execute:
# chattr -i /etc/resolve.conf
Mais de três nameservers
Uma limitação na forma como Linux maneja consultas DNS é que só podem haver um máximo de três nameservers usados em resolv.conf
. Uma solução alternativa seria fazer localhost como único nameserver em resolv.conf
, e depois criar um resolv-file
separado para seu nameserver externo. Primeiro crie um novo arquivo resolv para dnsmasq:
/etc/resolv.dnsmasq.conf
# Neste caso Google DNS nameserver 8.8.8.8 nameserver 8.8.4.4
Depois edite /etc/dnsmasq.conf
para usar seu novo arquivo resolv:
/etc/dnsmasq.conf
... resolv-file=/etc/resolv.dnsmasq.conf ...
dhcpcd
dhcpcd tem a habilidade de antepor ou adicionar nameservers a /etc/resolv.com
criando ou editando os arquivos /etc/resolv.con.head
e /etc/resolv.conf.tail
, respectivamente:
server=/example1.com/exemple2.com/xx.xxx.xxx.x
echo "nameserver 127.0.0.1" > /etc/resolv.conf.head
dhclient
Para dhclient, descomente em /etc/dhclient.conf
:
prepend domain-name-servers 127.0.0.1;
NetworkManager
NetworkManager tem a habilidade de iniciar dnsmasq pelo seu arquivo de configuração. Adicione a opção dns=dnsmasq
a NetworkManager.conf
na seção [main]
depois desabilite o dnsmasq.service
para que não seja iniciado pelo systemd.
/etc/NetworkManager/NetworkManager.conf
[main] plugins=keyfile dns=dnsmasq
Configurações personalizadas podem ser criadas para dnsmasq criando um arquivo de configuração em /etc/NetworkManager/dnsmasq.d/
. Por exemplo, para mudar o tamanho do cache DNS (que é armazenado na memória RAM):
/etc/NetworkManager/dnsmasq.d/cache
cache-size=1000
Quando dnsmasq é iniciado por NetworkManager
arquivo de configuração em seu diretório é usado no lugar do arquivo de configuração padrão.
server=/exemplo1.com/exemplo2.com/xx.xxx.xxx.xx
muda o primeiro endereço DNS para xx.xxx.xxx.xx
enquanto navega somente os seguintes web sites exemplo1.com, exemplo2.com
. Este método é preferível para uma configuração global de DNS enquanto usa nameservers de DNS que careçam de velocidade, estabilidade, privacidade e segurança.Outros Métodos
Outra opção está nas configurações do NetworkManager onde se pode listar as conexões e manualmente configurá-las. Veja NetworkManager para mais informações (inglês).
Configuração servidor DHCP
Por padrão dnsmasq tem a funcionalidade DHCP desativada, case dejese utiliza-la deve acivar em /etc/dnsmasq.con
. Aqui estão configurações importantes:
# Only listen to routers' LAN NIC. Doing so opens up tcp/udp port 53 to # localhost and udp port 67 to world: interface=<LAN-NIC> # dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with # dynamic interfaces (assigning dynamic ips). Dnsmasq will discard world # requests to them, but the paranoid might like to close them and let the # kernel handle them: bind-interfaces # Dynamic range of IPs to make available to LAN pc dhcp-range=192.168.111.50,192.168.111.100,12h # If you’d like to have dnsmasq assign static IPs, bind the LAN computer's # NIC MAC address: dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50
Iniciar o daemon
Para iniciar dnsmasq com o sistema:
# systemctl enable dnsmasq
Para iniciar dnsmasq imediatamente:
# systemctl start dnsmasq
Para verificar se dnsmasq iniciou adequadamente verifique o journal do sistema:
# journalctl -u dnsmasq
A rede precisa ser reiniciada para que o cliente DHCP execute as novas configurações em /etc/resolv.conf
Teste
Cache DNS
Para fazer um teste de velocidade escolha um web site que não foi visitado desde que dnsmasq foi iniciado.
$ dig archlinux.org | grep "Query time"
Ao executar o comando novamente será usado o endereço DNS em cache resultando em uma resolução rápida caso dnsmasq esteja corretamente configurado
$ dig archlinux.org | grep "Query time"
;; Query time: 18 msec
$ dig archlinux.org | grep "Query time"
;; Query time: 2 msec
Servidor DHCP
De um computador conectado a outro por meio do dnsmasq, configure-o para usar DHCP para atribuição automática de endereço de IP, então faça login na rede normalmente.
Dicas e Sugestões
Previna OpenDNS redirecione Consultas do Google
Para prevenir que OpenDns redirecione todas as consultas do Google para seus proprios servidores adicione a /etc/dnsmasq.conf
:
server=/www.google.com/<ISP DNS IP>
Visualizar leases
$ cat /var/lib/misc/dnsmasq.leases
Adicionar um domínio personalizado
É possível adicionar domínios personalizados na sua rede local:
local=/home.lan/ domain=home.lan
Neste exemplo é possível enviar ping a um host/device, por exemplo, definido no seu arquivo hosts como hostname.home.lan
.
Descomente expand-hosts
para adicionar um domínio personalizado as entradas de hosts:
expand-hosts
Sem esses ajuste você terá que adicionar o domínio as entradas de /etc/hosts
.