[Dica] Montar um cache de dns via NetworkManager

O cache de DNS é uma memória temporária que armazena os endereços de IP dos sites que você visita. Ele funciona como uma “agenda de contatos” do seu dispositivo, evitando que seja necessário buscar novamente o caminho de um site a cada clique, o que torna o carregamento muito mais rápido

Você pode usar dnsmasq ou systemd-resolved, instale o que você preferir.

systemd-resolved

Fallback

If systemd-resolved does not receive DNS server addresses from the network manager and no DNS servers are configured manually then systemd-resolved falls back to the fallback DNS addresses to ensure that DNS resolution always works.

Note The fallback DNS are in this order: Quad9, Cloudflare and Google. See the systemd PKGBUILD where the servers are defined.

The addresses can be changed by setting FallbackDNS in resolved.conf(5). E.g.:

/etc/systemd/resolved.conf.d/fallback_dns.conf

[Resolve]
FallbackDNS=127.0.0.1 ::1

To disable the fallback DNS functionality set the FallbackDNS option without specifying any addresses:

/etc/systemd/resolved.conf.d/fallback_dns.conf

[Resolve]
FallbackDNS=

Inicie o serviço

sudo systemctl enable --now `systemd-resolved.service`

DNSSEC

Warning DNSSEC support in systemd-resolved is considered experimental and incomplete as of Jun 2023. [1]

The systemd package is built with DNSSEC validation disabled by default. This can be changed with the DNSSEC setting in resolved.conf(5).

  • Set DNSSEC=false (the default) to disable DNSSEC validation.
  • Set DNSSEC=allow-downgrade to validate DNSSEC only if
    the upstream DNS server supports it. If your DNS server does not support
    DNSSEC and you experience problems with this mode (e.g.: systemd issue 21107, systemd issue 36681), you may need to explicitly disable DNSSEC validation instead.
  • Set DNSSEC=true to always validate DNSSEC, thus breaking DNS resolution with name servers that do not support it. For example:

/etc/systemd/resolved.conf.d/dnssec.conf

[Resolve]
DNSSEC=true

Configuração NetworkManager

dnsmasq

Certifique-se que dnsmasq está instalado. Então, defina main.dns=dnsmasq com um arquivo de configuração em /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/dns.conf

[main]
dns=dnsmasq

Agora, execute nmcli general reload como root. NetworkManager vai iniciar automaticamente o dnsmasq e adicionar 127.0.0.1 ao /etc/resolv.conf. Os servidores DNS originais podem ser localizados no /run/NetworkManager/no-stub-resolv.conf. Você pode verificar se dnsmasq está sendo usado fazendo a mesma procura DNS duas vezes com drill example.com e verificando o servidor e tempos de consulta.

Nota

  • Você não precisa iniciar dnsmasq.service ou editar /etc/dnsmasq.conf. O NetworkManager iniciará o dnsmasq sem usar o serviço systemd e sem ler o(s) arquivo(s) de configuração padrão do dnsmasq.
  • A instância do dnsmasq iniciada pelo NetworkManager será vinculada a 127.0.0.1:53, você pode executar qualquer software (incluindo dnsmasq.service) no mesmo endereço e porta.

Configuração personalizada do dnsmasq

Configurações personalizadas podem ser criadas para o dnsmasq criando arquivos de configuração em /etc/NetworkManager/dnsmasq.d/. Por exemplo, para alterar o tamanho do cache DNS (armazenado na RAM):

/etc/NetworkManager/dnsmasq.d/cache.conf

cache-size=1000

Dica Verifique a sintaxe do arquivo de configuração com dnsmasq --test --conf-file=/dev/null --conf-dir=/etc/NetworkManager/dnsmasq.d.

Veja dnsmasq(8) para todas as opções disponíveis.

IPv6

Habilitar o dnsmasq no NetworkManager pode interromper as pesquisas de DNS somente do IPv6 (ou seja, drill -6 [hostname}) que, de outra forma, funcionariam. Para resolver isso, a criação do arquivo a seguir configurará o dnsmasq para também ouvir o loopback do IPv6:

/etc/NetworkManager/dnsmasq.d/ipv6-listen.conf

listen-address=::1

Além disso, o dnsmasq também não prioriza o DNS IPv6 upstream. Infelizmente, o NetworkManager não faz isso (Bug do Ubuntu). Uma solução alternativa seria desabilitar o DNS IPv4 na configuração do NetworkManager, supondo que exista.

DNSSEC

A instância dnsmasq iniciada pelo NetworkManager por padrão não validará DNSSEC desde que seja iniciada com a opção --proxy-dnssec. Ele irá confiar em qualquer informação DNSSEC obtida do servidor DNS upstream.

Para que o dnsmasq valide corretamente o DNSSEC, quebrando assim a
resolução de DNS com servidores de nomes que não suportam ele, crie o
seguinte arquivo de configuração:

/etc/NetworkManager/dnsmasq.d/dnssec.conf

conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec

systemd-resolved

O NetworkManager pode usar o systemd-resolved como um resolvedor e cache de DNS. Certifique-se de que systemd-resolved esteja configurado corretamente e que systemd-resolved.service esteja iniciado antes de usá-lo.

systemd-resolved vai ser usado automaticamente se /etc/resolv.conf é um link simbólico para /run/systemd/resolve/stub-resolv.conf, /run/systemd/resolve/resolv.conf ou /usr/lib/systemd/resolv.conf.

Você pode habilitá-lo explicitamente definindo main.dns=systemd-resolved com um arquivo de configuração em /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/dns.conf

[main]
dns=systemd-resolved

Para testar

Intale o pacote bind

  • Debian / Ubuntu / Mint: dnsutils
  • CentOS / RHEL / Fedora: bind-utils
  • Arch Linux: bind

E teste

$ dig google.com

;; Query time: 20 msec

Repita

~$ dig google.com

;; Query time: 0 msec

Repare que no segundo zero o tempo.

Info

1 curtida