- Entenda o Resolver DNS: Explicação detalhada sobre o que é um resolver DNS e por que você pode querer executar o seu próprio.
- Instalação do BIND9: Guia passo a passo para instalar o BIND9 no Rocky Linux 9/Alma Linux 9.
- Configuração do Resolver DNS: Aprenda a configurar seu próprio resolver DNS local e como definir o BIND como o resolver DNS padrão em seu servidor.
- Resolução de Problemas e Dicas: Soluções para problemas comuns e dicas úteis para otimizar o desempenho do seu resolver DNS.
Este guia irá orientá-lo na configuração de um resolver DNS local no RHEL 9/Rocky Linux 9/Alma Linux 9, utilizando o popular software BIND9 DNS. Existem vários termos para “resolver DNS”, todos se referindo à mesma coisa:
- Resolver completo (em contraste com resolver stub)
- Recursor DNS
- Servidor DNS recursivo
- Resolver recursivo
Também é importante notar que um servidor DNS também pode ser chamado de servidor de nomes. Exemplos de resolvers DNS são 8.8.8.8 (servidor DNS público do Google) e 1.1.1.1 (servidor DNS público da Cloudflare). O sistema operacional do seu PC também possui um resolver, embora seja chamado de resolver stub devido à sua capacidade limitada. Um resolver stub é um pequeno cliente DNS no computador do usuário final que recebe solicitações DNS de aplicativos como o Firefox e as encaminha para um resolver recursivo. Quase todos os resolvers podem armazenar em cache a resposta DNS para melhorar o desempenho, por isso também são chamados de servidores DNS de cache.
Mas, se você quer apenas uma lista atualizada de DNS para melhorar a velocidade da sua internet, então aqui temos o post:
- Lista com os melhores servidores DNS
Por que executar seu próprio Resolver DNS
Normalmente, seu computador ou roteador usa o resolver DNS do seu provedor de serviços de Internet (ISP) para consultar nomes de domínio para obter um endereço IP. Executar seu próprio resolver DNS local pode acelerar as consultas DNS, porque:
- O resolver DNS local só escuta suas solicitações DNS e não responde às solicitações DNS de outras pessoas, então você tem uma chance muito maior de obter respostas DNS diretamente do cache no resolver.
- A latência de rede entre seu computador e o resolver DNS é eliminada (quase zero), então as consultas DNS podem ser enviadas para os servidores DNS raiz mais rapidamente.
- Se você executar um servidor de e-mail e usar listas negras de DNS (DNSBL) para bloquear spam, então é aconselhável executar um resolver DNS local para acelerar as consultas DNS. Se você executar seu próprio servidor VPN em um Servidor Privado Virtual (VPS), também é uma boa prática instalar um resolver DNS no mesmo VPS.
Você também pode querer executar seu próprio resolver DNS se não gostar que seu histórico de navegação na Internet seja armazenado em um servidor de terceiros.
Se você possui um site e quer que seu próprio servidor DNS lide com a resolução de nomes para o seu nome de domínio, em vez de usar o servidor DNS do registrador do seu domínio, então você precisará configurar um servidor DNS autoritativo, que é diferente de um resolver DNS. O BIND pode atuar como um servidor DNS autoritativo e um resolver DNS ao mesmo tempo, mas é uma boa prática separar os dois papéis em diferentes caixas. Este tutorial mostra como configurar um resolver DNS local e, como ele será usado no host local/rede local, não é necessário criptografia (DNS sobre TLS ou DNS sobre HTTPS). A configuração de um servidor DoT ou DoH será discutida em um artigo futuro.
Por favor, note que você precisa ter privilégios de root ao instalar software no AlmaLinux/RHEL. Você pode adicionar sudo no início de um comando, ou usar o comando su – para mudar para o usuário root.
Instalando o BIND9 no Rocky Linux 9/Alma Linux 9
BIND (Berkeley Internet Name Domain) é um software de servidor DNS de código aberto amplamente utilizado em Unix/Linux devido à sua estabilidade e alta qualidade. Foi originalmente desenvolvido pela UC Berkeley, e mais tarde, em 1994, seu desenvolvimento foi transferido para o Internet Systems Consortium, Inc (ISC).
Execute o seguinte comando para instalar o BIND 9 no Rocky Linux 9/Alma Linux 9 a partir do repositório padrão. BIND 9 é a versão atual e BIND 10 é um projeto morto.
sudo dnf update
sudo dnf install -y bindVerifique as informações da versão.
named -vSaída de exemplo:
BIND 9.16.23-RH (Extended Support Version) <id:fde3b1f>Para verificar o número da versão e as opções de compilação, execute
named -VAgora podemos iniciar o BIND 9 com:
sudo systemctl start namedE habilitar a inicialização automática na hora do boot:
sudo systemctl enable namedVocê pode verificar seu status com:
systemctl status namedDica: Se o comando acima não sair imediatamente, pressione Q. O servidor BIND será executado como o usuário named, que é criado durante a instalação, e escuta na porta TCP e UDP 53, como pode ser visto ao executar o seguinte comando:
sudo ss -lnptu | grep namedGeralmente, as consultas DNS são enviadas para a porta UDP 53. A porta TCP 53 é para respostas de tamanho maior que 512 bytes.
O daemon BIND é chamado named. (Um daemon é um software que roda em segundo plano.) O binário named é instalado pelo pacote bind e há outro binário importante: rndc, o controlador remoto do daemon de nomes. O binário rndc é usado para recarregar/parar e controlar outros aspectos do daemon BIND. A comunicação é feita pela porta TCP 953.
Por exemplo, podemos verificar o status do servidor de nomes BIND.
sudo rndc statusConfigurações para um Resolver DNS Local
O daemon named no Rocky Linux 9/Alma Linux 9 usa o arquivo de dicas de root em /var/named/named.ca. O arquivo de dicas de root é usado pelos resolvers DNS para consultar os servidores DNS raiz. Existem 13 grupos de servidores DNS raiz, de a.root-servers.net a m.root-servers.net.
Por padrão, o servidor BIND9 no RHEL 9/Rocky Linux9/Alma Linux9 fornece serviço recursivo apenas para localhost. Consultas externas serão negadas. Edite o arquivo de configuração principal do BIND /etc/named.conf.
sudo nano /etc/named.confNa cláusula options, você pode encontrar as duas linhas seguintes.
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };Isso faz com que o named escute apenas no localhost. Se você quiser permitir que clientes na mesma rede consultem nomes de domínio, então comente essas duas linhas. (adicione duas barras no início de cada linha)
// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };Encontre a seguinte linha.
allow-query { localhost; };Adicione a faixa de rede a partir da qual os clientes podem consultar nomes de domínio como abaixo.
allow-query { localhost; 192.168.0.0/24; 10.10.10.0/24; };A seguinte linha habilita o serviço de recursão, o que é bom.
recursion yes;Eu também recomendo adicionar as seguintes diretivas na cláusula options.
// esconde o número da versão dos clientes por razões de segurança.
version "não disponível no momento";
// habilita o log de consultas<br> querylog yes;Salve e feche o arquivo. Em seguida, teste a sintaxe do arquivo de configuração.
sudo named-checkconfSe o teste for bem-sucedido (indicado por uma saída silenciosa), então reinicie o named.
sudo systemctl restart namedSe você tiver um firewall rodando no servidor BIND, então você precisa abrir a porta 53 para permitir que os clientes da LAN enviem consultas DNS.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4source address="192.168.0.0/24" port protocol="udp" port="53" accept'Recarregue o firewall para que a mudança tenha efeito.
sudo systemctl reload firewalldIsso abrirá a porta UDP 53 para a rede privada 192.168.0.0/24. Então, de outro computador na mesma LAN, podemos executar o seguinte comando para consultar o registro A de google.com. Substitua 192.168.0.101 pelo endereço IP do seu resolver BIND.
dig A google.com @192.168.0.101Nota: No AlmaLinux/RHEL, você precisa instalar o pacote bind-utils para usar o comando dig.
sudo dnf install bind-utilsAgora, no resolver BIND, verifique o log de consultas com o seguinte comando.
sudo journalctl -eu namedIsso mostrará a última mensagem de log do serviço named. Eu posso encontrar a seguinte linha no log, que indica que uma consulta DNS para o registro A de google.com foi recebida da porta 57806 do endereço IP 192.168.0.103.
named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.101)Configurando o Resolver DNS Padrão no Servidor Rocky Linux 9/Alma Linux 9
No servidor BIND, precisamos definir 127.0.0.1 como o resolver DNS padrão. Você pode verificar o resolver DNS atual no Rocky Linux 9/Alma Linux 9 com o seguinte comando.
cat /etc/resolv.confSaída de exemplo:
# Generated by NetworkManager
nameserver 192.168.0.1
nameserver 8.8.8.8Se você executar o seguinte comando no servidor BIND,
dig A facebook.comEsta consulta DNS não pode ser encontrada no log do BIND. Em vez disso, você precisa dizer explicitamente ao dig para usar o BIND.
dig A facebook.com @127.0.0.1Para definir o BIND como o resolver padrão, primeiro você precisa encontrar o nome da sua interface de rede principal com o seguinte comando.
ip addrA minha é ens3. Em seguida, execute o seguinte comando para editar o arquivo de configuração da interface de rede. Substitua ens3 pelo nome da sua interface. Se o resolver BIND estiver rodando em um laptop conectado via Wi-Fi, então você precisa editar o arquivo ifcfg-nome-da-rede-sem-fio.
sudo nano /etc/sysconfig/network-scripts/ifcfg-ens3Encontre o parâmetro DNS1 e mude seu valor para 127.0.0.1. Note que se os valores para outros parâmetros neste arquivo estiverem entre aspas duplas, então você também precisa colocar 127.0.0.1 entre aspas duplas.
DNS1="127.0.0.1"Se você não encontrar o parâmetro DNS1, então adicione a linha acima no final. Salve e feche o arquivo. Em seguida, reinicie o NetworkManager para que a mudança tenha efeito.
sudo systemctl restart NetworkManagerAgora você pode verificar novamente o conteúdo de /etc/resolv.conf. Como você pode ver, 127.0.0.1 (BIND) é agora o resolver DNS padrão no Rocky Linux 9/Alma Linux 9.
change name server on centos 8Solução de problemas
Alguns provedores de hospedagem podem ter um mecanismo diferente para atualizar o resolver DNS. Se o arquivo /etc/resolv.conf não mostrar 127.0.0.1 como o resolver, pode ser que este arquivo não seja gerenciado pelo NetworkManager. Você pode editar manualmente este arquivo.
sudo nano /etc/resolv.confE mude o servidor de nomes para 127.0.0.1.
nameserver 127.0.0.1Salve e feche o arquivo.
Configurando o resolver DNS padrão nos computadores Cliente
Agora você pode configurar outros computadores na LAN para usar o servidor BIND como resolver DNS. Para computadores Windows e MacOS, você pode pesquisar no Google para descobrir como definir os resolvers DNS padrão. Aqui vou mostrar como definir o resolver DNS em computadores desktop Linux. O seguinte método funciona em qualquer distribuição Linux que use o NetworkManager.
Clique no ícone do Network Manager no seu desktop Linux para encontrar a opção Editar conexões. (Em algumas distribuições Linux, você precisa clicar com o botão direito do mouse no Network Manager.)
network-manager-change-DNS-serverEm seguida, selecione a conexão atual e clique no ícone de engrenagem para editar esta conexão.
dns server bind9Selecione a aba Configurações IPv4, mude o método de Automático(DHCP) para Apenas endereços Automático(DHCP), o que impedirá que seu sistema obtenha o endereço do servidor DNS do seu roteador. Em seguida, especifique um servidor DNS. Aqui eu insiro o endereço IP do servidor BIND na minha LAN.
bind local dns server lanSalve suas alterações. Em seguida, reinicie o NetworkManager para que as mudanças tenham efeito.
sudo systemctl restart NetworkManagerUma vez que você estiver reconectado, clique novamente no ícone do Network Manager e selecione informações de conexão. Você pode ver que seu computador desktop Linux agora está usando seu servidor DNS BIND.
change dns server on linuxComo Desativar o IPv6 no BIND
Se você não usa o IPv6 na sua rede, então é uma boa ideia desativar o IPv6 no BIND, caso contrário haverá muitos erros sobre o IPv6 no log do BIND como abaixo.
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53Para desativar o IPv6 no BIND no AlmaLinux/RHEL, simplesmente abra o arquivo /etc/sysconfig/named
sudo nano /etc/sysconfig/namedE adicione a seguinte linha no final do arquivo.
OPTIONS="-4"Salve e feche o arquivo. Em seguida, reinicie o named e você está pronto.
sudo systemctl restart namedAgora execute o seguinte comando. Você pode ver que o BIND não está mais ouvindo no endereço IPv6.
sudo netstat -lnptu | grep namedBIND SERVFAIL
Se o seu resolver BIND não puder responder às consultas DNS (SERVFAIL), e você ver a seguinte linha no log do BIND.
dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.':
timed outProvavelmente é porque seu servidor não tem uma conectividade IPv6 funcionando. Isso aconteceu com um dos meus servidores. Eu pensei que a conectividade IPv6 estava funcionando como de costume, mas de repente parou de funcionar por razões que eu não sabia. Uma vez que eu desativei o IPv6 no BIND, a resolução DNS voltou a funcionar.
Eu tive outra situação interessante. Meu servidor BIND teve o problema SERVFAIL. Meu servidor só pode consultar o resolver DNS público do Google (8.8.8.8 e 8.8.4.4). As consultas DNS para todos os outros endereços IP são bloqueadas. Eu certamente não defini tal regra de firewall no meu próprio servidor. Se você estiver na mesma situação, pode significar que seu provedor de hospedagem não quer que você execute um resolver DNS, porque algumas pessoas não bloqueiam as consultas DNS públicas que chegam ao seu resolver DNS e, portanto, se tornam resolvers DNS abertos, que podem ser usados por atores mal-intencionados para lançar um ataque de amplificação DNS.
Neste caso, você pode configurar seu BIND para encaminhar consultas DNS para o resolver DNS público do Google, para que os clientes DNS possam continuar a usar seu resolver BIND.
Adicione uma diretiva de encaminhadores como abaixo na cláusula options no arquivo /etc/named.conf, então seu resolver BIND se torna um encaminhador, que encaminhará as solicitações DNS para um resolver DNS upstream como 8.8.8.8.
options {
// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; 192.168.0.0/24; 10.10.10.0/24; };
...
...
forwarders {
8.8.8.8;
8.8.4.4;
};
...
...
};Salve e feche o arquivo. Em seguida, reinicie o BIND para que as mudanças tenham efeito.
sudo systemctl restart namedReinício Automático do Named
Se por qualquer motivo seu processo Named for encerrado, você precisa executar o seguinte comando para reiniciá-lo.
sudo systemctl restart namedEm vez de digitar manualmente este comando, podemos fazer com que o Named reinicie automaticamente editando a unidade de serviço systemd named.service. Para substituir a configuração de serviço systemd padrão, criamos um diretório separado.
sudo mkdir -p /etc/systemd/system/named.service.d/Em seguida, crie um arquivo sob este diretório.
sudo nano /etc/systemd/system/named.service.d/restart.confAdicione as seguintes linhas no arquivo, que farão com que o Named reinicie automaticamente 5 segundos após a detecção de uma falha.
[Service]
Restart=always
RestartSec=5sSalve e feche o arquivo. Em seguida, recarregue o systemd.
sudo systemctl daemon-reloadPara verificar se isso funcionaria, mate o Named com:
sudo pkill namedEm seguida, verifique o status do Named. Você verá que o Named reiniciou automaticamente.
systemctl status namedBIND max-cache-size
O BIND pode armazenar em cache os resultados DNS no servidor para acelerar a consulta DNS para os clientes. O BIND assume que você está executando um resolver DNS dedicado, ou seja, nenhum outro serviço web está rodando no mesmo host, então o tamanho do cache padrão (definido por max-cache-size) é definido para 90% da RAM total para alcançar o melhor desempenho. Você pode ver uma linha como abaixo no log do BIND (sudo journalctl -eu named) quando o BIND inicia.
