dnsmasq (Português)

From ArchWiki
Jump to: navigation, search

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.

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

Merge-arrows-2.pngThis article or section is a candidate for merging with resolv.conf.Merge-arrows-2.png

Notes: Mesmo tópico. Note que muito pode ser feito nativamente em /etc/resolvconf.conf usando as opções name_servers e name_servers_append (Discuss in Talk:Dnsmasq (Português)#)

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.

Dica: Este método permite habilitar configurações personalizadas de DNS em domínios privados. Por exemplo: 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.

Dica: O comando dig é parte do pacote dnsutils[broken link: replaced by bind-tools]
$ 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.