PoC - Quebra do TCP em DNS Anycast Balanceado
Introdução
Na palestra do meu amigo Elizandro Pacheco, que ocorreu na 12ª Semana de Infraestrutura da Internet no Brasil em 25 de outubro de 2022, foi questionado por um participante se em um ambiente onde tivéssemos 2 servidores de DNS Recursivo Anycast sendo consultados e respondendo queries de forma balanceada, poderia ocorrer uma quebra nas consultas de DNS (53/TCP), já que imaginamos que um cliente no estabelecimento de uma sessão TCP (Three-way Handshake), poderia ocorrer de um pacote SYN ir para o servidor de DNS Recursivo A, retornando um SYN+ACK como resposta para o cliente e este acabar enviando o ACK para o servidor de DNS Recursivo B, o que quebraria a conexão forçando uma retransmissão. O mesmo resultado também poderia ocorrer após a sessão TCP estabelecida. Esse comportamento seria esperado porque no ambiente Anycast as consultas de DNS são para o mesmo IP sendo utilizado por mais de um servidor.
Vamos nos atentar ao seguinte: consultas de DNS usando o protocolo TCP são percebidas em transferências de zonas entre o DNS Autoritativo Primário e o DNS Autoritativo Secundário e consultas cuja resposta tenha um tamanho grande, maior que 512 bytes mas que isso nem sempre é uma regra, por exemplo, consultas envolvendo DNSSEC possuem respostas maiores que 512 bytes e são realizadas em UDP. Com isso podemos dizer que consultas recursivas de DNS usando o protocolo TCP são ínfimas e não tenho relatos de problemas de acesso com esse cenário. Vamos observar a tela abaixo:
Reparem no monitoramento acima que no item 2 temos no horário de pico 16948 qps (queries per second) sendo que consultas TCP apenas 116 qps.
Diagrama do LAB para o nosso PoC (Proof of Concept)
Além das informações já passadas resolvi montar um LAB em um ambiente real, para vermos o comportamento das consultas quando temos esse cenário com 2 servidores DNS Recursivos Anycast servindo uma rede de clientes. Primeiro vou apresentar o diagrama abaixo para que possamos visualizar os testes que serão feitos. Esses servidores foram montados utilizando esse artigo.