Mudanças entre as edições de "DNS Recursivo Anycast Hyperlocal"

De Wiki BPF
Ir para: navegação, pesquisa
Linha 17: Linha 17:
 
* [https://frrouting.org/ FRRouting 7.5.1.]
 
* [https://frrouting.org/ FRRouting 7.5.1.]
 
* Unbound 1.9.0 (pacote da distribuição Debian). Obs.: essa versão do Unbound já possui suporte ao Hyperlocal nativo.
 
* Unbound 1.9.0 (pacote da distribuição Debian). Obs.: essa versão do Unbound já possui suporte ao Hyperlocal nativo.
* Shell script para checar se o DNS está OK e se não tiver retirar ele do anúncio.
+
* IRQBalance (pacote do Debian).
 +
* Shell script em bash, para checar se o DNS está OK e se não tiver retirar ele do anúncio.
  
 
== Gráfico de utilização desse sistema em produção ==
 
== Gráfico de utilização desse sistema em produção ==
Linha 26: Linha 27:
  
 
=== Instalação dos pacotes ===
 
=== Instalação dos pacotes ===
Vamos configurar o repositório oficial do FRR:<pre>
+
 
 +
==== FRR ====
 +
Vamos configurar o repositório oficial do FRR e instalar os pacotes:<pre>
 
# echo "deb https://deb.frrouting.org/frr buster frr-stable" > /etc/apt/sources.list.d/frr.list
 
# echo "deb https://deb.frrouting.org/frr buster frr-stable" > /etc/apt/sources.list.d/frr.list
 
# curl -s https://deb.frrouting.org/frr/keys.asc | sudo apt-key add -
 
# curl -s https://deb.frrouting.org/frr/keys.asc | sudo apt-key add -
 
# apt update
 
# apt update
 
# apt install frr frr-doc frr-pythontools
 
# apt install frr frr-doc frr-pythontools
 +
</pre>
 +
 +
==== Unbound ====
 +
<pre>
 +
# apt install unbound
 +
</pre>
 +
 +
==== IRQBalance ====
 +
<pre>
 +
# apt install irqbalance
 +
# systemctl enable irqbalance
 +
</pre>
 +
 +
=== Configurando a rede ===
 +
/etc/network/interfaces:<pre>
 +
# This file describes the network interfaces available on your system
 +
# and how to activate them. For more information, see interfaces(5).
 +
 +
source /etc/network/interfaces.d/*
 +
 +
# The loopback network interface
 +
auto lo
 +
iface lo inet loopback
 +
 +
auto lo:0
 +
iface lo:0 inet static
 +
      address 10.10.10.10/32
 +
 +
iface lo:0 inet6 static
 +
      address fc00::10:10:10:10
 +
      netmask 128
 +
 +
# The primary network interface
 +
auto ens160
 +
iface ens160 inet static
 +
        address 192.0.2.2/30
 +
        gateway 192.0.2.1
 +
 +
iface ens160 inet6 static
 +
        address 2001:db8::192:0:2:2
 +
        netmask 64
 +
        gateway 2001:db8::192:0:2:1
 +
 
</pre>
 
</pre>
 
[[Categoria:Infraestrutura]]
 
[[Categoria:Infraestrutura]]
 
__FORCARTDC__
 
__FORCARTDC__

Edição das 23h28min de 29 de junho de 2021

Descrição

Um dos recursos extremamente importante para o acesso à Internet é o DNS (Domain Name System) e sem ele teríamos que decorar milhares de endereços IP para acessar sites e serviços na Internet. Basicamente temos 2 tipos de DNS, o recursivo e o autoritativo. O recursivo é um serviço que utilizamos para fazer consultas aos DNS(es) Autoritativos que são aqueles responsáveis pelas tabelas que associam o host name a um IP e no caso de resolução reversa, o IP ao host name. O exemplo mais comum de DNS reverso é o do Google, os IPs 8.8.8.8, 8.8.4.4, 2001:4860:4860::8888 e 2001:4860:4860::8844. Se você está estranhando os 2 últimos endereços, é porque provavelmente ainda não ouviu falar de IPv6 e isso não é bom. Procure estudar sobre isso e um bom lugar para começar é aqui. O serviço de DNS deve ser levado muito a sério pelas empresas que o implementam, porque a sua falha pode literalmente parar a Internet para milhares de pessoas que confiam nele ou até pior, um DNS mal intencionado ou comprometido, pode ser usado para direcionar usuários a acessarem sites falsos. Esse artifício visa coletar as credenciais dos usuários e assim poderem aplicar golpes e outras formas danosas e prejudiciais à vítima. Ter um DNS recursivo é muito bom para o ISP, mas cuidar dele, mantê-lo atualizado e protegido, é mais importante ainda.

Nesse artigo mostrarei a configuração de um DNS recursivo anycast, diferente dos DNS recursivos unicast comumente encontrados pelos ISPs a fora. No modelo Unicast, normalmente se tem um ou mais servidores de DNS que são consultados e estão fisicamente em um local. O problema é que essa abordagem não poderia ter por exemplo, 5 servidores, e utilizar todos configurados ao mesmo tempo nos sistemas, porque muitos sistemas só aceitam até 3 servidores recursivos em suas configurações e mais que isso são ignorados. Você poderia então utilizar apenas 2 servidores, isso resolveria o problema mas eles precisariam estar em um determinado local. Mas e se lá na frente você resolver abrir seu negócio em uma outra cidade e em outro estado? Nesse caso poderia continuar usando os mesmos servidores mas aumentando um pouco a latência. Mas se acontecesse algo na interconexão desses servidores? Com o uso do DNS Anycast você poderia ter um servidor DNS recursivo em cada cidade e respondendo pelo mesmo IP. Em caso de problemas com qualquer servidor, o outro passaria a responder para todos os seus assinantes. Seria muito bom ter um cara como o "8.8.8.8" do Google, não é mesmo? Além desse recurso, usaremos o Hyperlocal que é uma técnica que faz uma cópia das tabelas dos DNS Root Servers e mantém localmente no seu servidor recursivo. Isso deixa rápida toda resposta que seria endereçada primeiramente aos DNS(es) Raiz da Internet, principalmente consultas de domínios inválidos ou digitados erradamente.

Diagrama

Para que possamos visualizar nossa configuração, abaixo temos um diagrama hipotético dos nossos servidores e da rede em si:

Diagrama DNS Anycast2.png

Explicando o cenário: cada servidor DNS fechará uma sessão iBGP com o seu router através dos endereços /30 IPv4 e /64 IPv6 (usando IPs de documentação RFC3849 e RFC5737 representando seus IPs públicos). Nessa sessão BGP serão anunciados os IPs privados RFC1918 e RFC4193 configurados nas loopbacks que serão: 10.10.10.10 e fc00::10:10:10:10. Divulgando esses IPs privados para os assinantes, você esconde o real IP público dos servidores, evitando que alguém de fora envie ataques para seus servidores DNS.

Servidores utilizados

  • VM com 4 cores (Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz).
  • 4Gb memória.
  • 20Gb disco.

Softwares utilizados

Para instalação e configuração dos Servidores DNS Recursivos utilizaremos Software Livre, o que nos permite uma economia em licenças de sistemas fechados e proprietários. Abaixo a descrição deles:

  • Debian Linux Buster (10.x).
  • FRRouting 7.5.1.
  • Unbound 1.9.0 (pacote da distribuição Debian). Obs.: essa versão do Unbound já possui suporte ao Hyperlocal nativo.
  • IRQBalance (pacote do Debian).
  • Shell script em bash, para checar se o DNS está OK e se não tiver retirar ele do anúncio.

Gráfico de utilização desse sistema em produção

Dns Anycast Grafico.png

Instalação e configuração do Servidor 1

Instale um sistema Debian 10 com o mínimo necessário, uma versão que costumo utilizar bastante é a que vem com firmwares e pode ser encontrado aqui. Atualmente está na versão 10.10, mas caso lancem uma versão mais recente, basta alterar o link. Não cobriremos a instalação do Debian, pois existem diversos vídeos no Youtube ensinando como proceder. Após a instalação faremos os ajustes na configuração para que possa então acomodar nosso serviço de DNS.

Instalação dos pacotes

FRR

Vamos configurar o repositório oficial do FRR e instalar os pacotes:

# echo "deb https://deb.frrouting.org/frr buster frr-stable" > /etc/apt/sources.list.d/frr.list
# curl -s https://deb.frrouting.org/frr/keys.asc | sudo apt-key add -
# apt update
# apt install frr frr-doc frr-pythontools

Unbound

# apt install unbound

IRQBalance

# apt install irqbalance
# systemctl enable irqbalance

Configurando a rede

/etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto lo:0
iface lo:0 inet static
      address 10.10.10.10/32

iface lo:0 inet6 static
      address fc00::10:10:10:10
      netmask 128

# The primary network interface
auto ens160
iface ens160 inet static
        address 192.0.2.2/30
        gateway 192.0.2.1

iface ens160 inet6 static
        address 2001:db8::192:0:2:2
        netmask 64
        gateway 2001:db8::192:0:2:1