<?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 Unbound - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/unbound/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/unbound</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Sat, 04 Jun 2022 02:00:30 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.remontti.com.br/wp-content/uploads/2024/09/icone-rr-80x80.png</url>
	<title>Arquivos Unbound - Remontti</title>
	<link>https://blog.remontti.com.br/tag/unbound</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Rodando servidor proxy-cache DNS com Unbound</title>
		<link>https://blog.remontti.com.br/6506</link>
					<comments>https://blog.remontti.com.br/6506#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 01 Jun 2022 20:21:32 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[proxy-cache]]></category>
		<category><![CDATA[Unbound]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6506</guid>

					<description><![CDATA[<p>Autor: Patrick Brandão Motivação: ao rodar qualquer software no Linux, a resolução de DNS e feita pela libresolv, que faz a leitura do /etc/host.conf e /etc/resolv.conf para obter o IP do servidor DNS. Assim,&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6506">Rodando servidor proxy-cache DNS com Unbound</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/2022/06/unbound.png" alt="" width="720" height="340" class="alignnone size-full wp-image-6540" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/unbound.png 720w, https://blog.remontti.com.br/wp-content/uploads/2022/06/unbound-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/unbound-520x245.png 520w" sizes="(max-width: 720px) 100vw, 720px" /></p>
<p><img decoding="async" class="alignnone size-thumbnail wp-image-6530 alignright" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-150x150.jpg" alt="" width="150" height="150" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-150x150.jpg 150w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-300x300.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-80x80.jpg 80w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-320x320.jpg 320w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick.jpg 640w" sizes="(max-width: 150px) 100vw, 150px" /><br />
<strong>Autor</strong>:  <a href="https://t.me/patrickbrandao" rel="noopener" target="_blank">Patrick Brandão</a></p>
<p><strong>Motivação</strong>: ao rodar qualquer software no Linux, a resolução de DNS e feita pela <strong>libresolv</strong>, que faz a leitura do /etc/host.conf e /etc/resolv.conf para obter o IP do servidor DNS.</p>
<p>Assim, a resolução de nomes requer envio de pacotes para fora do host e aguarda pela resposta, que pode demorar (latência alta) ou não ser respondida por problemas na rede entre o host e o servidor DNS (remoto)</p>
<p>A <strong>libresolv</strong> não possui suporte a cache, ou seja, se você precisar consultar um domínio (www.google.com) dezenas de vezes em um segundo, todas as vezes ela terá que enviar a pergunta ao servidor DNS para obter a mesma resposta.</p>
<p>Rodando um servidor proxy-cache DNS no host linux você garante que a libresolv envie os pedidos para um software <strong>rodando no mesmo host</strong> mas que ficará por conta de consultar 1 ou mais servidores,<strong> e salvando os resultados obtidos em cache</strong>, economizando banda e tempo nas próximas requisições aos mesmos nomes.</p>
<p>O resultado dessa implementação é uma maior velocidade no inicio das conexões do servidor.</p>
<p><strong>OBS:</strong><br />
<em><font color="red">Você não está criando um servidor recursivo, pare resoluções de nomes para sua rede!</font><br />
<font color="blue">Mas ao final Rudimar Remontti vai explicar como tornar ele recursivo.</font></em></p>
<p><strong>Distribuição utilizada: </strong><br />
Debian 11 (Bullseye) 64 bits <a href="https://blog.remontti.com.br/5792" target="_blank" rel="noopener">instalação mínima</a></p>
<h3>Instalando Unbound</h3>
<pre class="remontti-code"># apt update; apt upgrade
# apt install unbound</pre>
<p><strong>Configurando</strong><br />
A configuração abaixo visa consumir recursos mínimos e atender somente os softwares do próprio host.</p>
<pre class="remontti-code"># cat &gt; /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf &lt;&lt; EOF
server:
    auto-trust-anchor-file: &quot;/var/lib/unbound/root.key&quot;
    verbosity: 1
    statistics-interval: 20
    extended-statistics: yes
    num-threads: 2

    # Caso seja necessário fixar o IP de origem:
    #outgoing-interface: x.x.x.x

    # Abrir a porta apenas nos endereços loopback (!!segurança!!)
    interface: 127.0.0.1
    interface: ::1

    # Permitir todos os IPs pois abrimos a porta apenas para a loopback
    access-control: 127.0.0.1/8 allow
    access-control: ::1 allow

    outgoing-range: 512
    num-queries-per-thread: 128

    msg-cache-size: 2m
    rrset-cache-size: 1m

    msg-cache-slabs: 4
    rrset-cache-slabs: 4

    cache-max-ttl: 1200
    infra-host-ttl: 60
    infra-lame-ttl: 60

    infra-cache-numhosts: 128
    infra-cache-lame-size: 2k

    do-ip4: yes
    do-ip6: yes
    do-udp: yes
    do-tcp: yes
    do-daemonize: yes

    username: &quot;unbound&quot;
    directory: &quot;/etc/unbound&quot;
    logfile: &quot;/var/log/unbound.log&quot;
    use-syslog: yes
    pidfile: &quot;/run/unbound.pid&quot;

    identity: &quot;Unbound-LocalCache&quot;
    version: &quot;1.0&quot;
    hide-identity: yes
    hide-version: yes
    harden-glue: yes
    do-not-query-address: 127.0.0.1/8
    do-not-query-localhost: yes
    module-config: &quot;iterator&quot;

    #zone localhost
    local-zone: &quot;localhost.&quot; static
    local-data: &quot;localhost. 10800 IN NS localhost.&quot;
    local-data: &quot;localhost. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800&quot;
    local-data: &quot;localhost. 10800 IN A 127.0.0.1&quot;

    local-zone: &quot;127.in-addr.arpa.&quot; static
    local-data: &quot;127.in-addr.arpa. 10800 IN NS localhost.&quot;
    local-data: &quot;127.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 2 3600 1200 604800 10800&quot;
    local-data: &quot;1.0.0.127.in-addr.arpa. 10800 IN PTR localhost.&quot;

remote-control:
    control-enable: yes
    control-interface: 127.0.0.1
    control-port: 8953
    control-use-cert: &quot;no&quot;


# Operar 100% em modo forward, informe o ip dos servidores DNSs reais:
forward-zone:
    name: &quot;.&quot;
    forward-addr: 8.8.8.8
    forward-addr: 8.8.4.4

# Encaminhar dominio especifico para servidor DNS especifico:
forward-zone:
    name: &quot;slack.com&quot;
    forward-addr: 1.1.1.1
    forward-addr: 1.0.0.1
EOF
</pre>
<p>Acima criamos um forward do domínio slack.com indo para um DNS diferente (1.1.1.1 e 1.0.0.1) do padrão 8.8.8.8 e 8.8.4.4</p>
<p>Reinicie o serviço para carregar as novas configurações</p>
<pre class="remontti-code"># systemctl restart unbound</pre>
<p>Instale o pacote dnsutils para ter ferramentas de testes</p>
<pre class="remontti-code"># apt install dnsutils</pre>
<p>Testando IPv4</p>
<pre class="remontti-code"># host google.com 127.0.0.1</pre>
<pre class="remontti-code-plain">Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 

google.com has address 142.250.218.78
google.com has IPv6 address 2800:3f0:4001:81d::200e
google.com mail is handled by 10 smtp.google.com.</pre>
<pre class="remontti-code"># dig ANY google.com @127.0.0.1</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.27-Debian &lt;&lt;&gt;&gt; ANY google.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 893
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com.			IN	ANY

;; ANSWER SECTION:
google.com.		129	IN	A	142.250.218.78
google.com.		129	IN	AAAA	2800:3f0:4001:81d::200e
google.com.		51	IN	MX	10 smtp.google.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 01 15:59:35 -03 2022
;; MSG SIZE  rcvd: 104</pre>
<p>Testando IPv6</p>
<pre class="remontti-code"># host google.com ::1</pre>
<pre class="remontti-code-plain">Using domain server:
Name: ::1
Address: ::1#53
Aliases: 

google.com has address 142.250.218.78
google.com has IPv6 address 2800:3f0:4001:81d::200e
google.com mail is handled by 10 smtp.google.com.
</pre>
<pre class="remontti-code"># dig ANY google.com @::1</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.27-Debian &lt;&lt;&gt;&gt; ANY google.com @::1
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 56485
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com.			IN	ANY

;; ANSWER SECTION:
google.com.		106	IN	A	142.250.218.78
google.com.		281	IN	AAAA	2800:3f0:4001:81d::200e
google.com.		281	IN	MX	10 smtp.google.com.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Jun 01 16:03:30 -03 2022
;; MSG SIZE  rcvd: 104
</pre>
<p>Configurando o Linux para usar o servidor DNS na loopback como servidor DNS</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>
<h3>Tornando recursivo</h3>
<p><strong>Contribuição extra por:</strong> <a href="https://t.me/remontti" rel="noopener" target="_blank">Rudimar Remontti</a><br />
Caso deseje tornar recursivo para os demais hosts da sua rede este servidor, primeira coisa que você deve ter em mente que se este servidor conter IPs públicos o mesmo será responsivo para todo o planeta terra e alguns "ali<em>G</em>enigenas". Então o mínimo que você deve ter é um firewall, protegendo a porta 53 tcp/udp para responder apenas para sua rede.</p>
<pre class="remontti-code"># vim /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf</pre>
<p>Abaixo de:</p>
<pre class="remontti-code-plain">
    # abrir a porta apenas nos enderecos loopback (seguranca)
    interface: 127.0.0.1
    interface: ::1</pre>
<p>Adicione</p>
<pre class="remontti-code-plain">
    # abrir a porta para os ips de interface (risco)
    interface: 200.200.200.200
    interface: 2000:bebe:cafe::f07e</pre>
<p>Abaixo de:</p>
<pre class="remontti-code-plain">
    # Permitir todos os IPs pois abrimos a porta apenas para a loopback
    access-control: 127.0.0.1/8 allow
    access-control: ::1 allow</pre>
<p>Adicione os prefixos da sua rede</p>
<pre class="remontti-code-plain">
    access-control: 192.168.0.0/16 allow
    access-control: 172.16.0.0/12 allow
    access-control: 100.64.0.0/10 allow
    access-control: 10.0.0.0/8 allow
    access-control: 200.200.0.0/22 allow
    access-control: 2001:db8::/32 allow</pre>
<p>Desta forma abrindo conexão para os IPs da interface <em>"200.200.200.200" e "2000:bebe:cafe::f07e"</em></p>
<p>Reinicie o serviço para carregar as alterações</p>
<pre class="remontti-code"># systemctl restart unbound</pre>
<p>Pode consultar se as porta estão sendo ouvidas:</p>
<pre class="remontti-code"># ss -putan  | grep LISTEN | grep :53</pre>
<pre class="remontti-code-plain">
tcp   LISTEN 0      256           200.200.200.200:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=16))                 
tcp   LISTEN 0      256                 127.0.0.1:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=12))                 
tcp   LISTEN 0      256           200.200.200.200:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=8))                  
tcp   LISTEN 0      256                 127.0.0.1:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=4))                  
tcp   LISTEN 0      256                     [::1]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=6))                  
tcp   LISTEN 0      256    [2000:bebe:cafe::f07e]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=10))                 
tcp   LISTEN 0      256                     [::1]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=14))                 
tcp   LISTEN 0      256    [2000:bebe:cafe::f07e]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=18))</pre>
<p><strong>Firewall</strong><br />
Porém mesmo que você tenha setados seus prefixos em <strong>access-control</strong> a porta 53 estará respondendo para todo o mundo. Para fechar elas use o nfttables que por padrão já vem no Debian 11 no lugar do iptables. Você pode instalar o mesmo com apt se necessário.</p>
<p>Edite o arquivo do nftables</p>
<pre class="remontti-code"># vim /etc/nftables.conf</pre>
<p>Ajuste para ficar assim e em <strong>elements</strong> insira todos seus prefixos autorizados.</p>
<pre class="remontti-code">#!/usr/sbin/nft -f
  
flush ruleset

table inet filter {

    set acesso-dns4 {
        flags interval
        type ipv4_addr
        elements = { 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, 200.200.200.0/22 }
    }
    set acesso-dns6 {
        flags interval
        type ipv6_addr
        elements = { ::1, 2001:db8::/32 }
    }
    chain input {
        type filter hook input priority 0;

        # Permite Acesso DNS na porta 53
        ip saddr  @acesso-dns4 udp dport 53 counter accept
        ip saddr  @acesso-dns4 tcp dport 53 counter accept
        ip6 saddr @acesso-dns6 udp dport 53 counter accept
        ip6 saddr @acesso-dns6 tcp dport 53 counter accept
        udp dport 53 counter drop
        tcp dport 53 counter drop

        type filter hook input priority 0;
    }
    chain forward {
        type filter hook forward priority 0;
    }
    chain output {
        type filter hook output priority 0;
    }
}</pre>
<p>Habilite o mesmo para iniciar com o boot e reinicie.</p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl restart nftables</pre>
<p>Consulte se seu firewall foi carregado com o comando:</p>
<pre class="remontti-code"># nft list ruleset</pre>
<p>Retorno:</p>
<pre class="remontti-code-plain">table inet filter {
	set acesso-dns4 {
		type ipv4_addr
		flags interval
		elements = { 10.0.0.0/8, 100.64.0.0/10,
			     127.0.0.1, 172.16.0.0/12,
			     192.168.0.0/16, 200.200.200.0/22 }
	}

	set acesso-dns6 {
		type ipv6_addr
		flags interval
		elements = { ::1,
			     2001:db8::/32 }
	}

	chain input {
		type filter hook input priority filter; policy accept;
		ip saddr @acesso-dns4 udp dport 53 counter packets 0 bytes 0 accept
		ip saddr @acesso-dns4 tcp dport 53 counter packets 0 bytes 0 accept
		ip6 saddr @acesso-dns6 udp dport 53 counter packets 0 bytes 0 accept
		ip6 saddr @acesso-dns6 tcp dport 53 counter packets 0 bytes 0 accept
		udp dport 53 counter packets 0 bytes 0 drop
		tcp dport 53 counter packets 0 bytes 0 drop
	}

	chain forward {
		type filter hook forward priority filter; policy accept;
	}

	chain output {
		type filter hook output priority filter; policy accept;
	}
}</pre>
<p>Pronto espero que tenha gostado! Agradeço ao meu parceiro Patrick!</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/6506">Rodando servidor proxy-cache DNS com Unbound</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6506/feed</wfw:commentRss>
			<slash:comments>21</slash:comments>
		
		
			</item>
	</channel>
</rss>
