# 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.

## 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

This article or section is a candidate for merging with resolv.conf.

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`.

Category:

- Domain Name System (Português)

Hidden categories:

- Pages or sections flagged with Template:Merge
- Pages with broken package links