<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos Anycast DNS - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/anycast-dns/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/anycast-dns</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Tue, 14 Jul 2026 20:45:49 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://blog.remontti.com.br/wp-content/uploads/2024/09/icone-rr-80x80.png</url>
	<title>Arquivos Anycast DNS - Remontti</title>
	<link>https://blog.remontti.com.br/tag/anycast-dns</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Servidor DNS #1 &#8211; Recursivo com BIND 9.20 no Debian 13 (Trixie)</title>
		<link>https://blog.remontti.com.br/8358</link>
					<comments>https://blog.remontti.com.br/8358#respond</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 14 Jul 2026 20:45:49 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Administração de Redes]]></category>
		<category><![CDATA[Anycast DNS]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[BIND 9.20]]></category>
		<category><![CDATA[Bind no Debian]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[Cache DNS]]></category>
		<category><![CDATA[Debian 13]]></category>
		<category><![CDATA[Debian Trixie]]></category>
		<category><![CDATA[dig]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNS Recursivo]]></category>
		<category><![CDATA[dnssec]]></category>
		<category><![CDATA[Firewall Linux]]></category>
		<category><![CDATA[Forwarders]]></category>
		<category><![CDATA[Infraestrutura de Redes]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[isp]]></category>
		<category><![CDATA[named]]></category>
		<category><![CDATA[nftables]]></category>
		<category><![CDATA[Open Resolver]]></category>
		<category><![CDATA[Porta 53]]></category>
		<category><![CDATA[Provedor de Internet]]></category>
		<category><![CDATA[Rede de Provedores]]></category>
		<category><![CDATA[Resolver DNS]]></category>
		<category><![CDATA[Segurança de Redes]]></category>
		<category><![CDATA[servidor dns]]></category>
		<category><![CDATA[servidor linux]]></category>
		<category><![CDATA[Tutorial Linux]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=8358</guid>

					<description><![CDATA[<p>BIND é o servidor DNS mais utilizado na Internet e um padrão de fato em sistemas Unix/Linux. O DNS Recursivo é responsável pela resolução de nomes: recebe a consulta do cliente e percorre a&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/8358">Servidor DNS #1 &#8211; Recursivo com BIND 9.20 no Debian 13 (Trixie)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2026/07/CAPA.png" alt="" width="1672" height="941" class="alignnone size-full wp-image-8364" srcset="https://blog.remontti.com.br/wp-content/uploads/2026/07/CAPA.png 1672w, https://blog.remontti.com.br/wp-content/uploads/2026/07/CAPA-300x169.png 300w, https://blog.remontti.com.br/wp-content/uploads/2026/07/CAPA-1024x576.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2026/07/CAPA-768x432.png 768w, https://blog.remontti.com.br/wp-content/uploads/2026/07/CAPA-1536x864.png 1536w" sizes="(max-width: 1672px) 100vw, 1672px" /></p>
<p><a href="https://pt.wikipedia.org/wiki/BIND" rel="noopener noreferrer" target="_blank">BIND</a> é o servidor DNS mais utilizado na Internet e um padrão de fato em sistemas Unix/Linux.</p>
<p>O <strong>DNS Recursivo</strong> é responsável pela resolução de nomes: recebe a consulta do cliente e percorre a hierarquia do DNS — servidores raiz → TLD (.br, .com) → autoritativo do domínio — até obter a resposta. O resultado fica armazenado em <strong>cache</strong> pelo tempo (TTL) definido pelo autoritativo do domínio consultado, o que reduz a latência das próximas consultas e o tráfego DNS saindo da sua rede.</p>
<p>Para um ISP, rodar recursivo próprio significa menor latência (o servidor está dentro do seu AS, próximo do cliente), controle total do serviço e independência de resolvers públicos como 8.8.8.8 e 1.1.1.1.</p>
<p><strong>Atenção:</strong> este tutorial cobre <strong>apenas o Recursivo</strong>.<br />
&#8211; <strong>DNS Autoritativo e Reverso</strong> estão na <strong><a href="#2" rel="noopener" target="_blank">parte 2</a> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/23f3.png" alt="⏳" class="wp-smiley" style="height: 1em; max-height: 1em;" />(em breve)</strong><br />
&#8211; <strong>DNS anycast com FRR</strong> (alta disponibilidade) na <strong><a href="#3" rel="noopener" target="_blank">parte 3</a> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/23f3.png" alt="⏳" class="wp-smiley" style="height: 1em; max-height: 1em;" />(em breve)</strong>.</p>
<p>Usaremos o <strong>Debian 13 (Trixie)</strong> com <strong>BIND 9.20</strong> — houve mudanças relevantes em relação aos tutoriais antigos com<strong> Debian 11/12</strong>.</p>
<p><strong>Requisitos:</strong><br />
<strong><a href="https://blog.remontti.com.br/8267" rel="noopener noreferrer" target="_blank">Debian 13 Trixie &#8211; Instalação Limpa</a></strong></p>
<p><strong>Leituras recomendadas:</strong><br />
<a href="https://blog.remontti.com.br/5848" rel="noopener" target="_blank"><strong>Configurando interface de rede no Debian</strong></a><br />
<a href="https://blog.remontti.com.br/5867" rel="noopener" target="_blank"><strong>Como melhorar a produtividade no seu Debian após instalação</strong></a></p>
<h5>Vire root com o comando correto!</h5>
<pre class="remontti-code">$ su -</pre>
<h5>Pacotes recomendados:</h5>
<pre class="remontti-code"># apt install vim wget unzip man-db htop tree mtr-tiny whois -y</pre>
<h4>Configurando a placa de Rede</h4>
<p>Neste tutorial vou configurar a rede da forma simples e convencional (IP fixo na interface). Na parte 3 aprenderemos a configurar via roteamento (FRR), que é o cenário ideal para DNS anycast. Se quiser se aprofundar, veja também: <a href="https://blog.remontti.com.br/5848" target="_blank">Configurando interface de rede no Debian</a>. Caso já tenha sua placa de rede configurada pule esta etapa.</p>
<p>Primeiro descubra o nome da sua interface:</p>
<pre class="remontti-code"># ip -br link</pre>
<p>No meu caso o nome é <strong>ens18</strong>, o seu pode ser diferente (<em>ens192, enp0s3, eno1, enp1s0&#8230;</em>). Ajuste nos exemplos abaixo.</p>
<p>Edite o arquivo:</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<p>Seu arquivo deverá ficar assim (as linhas &#8220;source&#8221; e da interface de loopback &#8220;lo&#8221; já existem no arquivo, não duplique, apenas ajuste/adicione o bloco da sua interface):</p>
<pre class="remontti-code-plain">source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
    address 255.9.0.2/28
    gateway 255.9.0.1

iface ens18 inet6 static
    address 2559:ffff:cafe::2/64
    gateway 2559:ffff:cafe::1  </pre>
<p>Obs: substitua os IPs pelos endereços do seu bloco. Estou usando 255.9.0.2/28 e 2559:ffff:cafe::2/64 apenas como exemplo.</p>
<p>Obs 2: em servidor use &#8220;auto&#8221; em vez de &#8220;allow-hotplug&#8221;. O allow-hotplug só levanta a interface por evento de hotplug e pode deixar seu servidor sem rede no boot em algumas situações; o auto garante que a interface suba junto com o sistema.</p>
<p>Aplique a configuração:</p>
<pre class="remontti-code"># systemctl restart networking</pre>
<p><strong>ATENÇÃO</strong>: se você está acessando o servidor via SSH e errar algo aqui, vai perder o acesso. Se possível faça essa etapa pelo console (físico ou da VM).<br />
Mas recomendo que você reinicie o servidor.</p>
<pre class="remontti-code"># reboot </pre>
<p>Acesse novamente o servidor pelo endereço de IP.<br />
Valide se os IPs subiram e se há conectividade:</p>
<pre class="remontti-code"># ip -br address
# ip -c address
# ping -c3 8.8.8.8
# ping -c3 2001:4860:4860::8888</pre>
<h2>Instalação do Bind9</h2>
<p>Instalação dos pacotes:</p>
<pre class="remontti-code"># apt install bind9 bind9-utils bind9-dnsutils</pre>
<p>Obs: no Debian 13 o serviço agora se chama &#8220;named&#8221; (o nome &#8220;bind9&#8221; ainda funciona como atalho, mas nos comandos vou usar named que é o nome oficial).</p>
<p>Arquitetura de arquivos e diretórios do bind9 no Debian 13:</p>
<h5>Estrutura de arquivos do BIND</h5>
<p>Os principais arquivos do BIND ficam distribuídos nos seguintes diretórios:</p>
<h4><strong>/etc/bind/</strong></h4>
<p>Diretório principal de configuração do BIND.</p>
<ul>
<li><strong>named.conf</strong>: arquivo principal, responsável por incluir os demais arquivos de configuração.</li>
<li><strong>named.conf.local</strong>: usado para declarar zonas locais, autoritativas ou configurações específicas do servidor.</li>
<li><strong>named.conf.options</strong>: contém opções globais, como recursão, encaminhadores, interfaces e controles de acesso.</li>
<li><strong>named.conf.root-hints</strong>: referência aos servidores raiz do DNS.</li>
<li><strong>rndc.key</strong>: chave utilizada para comunicação segura entre o comando <strong>rndc</strong> e o serviço <strong>named</strong>.</li>
</ul>
<h4><strong>/usr/share/dns/</strong></h4>
<p>Contém arquivos de referência relacionados à raiz do DNS.</p>
<ul>
<li><strong>root.hints</strong>: lista dos servidores raiz do DNS.</li>
<li><strong>root.key</strong>: chave de confiança utilizada na validação DNSSEC.</li>
<li><strong>root.ds</strong>: registro DS da zona raiz utilizado como referência para DNSSEC.</li>
</ul>
<h4><strong>/var/cache/bind/</strong></h4>
<p>Diretório de trabalho do BIND.<br />
Nele ficam arquivos gerados ou atualizados pelo próprio serviço, como zonas dinâmicas, journals e chaves gerenciadas pelo DNSSEC.</p>
<ul>
<li><strong>managed-keys.bind</strong>: armazena chaves DNSSEC gerenciadas automaticamente pelo BIND.</li>
<li><strong>managed-keys.bind.jnl</strong>: arquivo de journal utilizado para registrar alterações dessas chaves.</li>
</ul>
<h4><strong>/run/named/</strong></h4>
<p>Contém arquivos temporários criados enquanto o serviço está em execução.</p>
<ul>
<li><strong>named.pid</strong>: armazena o PID do processo <strong>named</strong>.</li>
<li><strong>session.key</strong>: chave temporária utilizada em operações de atualização dinâmica local.</li>
</ul>
<h4>Configuração do Recursivo</h4>
<p>Alteramos o DNS do servidor fazendo com que ele consulte em si próprio, através dos IPs de loopback. Essa alteração deve ser feita no arquivo /etc/resolv.conf.</p>
<pre class="remontti-code"># echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf
# echo &quot;nameserver ::1&quot; &gt;&gt; /etc/resolv.conf</pre>
<p>Neste ponto, o servidor já deve estar resolvendo nomes localmente. Agora utilize a ferramenta <strong>dig</strong> para realizar alguns testes:</p>
<pre class="remontti-code"># dig @localhost google.com.br A
# dig @localhost google.com.br AAAA
# dig @localhost google.com.br A +trace</pre>
<p>Agora vamos ajustar o BIND para funcionar como servidor DNS recursivo, permitindo consultas somente das redes autorizadas.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code-plain">acl autorizados {
        127.0.0.1;
        ::1;
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
        100.64.0.0/10;
        fc00::/7;
        fe80::/10;

        // Prefixos da sua rede
        255.9.0.0/22;
        2559:ffff::/32;
};

options {
        directory &quot;/var/cache/bind&quot;;

        dnssec-validation auto;

        listen-on { any; };
        listen-on-v6 { any; };

        minimal-responses yes;

        max-ncache-ttl 300;
        min-cache-ttl 90;

        allow-recursion { autorizados; };
        allow-query-cache { autorizados; };
        allow-query { autorizados; };

        version &quot;RR DNS Server - Do good&quot;;
};</pre>
<p><strong>Atenção:</strong> substitua <em>255.9.0.0/22 e 2559:ffff::/32</em> pelos prefixos IPv4 e IPv6 da sua rede.</p>
<h3>Entendendo as opções</h3>
<p><strong>acl autorizados</strong><br />
Lista os endereços que podem utilizar o servidor recursivo. Inclui localhost, redes privadas, CGNAT, IPv6 interno e os prefixos da sua rede. Clientes fora dessa lista recebem <strong>REFUSED</strong>.</p>
<p><strong>directory &#8220;/var/cache/bind&#8221;;</strong><br />
Define o diretório de trabalho do BIND.</p>
<p><strong>dnssec-validation auto;</strong><br />
Ativa a validação DNSSEC para verificar a autenticidade das respostas.</p>
<p><strong>listen-on / listen-on-v6</strong><br />
Define em quais endereços IPv4 e IPv6 o BIND escutará. O valor <strong>any</strong> significa todos os endereços do servidor.</p>
<p><strong>minimal-responses yes;</strong><br />
Reduz o tamanho das respostas, enviando somente as informações necessárias.</p>
<p><strong>max-ncache-ttl 300;</strong><br />
Mantém respostas negativas, como <strong>NXDOMAIN</strong>, no cache por no máximo 5 minutos.</p>
<p><strong>min-cache-ttl 90;</strong><br />
Mantém respostas positivas no cache por pelo menos 90 segundos, mesmo quando o domínio informa um TTL menor.</p>
<p><strong>allow-recursion</strong><br />
Define quem pode realizar consultas recursivas.</p>
<p><strong>allow-query-cache</strong><br />
Define quem pode receber respostas armazenadas no cache.</p>
<p><strong>allow-query</strong><br />
Define quem pode consultar o servidor. Como este servidor é somente recursivo, restringimos o acesso à ACL.</p>
<p><strong>version &#8220;RR DNS Server &#8211; Do good&#8221;;</strong><br />
Oculta a versão real do BIND em consultas simples. Não substitui atualizações e boas práticas de segurança.</p>
<p><strong>Opções adicionais</strong></p>
<p><strong>max-cache-ttl</strong><br />
Define o tempo máximo das respostas positivas no cache. O padrão é 7 dias.</p>
<p><strong>max-cache-ttl 86400;</strong><br />
O exemplo acima limita o cache a 24 horas.</p>
<p><strong>max-cache-size</strong><br />
Define quanto de memória o cache pode utilizar.</p>
<p><strong>max-cache-size 2G;</strong><br />
Limita a 2 GB a memória RAM que o BIND pode usar para armazenar respostas DNS em cache.</p>
<h3>Validando a configuração</h3>
<pre class="remontti-code"># named-checkconf</pre>
<p>Se nenhum erro for exibido:</p>
<pre class="remontti-code"># systemctl restart named
# systemctl status named --no-pager</pre>
<p>Refaça os testes para ver se ainda está resolvendo nomes:</p>
<pre class="remontti-code"># dig @localhost google.com A</pre>
<p>Algumas coisas que você precisa saber, da saída dig:</p>
<pre class="remontti-code-green">
; &lt;&lt;&gt;&gt; DiG 9.20.23-1~deb13u1-Debian &lt;&lt;&gt;&gt; @localhost google.com A
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 42819
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 9afef403caa37261010000006a5680455e2f7c3f211ca5b7 (good)
;; QUESTION SECTION:
;google.com.			IN	A

;; ANSWER SECTION:
google.com.		31	IN	A	172.217.29.206

;; Query time: 0 msec
;; SERVER: ::1#53(localhost) (UDP)
;; WHEN: Tue Jul 14 15:30:29 -03 2026
;; MSG SIZE  rcvd: 83
</pre>
<p><strong>HEADER</strong>: Ela contém diversas informações a respeito da consulta. </p>
<pre class="remontti-code-green">;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 49083
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9</pre>
<p>- <strong>status</strong> indica o tratamento de erro nas consultas, sendo eles:<br />
-- <strong>NOERROR</strong>: Nenhum erro encontrado, ou seja, sucesso.<br />
-- <strong>SERVFAIL</strong>: Houve algum problema com o servidor, que não conseguiu processar a query.<br />
-- <strong>NXDOMAIN</strong>: Significa que o domínio pesquisado não existe.<br />
-- <strong>REFUSED</strong>: O servidor rejeitou a solicitação.<br />
-<strong>flags:</strong> indicador das opções de recursividade e de autoridade, em resumo este conjunto de “letrinhas” (aa, rd, ra, etc), indica o estado ligado/desligado <a href="https://www.ietf.org/rfc/rfc1035.txt" rel="noopener" target="_blank">RFC1035</a><br />
-- <strong>qr</strong>: se a mensagem é uma query (0) ou uma resposta (1). Como estamos avaliando somente as respostas, este bit sempre estará ligado (consequentemente, sempre veremos a string “qr” no campo “flags“).<br />
-- <strong>aa</strong>: que o servidor que respondeu à solicitação é autoritativo do domínio.<br />
-- <strong>rd</strong>: indica que o cliente solicitou recursão ao servidor DNS.<br />
-- <strong>ra</strong>: que o servidor que respondeu à requisição suporta consultas recursivas.<br />
-- <strong>tc</strong>: que a mensagem de resposta está truncada.<br />
-- <strong>z</strong>: reservado para uso futuro.<br />
- <strong>contadores</strong>: na mesma linha das flags, encontramos quantos registros foram retornados em cada seção.</p>
<pre class="remontti-code-green">QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9</pre>
<p><strong>QUESTION </strong><br />
Replica a query que foi enviada para consulta, quando o tipo não é informado, o dig utiliza o registro A por padrão.</p>
<pre class="remontti-code-green">;; QUESTION SECTION:
;google.com.br.                 IN      A</pre>
<p>Outros exemplos:</p>
<pre class="remontti-code"># dig @localhost google.com.br AAAA
# dig @localhost google.com.br MX
# dig @localhost google.com.br NS
# dig @localhost google.com.br TXT
# dig @localhost google.com.br ANY</pre>
<p><strong>ANSWER </strong><br />
Contém a resposta para a consulta que foi enviada.</p>
<pre class="remontti-code-green">;; ANSWER SECTION:
google.com.br.          86400   IN      CAA     0 issue &quot;pki.goog&quot;
google.com.br.          60      IN      SOA     ns1.google.com. dns-admin.google.com. 405356128 900 900 1800 60
google.com.br.          300     IN      AAAA    2800:3f0:4001:819::2003
google.com.br.          300     IN      A       172.217.173.67
google.com.br.          300     IN      MX      0 smtp.google.com.
google.com.br.          300     IN      TXT     &quot;v=spf1 -all&quot;
google.com.br.          2774    IN      NS      ns4.google.com.
google.com.br.          2774    IN      NS      ns2.google.com.
google.com.br.          2774    IN      NS      ns1.google.com.
google.com.br.          2774    IN      NS      ns3.google.com.</pre>
<p><strong>AUTHORITY</strong><br />
Servidores que respondem com “autoridade” pelo domínio (os NS)</p>
<pre class="remontti-code-green">;; AUTHORITY SECTION:
google.com.br.          3599    IN      NS      ns1.google.com.
google.com.br.          3599    IN      NS      ns4.google.com.
google.com.br.          3599    IN      NS      ns3.google.com.
google.com.br.          3599    IN      NS      ns2.google.com.</pre>
<p><strong>ADDITIONAL</strong><br />
Informações auxiliares ou adicionais à pesquisa, no exemplo IPs dos servidores DNS</p>
<pre class="remontti-code-green">;; ADDITIONAL SECTION:
ns1.google.com.         172800  IN      AAAA    2001:4860:4802:32::a
ns2.google.com.         172800  IN      AAAA    2001:4860:4802:34::a
ns3.google.com.         172800  IN      AAAA    2001:4860:4802:36::a
ns4.google.com.         172800  IN      AAAA    2001:4860:4802:38::a
ns1.google.com.         172800  IN      A       216.239.32.10
ns2.google.com.         172800  IN      A       216.239.34.10
ns3.google.com.         172800  IN      A       216.239.36.10
ns4.google.com.         172800  IN      A       216.239.38.10</pre>
<p>Na última parte da saída encontramos mais quatro informações:</p>
<pre class="remontti-code-green">;; Query time: 10 msec
;; SERVER: ::1#53(localhost) (UDP)
;; WHEN: Tue Jul 14 15:30:29 -03 2026
;; MSG SIZE  rcvd: 83</pre>
<p>- <strong>QUERY TIME</strong>: informa quanto tempo a consulta levou. Um resultado de 0 ms significa que ela foi concluída em menos de 1 ms, geralmente por ter sido respondida localmente ou pelo cache.<br />
- <strong>SERVER</strong>: Qual servidor ele realizou a consulta<br />
- <strong>WHEN</strong>:  data e hora em que a consulta foi realizada. O horário exibido é o do próprio servidor, e o valor -03 indica o fuso horário (UTC-3, horário de Brasília).<br />
- <strong>MSG SIZE</strong>: tamanho do pacote </p>
<p>Leitura recomendada: <a href="https://bind9.readthedocs.io/en/stable/reference.html" target="_blank">https://bind9.readthedocs.io/en/stable/reference.html</a></p>
<h4>Comandos do dia a dia</h4>
<p>Para verificar se seu arquivo tem algum erro use o comando named-checkconf (se não retornar nada, está tudo certo):</p>
<pre class="remontti-code"># named-checkconf /etc/bind/named.conf
# named-checkconf /etc/bind/named.conf.options</pre>
<p>Imprime todas as configurações (bem útil para mandar suas conf quando estiver com algum problema lá no grupo do Telegram):</p>
<pre class="remontti-code"># named-checkconf -p</pre>
<p>Reinicie o serviço para que as novas configurações sejam carregadas, e verifique se o mesmo subiu sem erros:</p>
<pre class="remontti-code"># systemctl restart named
# systemctl status named</pre>
<h5>Atualização dos Root Servers</h5>
<p>Não é comum servidores raiz terem alteração, mas pode acontecer, como em 2023. Então caso um dia precise atualizá-los, faça isso:</p>
<pre class="remontti-code"># mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`
# wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints</pre>
<p>Para visualizar a diferença entre os arquivos:</p>
<pre class="remontti-code"># diff /usr/share/dns/root.hints.`date +%Y%m%d` /usr/share/dns/root.hints</pre>
<h5>Desativar IPv6 do bind <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f92c.png" alt="🤬" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>
<p>Se por algum motivo precisar desabilitar, faça:</p>
<pre class="remontti-code"># vim /etc/default/named</pre>
<p>Altere <strong>OPTIONS="-u bind"</strong> para:</p>
<pre class="remontti-code-red">OPTIONS=&quot;-4 -u bind&quot;</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Altere <strong>listen-on-v6 { any; };</strong> para:</p>
<pre class="remontti-code-red">listen-on-v6 { none; };</pre>
<p>Reinicie o serviço:</p>
<pre class="remontti-code"># systemctl restart named</pre>
<h5>Configurando encaminhadores DNS (forwarders)</h5>
<p>Em alguns casos você pode estar com problema em relação aos servidores raiz, e então querer configurar <strong>forwarders</strong>.<br />
Com essa configuração, o BIND não consulta diretamente os servidores raiz: ele encaminha todas as consultas para os servidores DNS definidos em <b>forwarders</b> e mantém as respostas no cache local.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Adicione dentro do bloco <code>options { ... };</code>:</p>
<pre class="remontti-code-plain">...
recursion yes;
forward only;
forwarders {
        // Cloudflare
        1.1.1.1;
        1.0.0.1;
        2606:4700:4700::1111;
        2606:4700:4700::1001;

        // Google
        8.8.8.8;
        8.8.4.4;
        2001:4860:4860::8888;
        2001:4860:4860::8844;
};
...
</pre>
<p><code>recursion yes;</code> habilita a resolução recursiva, permitindo que o BIND busque a resposta completa em nome do cliente.<br />
<code>forward only</code>, caso todos os encaminhadores falhem, o BIND não tentará resolver a consulta diretamente pelos servidores raiz.</p>
<h3>Protegendo o servidor</h3>
<p>Seu DNS recursivo já está configurado. Como este servidor será utilizado apenas para esse serviço, vamos aplicar regras no nftables para restringir o acesso às portas expostas, principalmente à porta 53.</p>
<pre class="remontti-code"># vim /etc/nftables.conf</pre>
<p>Na seção <strong>elements</strong>, substitua os endereços de exemplo pelos IPs e prefixos que terão permissão de acesso. O modelo também inclui regras de proteção para o SSH e para o agente do Zabbix.</p>
<pre class="remontti-code-plain">
#!/usr/sbin/nft -f

flush ruleset

# Portas acessíveis somente pelas redes do NOC 22 SSH / 10050 Zabbix
define PORTAS_RESTRITAS_TCP = { 22, 10050 }

# Porta do serviço DNS
define PORTA_DNS = 53

table inet filter {

    # Redes do NOC: acesso administrativo, ping e DNS
    set REDE_NOC4 {
        type ipv4_addr;
        flags interval;
        elements = { 192.168.0.0/24, 255.9.0.0/26 };
    }

    set REDE_NOC6 {
        type ipv6_addr;
        flags interval;
        elements = { 2559:ffff:f0da::/48 };
    }

    # Redes autorizadas a utilizar o DNS
    set REDE_CLIENTES4 {
        type ipv4_addr;
        flags interval;
        elements = {
            10.0.0.0/8,
            172.16.0.0/12,
            192.168.0.0/16,
            100.64.0.0/10,
            255.9.0.0/22
        };
    }

    set REDE_CLIENTES6 {
        type ipv6_addr;
        flags interval;
        elements = {
            fc00::/7,
            fe80::/10,
            2559:ffff::/32
        };
    }

    chain input {
        type filter hook input priority 0;
        policy drop;

        # Descarta pacotes inválidos
        ct state invalid counter drop

        # Permite conexões já estabelecidas ou relacionadas
        ct state established,related counter accept

        # Permite a comunicação interna do próprio servidor
        iifname &quot;lo&quot; counter accept

        # ICMPv4 necessário para erros e PMTU
        meta l4proto icmp icmp type {
            destination-unreachable,
            time-exceeded,
            parameter-problem
        } counter accept

        # Ping IPv4 somente pelas redes do NOC e CLIENTES
        ip saddr @REDE_NOC4 meta l4proto icmp icmp type echo-request counter accept
        ip saddr @REDE_CLIENTES4 meta l4proto icmp icmp type echo-request counter accept

        # ICMPv6 essencial para NDP, RA, PMTU e erros IPv6
        meta l4proto ipv6-icmp icmpv6 type {
            destination-unreachable,
            packet-too-big,
            time-exceeded,
            parameter-problem,
            echo-reply,
            nd-router-solicit,
            nd-router-advert,
            nd-neighbor-solicit,
            nd-neighbor-advert
        } counter accept

        # Ping IPv6 somente pelas redes do NOC e CLIENTES
        ip6 saddr @REDE_NOC6 meta l4proto ipv6-icmp icmpv6 type echo-request counter accept
        ip6 saddr @REDE_CLIENTES6 meta l4proto ipv6-icmp icmpv6 type echo-request counter accept

        # SSH e Zabbix Agent somente pelas redes do NOC
        ip saddr @REDE_NOC4 tcp dport $PORTAS_RESTRITAS_TCP counter accept
        ip6 saddr @REDE_NOC6 tcp dport $PORTAS_RESTRITAS_TCP counter accept

        # DNS TCP e UDP somente para as redes autorizadas
        ip saddr @REDE_CLIENTES4 meta l4proto { tcp, udp } th dport $PORTA_DNS counter accept
        ip6 saddr @REDE_CLIENTES6 meta l4proto { tcp, udp } th dport $PORTA_DNS counter accept
    }

    chain forward {
        type filter hook forward priority 0;
        policy drop;
    }

    chain output {
        type filter hook output priority 0;
        policy accept;
    }
}
</pre>
<p>Teste: </p>
<pre class="remontti-code"># nft -c -f /etc/nftables.conf</pre>
<p>Se nenhum erro for exibido, reinicie o serviço para aplicar as regras.</p>
<p>Ative o nftables para iniciar automaticamente junto com o sistema e reinicie o serviço para aplicar as regras:</p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl restart nftables</pre>
<p><strong>Atenção</strong>: antes de reiniciar o firewall, tenha acesso ao console do servidor. Se perder o acesso, alguma regra foi configurada incorretamente.</p>
<p>Para verificar se as regras foram carregadas corretamente, execute:</p>
<pre class="remontti-code"># nft list ruleset</pre>
<p>O post <a href="https://blog.remontti.com.br/8358">Servidor DNS #1 &#8211; Recursivo com BIND 9.20 no Debian 13 (Trixie)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/8358/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
