<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.brasilpeeringforum.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Welissontome</id>
	<title>Wiki BPF - Contribuições do(a) usuário(a) [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.brasilpeeringforum.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Welissontome"/>
	<link rel="alternate" type="text/html" href="https://wiki.brasilpeeringforum.org/w/Especial:Contribui%C3%A7%C3%B5es/Welissontome"/>
	<updated>2026-04-20T20:09:18Z</updated>
	<subtitle>Contribuições do(a) usuário(a)</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.brasilpeeringforum.org/index.php?title=Melhorando_a_performance_e_resiliencia_da_rede_com_Recursive_DNS_Anycast&amp;diff=1639</id>
		<title>Melhorando a performance e resiliencia da rede com Recursive DNS Anycast</title>
		<link rel="alternate" type="text/html" href="https://wiki.brasilpeeringforum.org/index.php?title=Melhorando_a_performance_e_resiliencia_da_rede_com_Recursive_DNS_Anycast&amp;diff=1639"/>
		<updated>2019-12-04T02:17:28Z</updated>

		<summary type="html">&lt;p&gt;Welissontome: /* Pacotes necessários para a configuração de cada servidor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Melhorando a performance e resiliência da rede com Recursive DNS Anycast ===&lt;br /&gt;
&lt;br /&gt;
=== Introdução ===&lt;br /&gt;
Uma das melhoras práticas hoje em dia é termos um servidor de DNS recursivo dentro de nossos ambientes, para que assim tenhamos como melhorar a experiência de nossos usuários, quando estes desejarem acessar seus destinos de Internet e conteúdos.&lt;br /&gt;
&lt;br /&gt;
Diante do exposto acima, nem precisamos citar o quão importante é termos o nosso próprio DNS recursivo em nossa rede, uma vez que ao, confiarmos 100% em estruturas externas, podemos experimentar algumas sérias complicações em casos de falhas ([https://olhardigital.com.br/noticia/dns-do-google-sai-do-ar-para-brasileiros-e-impede-conexao-saiba-resolver/69047 DNS da Google fica fora para usuários brasileiros]). Conforme esta dinâmica, quero mostrar neste artigo como podemos construir o nosso próprio DNS Recursivo, e de modo eficiente e com resiliência, e ainda podendo contar com técnicas tais como ''DNS Anycast'', a qual é seguida por diversos servidores públicos de DNS. A maioria dos serviços de DNS autoritativos seguem este padrão, pois utilizam o conceito de ''anycast'', à exemplo do Google (8.8.8.8, 8.8.4.4), e isto pode ser verificado com um simples ''traceroute'' partindo de uma localidade dentro do território nacional, onde o tráfego deverá permanecer no Brasil. Por outro lado, ao realizarmos o mesmo ''traceroute'' a partir de algum ''looking glass'' posicionado fora do país, poderemos observar que os caminhos são outros, completamente distintos, e que o tráfego percorre os sistemas autônomos fora do país.&lt;br /&gt;
&lt;br /&gt;
Tratando-se de DNS Anycast, a maioria dos provedores de conteúdos adotam esta técnica, visando trazer uma cópia de seus autoritativos para mais próximo dos usuários, assim com fazem os ''Root Servers'' espalhados pelo mundo (https://root-servers.org/).&lt;br /&gt;
&lt;br /&gt;
No entanto, uma boa solução para obtermos um ótimo desempenho neste tipo de cenário seria com a combinação das técnicas do DNS Hyperlocal, RFC 7706.&lt;br /&gt;
&lt;br /&gt;
=== O que é DNS Anycast? ===&lt;br /&gt;
É um método de roteamento que permite que se tenha o mesmo endereço IP espalhado através de vários servidores ao longo da topologia da rede, e onde o cliente poderá se comunicar com aquele servidor de DNS que estiver mais próximo dele, independentemente da localidade, o que, consequentemente, promoverá uma diminuição da latência e do tempo de resposta sobre as consultas ao serviço de DNS. Em adição, esta técnica provê boa proteção contra ataques DDoS lançados contra seus servidores recursivos.&lt;br /&gt;
[[Arquivo:Bpf-anycast-1.png|centro|miniaturadaimagem|900x900px|Topologia simplificada comparativa entre DNS unicast e DNS anycast]]&lt;br /&gt;
&lt;br /&gt;
Geralmente os servidores de DNS recursivo são implementados no regime convencional (''unicast''), o que promove um ponto central de falhas, conforme mostrado na imagem acima. Por estas razões é que a implementação no regime ''anycast'' acaba representando um cenário mais eficiente, resiliente e confiável.&lt;br /&gt;
&lt;br /&gt;
=== Exemplo de implementação do DNS Anycast ===&lt;br /&gt;
Para exemplificar este cenário, utilizarei a última versão do BIND, mas, caso queira preferir, o Unbound poderá ser utilizado, ficando a seu critério a escolha do serviço DNS para o seu projeto.&lt;br /&gt;
&lt;br /&gt;
==== Pacotes necessários para a configuração de cada servidor ====&lt;br /&gt;
* S.O – Linux Debian, instalação básica&lt;br /&gt;
* DNS Server Recursivo – Bind (atual da distribuição)&lt;br /&gt;
* Protocolo de roteamento dinâmico – FRR&lt;br /&gt;
* Postfix + mailutils&lt;br /&gt;
* 2vCPU&lt;br /&gt;
* 2Gb RAM&lt;br /&gt;
* 10GB HDD&lt;br /&gt;
&lt;br /&gt;
==== Topologia ====&lt;br /&gt;
No cenário abordado teremos duas cidades, e cada uma destas duas cidades terá os seus próprios servidores de DNS. A observação mais importante aqui está no conceito ''Anycast'': todos os servidores serão configurados e compartilharão o mesmo endereço IP!&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Bpf-anycast-2.png|centro|miniaturadaimagem|900x900px|Topologia do cenário DNS anycast demonstrado neste artigo]]&lt;br /&gt;
&lt;br /&gt;
==== Instalação e configuração ====&lt;br /&gt;
&lt;br /&gt;
===== Instalação do bind9 =====&lt;br /&gt;
 # apt-get install bind9 dnsutils -y&lt;br /&gt;
Uma vez instalado, as configurações do DNS recursivo são simples, porém é muito importante lembrar de sempre ativar o DNSSEC nos recursivos também, e configurar as permissões de recursividade somente originadas de endereços IP confiáveis. Os nossos servidores, neste exemplo, estarão escutando as consultas recursivas sobre o endereço IP 192.168.7.200.&lt;br /&gt;
&lt;br /&gt;
===== Configuração do named.conf.options =====&lt;br /&gt;
 acl mynetwork {&lt;br /&gt;
   //ACL contendo redes trusted para consulta recursiva&lt;br /&gt;
     127.0.0.1;&lt;br /&gt;
     ::1;&lt;br /&gt;
     192.168.7.0/24;&lt;br /&gt;
     10.0.0.0/24;&lt;br /&gt;
     };&lt;br /&gt;
 &lt;br /&gt;
 options {&lt;br /&gt;
     directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
     dnssec-validation auto;&lt;br /&gt;
     dnssec-enable yes;&lt;br /&gt;
     auth-nxdomain no;&lt;br /&gt;
     listen-on-v6 { any; };&lt;br /&gt;
     listen-on { 192.168.7.200; 127.0.0.1; };&lt;br /&gt;
     dump-file &amp;quot;/var/cache/bind/cache_dump.db&amp;quot;;&lt;br /&gt;
     statistics-file &amp;quot;/var/cache/bind/named_stats.txt&amp;quot;;&lt;br /&gt;
     memstatistics-file &amp;quot;/var/cache/bind/named_mem_stats.txt&amp;quot;;&lt;br /&gt;
     recursing-file &amp;quot;/var/cache/bind/named.recursing&amp;quot;;&lt;br /&gt;
     secroots-file &amp;quot;/var/cache/bind/named.secroots&amp;quot;;&lt;br /&gt;
     bindkeys-file &amp;quot;/var/cache/bind/named.iscdlv.key&amp;quot;;&lt;br /&gt;
     managed-keys-directory &amp;quot;/var/cache/bind/dynamic&amp;quot;;&lt;br /&gt;
     pid-file &amp;quot;/var/cache/bind/named.pid&amp;quot;;&lt;br /&gt;
     session-keyfile &amp;quot;/var/cache/bind/session.key&amp;quot;;&lt;br /&gt;
     allow-query {any;};&lt;br /&gt;
     version &amp;quot;ISP DNS SERVER 1.0&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
Nesta etapa, configuraremos o Bind para que este trabalhe também como ''Hyperlocal'', aumentando assim a eficiência e resiliência dos recursivos. Um ponto importante é sempre manter o ''slave'' fazendo consultas externas nos root-servers, para caso de panes do principal.&lt;br /&gt;
&lt;br /&gt;
===== Configuração do named.conf.default-zones =====&lt;br /&gt;
 view rootservers {&lt;br /&gt;
        //View somente para o cópia do rootservers - Hyperlocal&lt;br /&gt;
 &lt;br /&gt;
 zone &amp;quot;localhost&amp;quot; {&lt;br /&gt;
    type master;&lt;br /&gt;
    file &amp;quot;/etc/bind/db.local&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
    type slave;&lt;br /&gt;
    file &amp;quot;db.rootzone&amp;quot;;&lt;br /&gt;
    notify no;&lt;br /&gt;
    masters {&lt;br /&gt;
              192.228.79.201; # b.root-servers.net&lt;br /&gt;
              192.33.4.12; # c.root-servers.net&lt;br /&gt;
              192.5.5.241; # f.root-servers.net&lt;br /&gt;
              192.112.36.4; # g.root-servers.net&lt;br /&gt;
              193.0.14.129; # k.root-servers.net&lt;br /&gt;
              192.0.47.132; # xfr.cjr.dns.icann.org&lt;br /&gt;
              192.0.32.132; # xfr.lax.dns.icann.org&lt;br /&gt;
              2001:500:84::b; # b.root-servers.net&lt;br /&gt;
              2001:500:2f::f; # f.root-servers.net&lt;br /&gt;
              2001:7fd::1; # k.root-servers.net&lt;br /&gt;
              2620:0:2830:202::132; # xfr.cjr.dns.icann.org&lt;br /&gt;
              2620:0:2d0:202::132; # xfr.lax.dns.icann.org&lt;br /&gt;
            };&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 view clientes_interno {&lt;br /&gt;
    dnssec-validation auto;&lt;br /&gt;
    allow-recursion { mynetwork; };&lt;br /&gt;
    allow-query-cache {mynetwork; };&lt;br /&gt;
    recursion yes;&lt;br /&gt;
 &lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
    type static-stub;&lt;br /&gt;
    server-addresses {127.0.0.1;};&lt;br /&gt;
       };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===== Configuração do Router e dns resolver das Cidades =====&lt;br /&gt;
O endereço IP ''anycast'' (192.168.7.200) dos servidores ficará atribuído às suas respectivas interfaces loopback, tendo, como endereço p2p, qualquer um da sua rede, desde que tenha acesso à Internet para consultar os outros autoritativos. Neste ponto estaremos fechando uma seção BGP entre o router e o servidor DNS da Cidade A ou B, de modo que o mesmo publique somente o IP da loopback para os routers de respectivas cidades.&lt;br /&gt;
* ASN da Rede: 12345&lt;br /&gt;
* ASN dos DNS: 65123&lt;br /&gt;
'''Router cidade A/B:'''&lt;br /&gt;
 router bgp 12345&lt;br /&gt;
  neighbor 192.168.0.X remote-as 65123&lt;br /&gt;
  neighbor 192.168.0.X description DC-DNS_Anycast-Cidade-A&lt;br /&gt;
  neighbor 192.168.0.X activate&lt;br /&gt;
  neighbor 192.168.0.X default-originate&lt;br /&gt;
  neighbor 192.168.0.X soft-reconfguration inbound&lt;br /&gt;
  neighbor 192.168.0.X prefx-list anycast-DNS-in in&lt;br /&gt;
  neighbor 192.168.0.X prefx-list default out&lt;br /&gt;
 !&lt;br /&gt;
 ip prefx-list anycast-DNS-in seq 10 permit 192.168.7.200/32&lt;br /&gt;
 ip prefx-list default seq 5 permit 0.0.0.0/0&lt;br /&gt;
'''Configuração do bgp nos Dns da Cidade A/B'''&lt;br /&gt;
 #cat /etc/frr/bgpd.conf&lt;br /&gt;
 router bgp&lt;br /&gt;
  neighbor 192.168.0.Y remote-as 12345&lt;br /&gt;
  neighbor 192.168.0.Y description RouterA/b&lt;br /&gt;
  neighbor 192.168.0.Y update-source 192.168.0.X&lt;br /&gt;
 !&lt;br /&gt;
  address-family ipv4 unicast&lt;br /&gt;
   network 192.168.7.200/32&lt;br /&gt;
   neighbor 192.168.0.Y prefix-list anycast_dns out&lt;br /&gt;
  exit-address-family&lt;br /&gt;
 !&lt;br /&gt;
 !&lt;br /&gt;
 ip prefix-list anycast_dns seq 10 permit 192.168.7.200/32&lt;br /&gt;
 ip prefix-list anycast_dns seq 100 deny any&lt;br /&gt;
Pronto, aqui já teremos o DNS sendo propagado para dentro da rede e as cidades utilizando dos seus respectivos servidores de DNS locais. &lt;br /&gt;
&lt;br /&gt;
===== Segue meu script de monitoramento =====&lt;br /&gt;
Agora o ponto chave: como monitorar o serviço para que, caso ocorra alguma falha na resolução, o mesmo possa reiniciar o serviço, e, caso isto não solucione o problema, o servidor possa ser derrubado para que tudo seja encaminhado para o outro DNS da rede, até que você tenha a oportunidade de analisar o problema ocorrido no servidor afetado. Sinta-se livre para realizar quaisquer modificações.&lt;br /&gt;
 welisson@meudomain.com.br&amp;quot;&lt;br /&gt;
 DNS_local=&amp;quot;192.168.7.200&amp;quot;&lt;br /&gt;
 DNS_Result2=&amp;quot;IP_DO_MEUDominio&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$DIG&amp;quot; = &amp;quot;127.0.0.1&amp;quot; ] ; then&lt;br /&gt;
       logger &amp;quot; DNS Anycast Bind - OK&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
       logger &amp;quot; DNS Anycast Bind - Failure&amp;quot;&lt;br /&gt;
       logger &amp;quot; DNS Anycast Bind - Checking stage 2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
       DIG2=`/usr/bin/dig @&amp;quot;$DNS_local&amp;quot; -t A www.meudomain.com.br +timeout=1 +short`&lt;br /&gt;
 &lt;br /&gt;
       if [ &amp;quot;$DIG2&amp;quot; != &amp;quot;$DNS_Result2&amp;quot; ] ; then&lt;br /&gt;
             /etc/init.d/bind9 stop &amp;amp;&amp;amp; /etc/init.d/bind9 start3&lt;br /&gt;
             logger &amp;quot;DNS Anycast Bind - Restarted&amp;quot;&lt;br /&gt;
             logger &amp;quot;DNS Anycast Bind - Checking again&amp;quot;&lt;br /&gt;
             DIG3=`/usr/bin/dig @127.0.0.1 -t A localhost +short`&lt;br /&gt;
                 if [ &amp;quot;$DIG3&amp;quot; = &amp;quot;127.0.0.1&amp;quot; ] ; then&lt;br /&gt;
                       echo &amp;quot;DNS Anycast Cidade X - Restored&amp;quot; | mail -s &amp;quot;DNS Anycast Restored&amp;quot; $MAILGROUP&lt;br /&gt;
                       else&lt;br /&gt;
                       /etc/init.d/frr stop&lt;br /&gt;
                       echo &amp;quot;DNS Anycast Cidade X - Crashed&amp;quot; | mail -s &amp;quot;DNS Anycast CRASHED&amp;quot; $MAILGROUP&lt;br /&gt;
                       logger &amp;quot;DNS Anycast Bind - Crashed&amp;quot;&lt;br /&gt;
                 fi&lt;br /&gt;
       fi&lt;br /&gt;
 fi&lt;br /&gt;
Qualquer dúvida ou pergunta, estou à disposição.&lt;br /&gt;
&lt;br /&gt;
e-mail: welissontome [at] gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Autor: [https://wiki.brasilpeeringforum.org/w/Usu%C3%A1rio:Welissontome Welisson]'''&lt;br /&gt;
[[Categoria:DNS]]&lt;br /&gt;
[[Categoria:Infraestrutura]]&lt;/div&gt;</summary>
		<author><name>Welissontome</name></author>
	</entry>
	<entry>
		<id>https://wiki.brasilpeeringforum.org/index.php?title=Usu%C3%A1rio:Welissontome&amp;diff=1636</id>
		<title>Usuário:Welissontome</title>
		<link rel="alternate" type="text/html" href="https://wiki.brasilpeeringforum.org/index.php?title=Usu%C3%A1rio:Welissontome&amp;diff=1636"/>
		<updated>2019-12-04T00:47:09Z</updated>

		<summary type="html">&lt;p&gt;Welissontome: Criou página com 'Welisson Tomé possui mais de 10 anos de atuação no mercado de ISP. Onde pode contar com diversos tipos de solução para este mercado. Atualmente cursando Eng. da Computaç...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welisson Tomé possui mais de 10 anos de atuação no mercado de ISP. Onde pode contar com diversos tipos de solução para este mercado. Atualmente cursando Eng. da Computação pela UNIVESP.&lt;br /&gt;
&lt;br /&gt;
Hoje atua como Gerente de Rede na ConectCor Telecom (www.conectcor.com.br),  ISP localizado no interioe de SP, onde atua em diversos segmento, como Tv e Telefonia.&lt;br /&gt;
&lt;br /&gt;
É  certificado MTCNA, e com grandes conhecimento e experiencia na area de Networking, principalmente em protocolos coko BGPv4, OSPF entre outros como também em MPLS.&lt;/div&gt;</summary>
		<author><name>Welissontome</name></author>
	</entry>
</feed>