arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
249 lines (156 loc) • 9.4 kB
Markdown
**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](/index.php/PXE "PXE").
## Contents
* [1 Instalação](#Instala.C3.A7.C3.A3o)
* [2 Configuração do cache DNS](#Configura.C3.A7.C3.A3o_do_cache_DNS)
* [2.1 Arquivo de endereços DNS](#Arquivo_de_endere.C3.A7os_DNS)
* [2.1.1 resolv.conf](#resolv.conf)
* [2.1.1.1 Mais de três nameservers](#Mais_de_tr.C3.AAs_nameservers)
* [2.1.2 dhcpcd](#dhcpcd)
* [2.1.3 dhclient](#dhclient)
* [2.2 NetworkManager](#NetworkManager)
* [2.2.1 Outros Métodos](#Outros_M.C3.A9todos)
* [3 Configuração servidor DHCP](#Configura.C3.A7.C3.A3o_servidor_DHCP)
* [4 Iniciar o *daemon*](#Iniciar_o_daemon)
* [5 Teste](#Teste)
* [5.1 Cache DNS](#Cache_DNS)
* [5.2 Servidor DHCP](#Servidor_DHCP)
* [6 Dicas e Sugestões](#Dicas_e_Sugest.C3.B5es)
* [6.1 Previna OpenDNS redirecione Consultas do Google](#Previna_OpenDNS_redirecione_Consultas_do_Google)
* [6.2 Visualizar leases](#Visualizar_leases)
* [6.3 Adicionar um domínio personalizado](#Adicionar_um_dom.C3.ADnio_personalizado)
## Instalação
[Instale](/index.php/Instale "Instale") [dnsmasq](https://www.archlinux.org/packages/?name=dnsmasq) pelo [repositório oficial](/index.php/Reposit%C3%B3rios_oficiais "Repositórios oficiais").
## 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](https://www.archlinux.org/packages/?name=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](/index.php/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](https://www.archlinux.org/packages/?name=dhclient), descomente em `/etc/dhclient.conf`:
```
prepend domain-name-servers 127.0.0.1;
```
### NetworkManager
[NetworkManager](/index.php/NetworkManager_(Portugu%C3%AAs) "NetworkManager (Português)") 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](/index.php/Systemd_(Portugu%C3%AAs) "Systemd (Português)").
`/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](/index.php/NetworkManager_(Portugu%C3%AAs) "NetworkManager (Português)") 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 [bind-tools](https://www.archlinux.org/packages/?name=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`.