DNS Configuração · 17 min read · Sep 08, 2025

Como Configurar um Resolvedor DNS Local com Unbound no Ubuntu 22.04

Unbound é um software de servidor DNS gratuito e de código aberto que pode ser usado para validadores, resolutores recursivos e de cache DNS. É um servidor DNS rico em recursos que suporta DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), Minimização de Nome de Consulta, o Uso Agressivo de Cache Validado por DNSSEC e suporte para zonas de autoridade. O Unbound é focado na privacidade e segurança do DNS, mas sem sacrificar a velocidade e o desempenho.

O Unbound é desenvolvido principalmente pela NLnet Labs e distribuído sob a licença BSD, e suporta recursos modernos em padrões abertos de Servidor DNS. O Unbound foi rigorosamente auditado e pode ser executado em Linux, BSD e macOS. O Unbound está disponível para a maioria desses sistemas operacionais e pode ser instalado via o gerenciador de pacotes do sistema.

Neste tutorial, você instalará o Unbound no servidor Ubuntu 22.04 e o configurará como um Servidor DNS Local com alguns recursos habilitados, como DNSSEC, cache DNS, nomes de domínio locais e subdomínios, e também DNS-over-TLS (DoT). Você também configurará o registro do Unbound via Rsyslog e logrotate e configurará uma máquina cliente Ubuntu para verificar sua instalação do Unbound.

Pré-requisitos

Para completar este tutorial, você deve ter os seguintes requisitos:

  • Um servidor Ubuntu 22.04 - Este exemplo usa um servidor Ubuntu com o nome do host ‘unbound-server‘ e endereço IP ‘192.168.5.100‘.
  • Um usuário não-root com privilégios de administrador sudo/root.

É isso. Você está agora pronto para prosseguir com a instalação do Unbound.

Instalando o Servidor DNS Unbound

Por padrão, o repositório do Ubuntu fornece um pacote Unbound que você pode instalar facilmente via APT. Antes de iniciar a instalação do Unbound, emita o seguinte comando apt para atualizar e refrescar seu índice de pacotes do Ubuntu.

sudo apt update

Agora verifique os detalhes do pacote unbound via o seguinte comando.

sudo apt info unbound

No momento da redação deste texto, o repositório padrão do Ubuntu fornece Unbound 1.13.

mostrar pacote unbound

Em seguida, instale o Unbound usando o seguinte comando apt. Quando solicitado, insira y para confirmar e pressione ENTER para prosseguir.

sudo apt install unbound

Saída:

instalar unbound

Uma vez que o Unbound esteja instalado, execute o comando systemctl abaixo para verificar o serviço Unbound.

sudo systemctl is-enabled unbound  
sudo systemctl status unbound

A saída ‘enabled‘ confirma que o Unbound está habilitado e será iniciado automaticamente na inicialização do sistema. E a saída ‘active (running)‘ confirma que o Unbound está em execução.

verificar unbound

Configurando o Unbound como Servidor DNS Local

A configuração padrão do Unbound está localizada em ‘/etc/unbound/unbound.conf’. Nesta etapa, você modificará o arquivo de configuração principal do Unbound ‘/etc/unbound/unbound.conf’ via seu editor preferido.

Você agora aprenderá sobre a configuração básica de um servidor DNS Unbound, habilitando o cache DNS, configurando nomes de domínio locais e subdomínios, configurando o Unbound como resolvedor DNS com DoT (DNS-over-TLS) habilitado.

Configuração Básica

Abra o arquivo de configuração padrão do Unbound ‘/etc/unbound/unbound.conf’ usando seu editor preferido. Este exemplo usa nano para editar o arquivo de configuração ‘/etc/unbound/unbound.conf’.

sudo nano /etc/unbound/unbound.conf

Adicione as seguintes linhas ao arquivo. A seção ‘server‘ permite que você configure as configurações básicas do Unbound. Neste exemplo, você executará o Unbound no endereço IP local ‘192.168.5.100‘ com a porta padrão 53. Além disso, você configurará o registro para mensagens Syslog e desativará o IPv6. Por fim, você configurará o Unbound para consultar recursivamente qualquer nome de host a partir dos servidores DNS raiz via o arquivo ‘root-hints‘.

#Adicionando suporte a DNS-Over-TLS  
server:  
    use-syslog: yes  
    username: "unbound"  
    directory: "/etc/unbound"  
    tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt  
      
    do-ip6: no  
    interface: 192.168.5.100  
    port: 53  
    prefetch: yes  
  
    root-hints: /usr/share/dns/root.hints  
    harden-dnssec-stripped: yes

Parâmetros detalhados:

  • use-syslog: habilitar registro para mensagens Syslog.
  • username: executar como usuário unbound, que é o usuário padrão.
  • directory: o diretório de trabalho padrão para o Unbound é o diretório ‘/etc/unbound’.
  • tls-cert-bundle: Certificados usados para autenticar conexões feitas para cima. Em distribuições baseadas em Debian, o arquivo de certificado está localizado em ‘/etc/ssl/certs/ca-certificates.crt’.
  • do-ip6: use ‘yes‘ para executar o Unbound com IPv6 ou defina ‘no‘ para desativar o IPv6.
  • interface: interface de rede ou endereço IP que o Unbound estará executando. Você pode usar um endereço IP ou o nome da interface, como ‘eth0‘. Além disso, você pode executar em uma porta específica adicionando um formato como ‘IP-ADDRESS@PORT‘.
  • port: especifique a porta que o Unbound estará executando, e esta porta lidará com as conexões dos clientes. A porta DNS padrão é 53.
  • prefetch: defina como ‘yes‘ para habilitar a pré-busca de entradas de cache de mensagens quase expiradas.
  • root-hints: um arquivo que contém detalhes do servidor DNS raiz. O arquivo ‘/usr/share/dns/root.hints’ é fornecido pelo pacote ‘dns-root-data‘. E também pode baixar o arquivo root-hints daqui ‘https://www.internic.net/domain/named.cache’.
  • harden-dnssec-stripped: defina como ‘yes‘ para endurecer contra o recebimento de dados dnssec-stripped.

Habilitar Cache DNS

Em seguida, adicione as seguintes linhas para habilitar a consulta de cache DNS na sua instalação do Unbound.

    cache-max-ttl: 14400  
    cache-min-ttl: 11000

Parâmetros detalhados:

  • cache-max-ttl: TTL ou Tempo de Vida para RRSets e mensagens no cache DNS. O formato é em segundos.
  • cache-min-ttl: Tempo de Vida mínimo para o cache. O padrão é 0, mas você pode alterar isso para seu gosto, como ‘11000‘ segundos. Não defina isso por mais de 1 hora ou você terá problemas devido a dados obsoletos.

Privacidade e Segurança do Unbound

Agora você pode adicionar as seguintes linhas para configurar a privacidade e segurança básicas para o Unbound.

    aggressive-nsec: yes  
    hide-identity: yes  
    hide-version: yes  
    use-caps-for-id: yes

Parâmetros detalhados:

  • aggressive-nsec: defina como ‘yes‘ para habilitar NSEC agressivo para usar a cadeia NSEC do DNSSEC para sintetizar NXDOMAIN e outras negações. Verifique a página da IETF sobre ‘NSEC’ https://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html.
  • hide-identity: defina como yes para desativar respostas de consultas bind sobre id.server ou hostname.bind.
  • hide-version: defina como yes para desativar consultas version.server e version.bind.
  • use-caps-for-id: defina como yes para habilitar o uso de ‘0x100-encoded‘ na consulta para frustrar tentativas de spoofing.

Definir Rede Privada e Listas de Controle de Acesso (ACLs)

Em seguida, você precisa definir o endereço privado da sua rede e as ACLs (Listas de Controle de Acesso). Certifique-se de alterar a sub-rede local nas linhas abaixo com seu ambiente de rede atual.

    private-address: 192.168.0.0/16  
    private-address: 192.168.5.0/24  
    private-address: 169.254.0.0/16  
    private-address: 172.16.0.0/12  
    private-address: 10.0.0.0/8  
    private-address: fd00::/8  
    private-address: fe80::/10  
  
    #controle quais clientes estão autorizados a fazer consultas (recursivas)  
    access-control: 127.0.0.1/32 allow_snoop  
    access-control: ::1 allow_snoop  
    access-control: 127.0.0.0/8 allow  
    access-control: 192.168.5.0/24 allow

Parâmetros detalhados:

  • private-address: defina sub-redes de rede privada em sua infraestrutura. Apenas ‘private-domain‘ e ‘local-data’ nomes são permitidos para ter esses endereços privados.
  • access-control: defina o controle de acesso em que clientes estão autorizados a fazer consultas (recursivas) para o servidor Unbound. O parâmetro ‘allow‘ habilitará recursivas, enquanto o ‘allow_snoop‘ habilitará tanto recursivas quanto não recursivas.

Configurar Domínio Local

Após configurar o endereço privado e as listas de controle de acesso, você definirá a zona local do nome do seu domínio. Isso é muito útil, especialmente se você tiver várias aplicações auto-hospedadas em sua rede local. Você pode facilmente definir seu nome de domínio ou subdomínios e apontar para o endereço IP de destino específico.

Este exemplo criará a zona para o domínio ‘home.lan‘ com o tipo ‘static‘, em seguida, você criará vários subdomínios via o parâmetro ‘local-data‘. Cada subdomínio será apontado para um endereço IP específico, e você também criará registros PTR via o parâmetro ‘local-data-ptr‘.

    # zona local  
    local-zone: "home.lan." static  
  
    local-data: "firewall.home.lan.  IN A 10.0.0.1"  
    local-data: "vault.home.lan.    IN A 10.0.0.2"  
    local-data: "media.home.lan.   IN A 10.0.0.3"  
    local-data: "docs.home.lan.       IN A 10.0.0.4"  
    local-data: "wiki.home.lan.     IN A 10.0.0.5"  
  
    local-data-ptr: "10.0.0.1  firewall.home.lan"  
    local-data-ptr: "10.0.0.2  vault.home.lan"  
    local-data-ptr: "10.0.0.3  media.home.lan"  
    local-data-ptr: "10.0.0.4  docs.home.lan"  
    local-data-ptr: "10.0.0.5  wiki.home.lan"

Parâmetros detalhados:

  • local-zone: defina o domínio local aqui.
  • local-data: defina o registro A para subdomínios e qual endereço IP local será resolvido.
  • local-data-ptr: defina o registro ptr para seus subdomínios.

Ajuste de Desempenho do Unbound

Adicione as seguintes linhas para obter mais desempenho. Você pode ajustar os parâmetros abaixo com seu ambiente atual.

    num-threads: 4  
    msg-cache-slabs: 8  
    rrset-cache-slabs: 8  
    infra-cache-slabs: 8  
    key-cache-slabs: 8  
    rrset-cache-size: 256m  
    msg-cache-size: 128m  
    so-rcvbuf: 8m

Parâmetros detalhados:

  • num-threads: o número de threads que serão criadas. O valor deve corresponder aos núcleos da CPU do servidor.
  • msg-cache-slabs: o número de slabs a serem usados para o cache de mensagens. Defina como 8 para otimizar o Unbound para usar mais memória para cache.
  • rrset-cache-slabs: o número de slabs a serem usados para o cache RRset. Defina como 8 para otimizar o Unbound para usar mais memória para o cache RRSet.
  • infra-cache-slabs: o número de slabs a serem usados para o cache de Infraestrutura. Defina como 8 para otimizar o Unbound para usar mais memória para o cache de Infraestrutura.
  • key-cache-slabs: o número de slabs a serem usados para o cache de chaves. Defina como 8 para otimizar o Unbound para usar mais memória para o cache de chaves.
  • rrset-cache-size: especifique a quantidade de memória para o cache RRSet. Este exemplo usa 256MB, com o padrão sendo apenas 4MB.
  • msg-cache-size: especifique a quantidade de memória para o cache de mensagens. Este exemplo usa 128MB, com o padrão sendo apenas 4MB.
  • so-rcvbuf: configure o tamanho do buffer para a porta DNS 53/udp para 8 MB. No sistema Ubuntu, você também deve configurar um valor mais alto para o parâmetro do kernel ‘net.core.rmem_max‘.

Configurar o Unbound como um Resolvedor DNS com DNS-over-TLS (DoT)

Por fim, adicione uma nova seção ‘forward-zone’ para configurar o Unbound como um resolvedor DNS para suas redes locais. Este exemplo usa servidores DNS Quad9 com DoT (DNS-over-TLS) habilitado.

forward-zone:  
    name: "."  
    forward-ssl-upstream: yes  
    ## Também adicione IBM IPv6 Quad9 sobre TLS  
    forward-addr: 9.9.9.9@853#dns.quad9.net  
    forward-addr: 149.112.112.112@853#dns.quad9.net

Parâmetros detalhados:

  • forward-zone: defina a zona de encaminhamento para o Unbound.
  • name: defina como “.” para encaminhar todas as consultas DNS.
  • forward-addr: use um encaminhador específico para encaminhar todas as consultas DNS. Este exemplo usa o DNS Quad9 com DNS-over-TLS (DoT) habilitado.

Salve e saia do arquivo ‘/etc/unbound/unbound.conf’ quando terminar. Com o arquivo de configuração do Unbound modificado, você pode agora reiniciar o serviço Unbound e aplicar as alterações.

Execute o comando abaixo para verificar e validar a configuração do Unbound. Se bem-sucedido, você deve obter uma saída como ‘unbound-checkconf: no errors in /etc/unbound/unbound.conf’.

sudo unbound-checkconf

Em seguida, execute o comando abaixo para aumentar o ‘net.core.rmem_max’ padrão do seu sistema via o arquivo ‘/etc/sysctl.conf’. Depois, aplique as alterações via o comando ‘sysctl‘.

echo "net.core.rmem_max= 8388608" >> /etc/sysctl.conf  
sudo sysctl -p

Após isso, execute o comando systemctl abaixo para reiniciar o serviço Unbound e aplicar as alterações.

sudo systemctl restart unbound

Com isso, o serviço Unbound deve estar em execução com a nova configuração no endereço IP 192.168.5.100 na porta 53.

configurar unbound

Verifique a lista de portas abertas no seu sistema via o comando ss abaixo.

ss -tulpn

Você receberá uma saída como esta - A porta DNS udp padrão 53 é usada pelo serviço Unbound.

verificar porta unbound

Agora que você terminou as configurações do Unbound, você configurará o firewall UFW e abrirá a porta DNS padrão 53.

Configurando o Firewall UFW

No Ubuntu, o firewall padrão que está instalado é o UFW. Ele está instalado, mas ainda inativo. Nesta etapa, você configurará o firewall UFW e abrirá a porta UDP para o Unbound.

Execute o comando abaixo para abrir o serviço OpenSSH no UFW via o comando abaixo. Em seguida, você pode adicionar a porta DNS 53/udp ao firewall UFW.

sudo ufw allow OpenSSH  
sudo ufw allow 53/udp

Em seguida, execute o comando abaixo para iniciar e habilitar o serviço do firewall UFW. Quando solicitado, insira y para confirmar e pressione ENTER para prosseguir.

sudo ufw enable

A saída ‘Firewall is active and enabled on system startup‘ confirma que o firewall UFW está em execução e está habilitado, o que significa que o firewall UFW será iniciado automaticamente na inicialização do sistema.

Saída:

configurar ufw

Agora execute o comando ufw abaixo para verificar o status do firewall UFW. Você deve receber uma saída que o status do UFW está ‘active‘ com o serviço OpenSSH e a porta DNS 53/udp habilitados.

sudo ufw status

Saída:

verificar ufw

Configurando o Registro do Unbound via Rsyslog e Logrotate

Após configurar o firewall UFW, você agora configurará um arquivo de log para o Unbound via rsyslog e logrotate. O serviço rsyslog criará um arquivo de log específico para o Unbound e o logrotate rotacionará o arquivo de log do Unbound em um determinado tempo.

Execute o comando abaixo para adicionar uma nova configuração do Rsyslog ‘/etc/rsyslog.d/unbound.conf’ para o serviço Unbound. Com isso, os logs do Unbound serão armazenados em ‘/var/log/unbound.log‘.

cat <

Em seguida, execute o comando abaixo para adicionar a configuração do logrotate ‘/etc/logrotate.d/unbound‘ para o serviço Unbound. Isso criará a rotação de logs para o arquivo de log do Unbound ‘/var/log/unbound.log‘ diariamente.

cat <

configurar log unbound

Agora execute o comando systemctl abaixo para reiniciar os serviços Rsyslog e Logrotate. Isso aplicará as alterações que você fez em ambos os serviços.

sudo systemctl restart rsyslog logrotate

Por fim, você pode verificar o arquivo de log reiniciando o serviço Unbound usando o comando abaixo.

Com isso, as mensagens geradas pelo serviço Unbound durante o processo de reinicialização serão armazenadas no arquivo de log ‘/var/log/unbound.log‘. Execute o comando cat para mostrar o conteúdo do arquivo de log ‘/var/log/unbound.log‘.

sudo systemctl restart unbound  
cat /var/log/unbound.log

Saída:

verificar log unbound

Configurando o Resolvedor DNS no Cliente

Quanto ao lado do cliente, você precisa configurar o resolvedor DNS e usar o Unbound como o resolvedor padrão no sistema cliente. Para a distribuição Ubuntu, você pode usar o NetworkManager, o serviço systemd-resolved ou configurar um arquivo estático para ‘/etc/resolv.conf‘.

Nesta etapa, você aprenderá como configurar o resolvedor DNS no Ubuntu Desktop e no Ubuntu Server.

Para Ubuntu Desktop

O serviço NetworkManager gerencia a rede padrão para a versão Desktop do Ubuntu. Portanto, você pode facilmente configurar o resolvedor DNS via o NetworkManager, que pode ser feito via GUI de linha de comando ou editando o arquivo de configuração para cada interface de rede.

Para configurar o resolvedor DNS via linha de comando, você pode usar o nmcli. Execute o comando abaixo para configurar o resolvedor DNS para a interface de rede específica. Você pode substituir o nome da interface eth0.

sudo nmcli connection modify eth0 ipv4.dns "192.168.5.100"

Cada interface gerenciada pelo NetworkManager tem um arquivo de configuração específico que é armazenado no diretório ‘/etc/NetworkManager/system-connections’ com o formato ‘.nmconnection’.

Você pode modificar a configuração da interface com seu editor de texto preferido e adicionar as seguintes linhas à seção ‘[ipv4]‘.

[ipv4]  
dns=192.168.5.100  
ignore-auto-dns=true  
never-default=true

Se você preferir usar um aplicativo GUI, abra o aplicativo NetworkManager em sua máquina e edite o nome da interface que deseja modificar. Clique na aba ‘IPv4 Settings’ e insira seu servidor DNS local. Em seguida, clique em Salvar para confirmar.

guia do resolvedor dns network manager

Para Servidor Ubuntu Genérico

Para máquinas servidor Ubuntu genéricas, a rede é gerenciada pelo netplan com o serviço de backend systemd-networkd. E para a configuração do resolvedor DNS, o systemd-networkd usa o systemd-resolved. Portanto, para configurar o resolvedor DNS em um servidor Ubuntu genérico, você pode fazer isso via o serviço systemd-resolved.

Abra o arquivo de configuração do systemd-resolved usando seu editor preferido. Este exemplo usa um editor nano.

sudo nano /etc/systemd/resolved.conf

Na seção ‘[Resolve]‘, descomente o parâmetro ‘DNS‘ e insira o endereço IP do seu servidor DNS local.

[Resolve]  
DNS=192.168.5.100

Salve e saia do arquivo quando terminar.

Agora execute o comando abaixo para reiniciar o serviço systemd-resolved e aplicar as alterações. Em seguida, você pode verificar o status do resolvedor DNS via o comando resolvectl como abaixo.

sudo systemctl restart systemd-resolved  
sudo resolvectl status

Se bem-sucedido, você deve ver uma saída como esta - O resolvedor DNS padrão foi alterado para o endereço IP do servidor DNS local Unbound 192.168.5.100.

resolvedor dns systemd resolved

Testando o Servidor DNS Unbound

Para garantir que o DNS Unbound está funcionando como um resolvedor DNS, execute o comando dig abaixo a partir da máquina cliente Ubuntu. O parâmetro ‘@192.168.5.100‘ garante que você está usando um servidor DNS Unbound que está em execução no endereço IP ‘192.168.5.100‘.

dig @192.168.5.100

Quando bem-sucedido, você receberá uma resposta do servidor DNS raiz como a saída abaixo. Além disso, você notará a flag ‘ad‘ (authentic data) no cabeçalho da saída, o que significa que o DNSSEC está habilitado.

verificar dig servidor dns

Em seguida, execute o comando abaixo para garantir que os clientes possam acessar nomes de domínio na internet.

dig github.com  
dig duckduckgo.com

Quando bem-sucedido, você deve receber uma saída detalhando o registro DNS para o domínio ‘github.com‘ e ‘duckduckgo.com‘. Você pode ver que o resolvedor DNS que responde à consulta é ‘127.0.0.53#53’, o systemd-resolved que usa o Unbound como o resolvedor padrão. Além disso, você pode ver o ‘Query time’ para cada consulta, o ‘ Query time‘ para o domínio ‘github.com‘ é ‘1748‘ e para ‘duckduckgo.com‘ é ‘999‘.

Saída para github.com:

dig github.com

Saída para duckduckgo.com:

dig duckduckgo antes

Se você executar novamente o comando dig acima, o ‘Query time’ deve ser reduzido. E isso confirma que suas consultas foram armazenadas em cache e o cache DNS está funcionando.

dig github.com  
dig duckduckgo.com

Acesse o Github após o cache armazenado:

verificar cache dns

Acesse o duckduckgo após o cache armazenado:

após armazenado

Em seguida, verifique o domínio local ou subdomínio via o comando dig abaixo. Se bem-sucedido, cada subdomínio será apontado para o endereço IP correto configurado no arquivo de configuração do Unbound ‘/etc/unbound/unbound.conf‘.

dig firewall.home.lan +short  
dig vault.home.lan +short  
dig media.home.lan +short

Saída:

verificar domínios locais

Agora execute o comando dig abaixo para garantir que os registros PTR estão apontados para o nome de domínio correto.

dig -x 10.0.0.1 +short  
dig -x 10.0.0.2 +short  
dig -x 10.0.0.3 +short

Saída:

testar registros ptr

Você também pode verificar DoT (DNS sobre TLS) via tcpdump. Instale o pacote ‘tcpdump‘ no seu servidor Unbound.

sudo apt install tcpdump

Digite y quando solicitado e pressione ENTER para prosseguir.

instalar tcpdump

Agora execute o comando tcpdump abaixo para monitorar o tráfego na interface ‘eth0‘ com a porta DoT 853. Neste exemplo, o DNS Unbound está em execução no endereço IP ‘192.168.5.100‘ com a interface ‘eth0‘.

tcpdump -vv -x -X -s 1500 -i eth0 'port 853'

Mova-se para a máquina cliente e execute o comando abaixo para acessar nomes de domínio externos/internet via o comando dig abaixo.

dig google.com

Saída:

dig google

Após isso, volte para o servidor Unbound e você deve agora obter uma saída semelhante a esta na saída do tcpdump.

dns criptografado com DoT

Com isso, você agora instalou e configurou o Servidor DNS Local via Unbound no servidor Ubuntu. Além disso, você configurou um resolvedor DNS em Desktops e Servidores Ubuntu via NetworkManager e systemd-resolved.

Conclusão

Neste guia, você instalou o Servidor DNS Local Unbound em um servidor Ubuntu 22.04. Você habilitou o cache DNS, DNSSEC (habilitado por padrão), configurou endereço privado e ACLs, adicionou domínio local via local-zone, e então configurou o Unbound como resolvedor DNS com DoT (DNS-over-TLS).

Além disso, você configurou privacidade e segurança básicas do DNS, otimizou o Unbound e configurou logs do Unbound via rsyslog e logrotate.

Ao final deste guia, você também aprendeu como configurar um resolvedor DNS em Desktops e Servidores Ubuntu via NetworkManager e systemd-resolved. E também aprendeu o uso básico do comando dig para verificar o servidor DNS.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.