Benchmark de Servidores DNS Recursivos

By | August 3, 2008

A recente vulnerabilidade no protocolo DNS causou uma grande quantidade de estudos sobre o assunto recentemente. No meu trabalho não foi diferente e de certo modo ainda pior.

Depois de analisar com cuidado o atual cenário do DNS por lá e trabalhar alguns dias para aplicar todas as correções, cheguei à conclusão que arrumar a atual configuração seria apenas empurrar com a barriga um problema maior e por isso minha idéia foi implantar um novo par de DNS recursivos para substituir o atual.

O número de usuários locais não é muito grande – cerca de 5000 – mas pelo que fui informado são todos heavy-users e já houve vezes em que o servidor DNS abriu o bico.

O desafio então foi encontrar uma solução que conseguisse atender bem os usuários sem exigir muito hardware, já que serão necessários dois novos servidores para o serviço.

Os candidatos

Depois de uma olhada aqui, adotei os seguintes critérios: Deveria ser Open Source, com possibilidade de rodar no Linux ou no Solaris e eu já deveria, pelo menos, ter ouvido falar.

Os 4 escolhidos foram:

O Teste

Para executar o teste adotei a seguinte estratégia (do grego, estrategie):

  1. Criar uma lista com 1000 FQDNs
  2. Resolver contra o servidor cada um destes FQDNs sequencialmente (serial) pela primeira vez (sem cache)
  3. Resolver contra o servidor cada um destes FQDNs sequencialmente (serial) pela segunda vez (com cache)
  4. Resolver contra o servidor cada um destes FQDNs ao mesmo tempo (paralelo) uma vez (com cache criado pelas interações anteriores)

As Ferramentas

comentei aqui antes que sou um péssimo programador, então é provável que você olhe para os scripts que criei para estes testes e ache uma piada. Criticas construtivas são bem-vindas. Do contrário, vai encher o saco da mãe.

Para gerar a lista de domínios fui na unha fazendo o seguinte:

$ lynx --dump http://www.exemplo.com.br |grep "^ [0-9].*\. "|cut -d "/" -f3 >> /tmp/temp-domain

Fiz isso em muitas URLs (principalmente blogs e entradas da Wikipedia) até que o output do comando abaixo fosse próximo de 1000:

$ sort -u /tmp/temp-domains |wc -l

A lista final de FQDNs está neste arquivo aqui.

Em seguida, utilizei este script para o primeiro e segundo teste – resolução serial. Como podem observar, preservei o resultado tanto do STDOUT como STDERR para referência futura.

Para o teste em paralelo, ao invés de bash tive que apelar para Python e o script utilizado foi este outro.

O servidor

Como podem imaginar, uma universidade não tem 96 blade servers top de linha parados num data-center para eu poder brincar, como era no antigo emprego, então tive que me virar com alguma coisa muito mais simples:

Caixa:

  • Pentium 4 3.2GHz
  • 3GB RAM
  • 144GB RAID5 SATA
  • VMWare ESXi 3.5

Instância VMware:

  • Pentium 4 3.2GHz
  • 512MB RAM
  • 8GB HD
  • Ubuntu Server 8.04

** É importante ressaltar que apesar de ser uma instância VMWare, a caixa que roda o host é nova e não tem mais nada instalado, de forma que a performance do host não influenciou o desempenho do guest. **

Todos os 4 DNS foram testados com a configuração mais simples possível, instalando à partir do repositório oficial do Ubuntu, sem nenhum tweak adicional, exceto pelo djbDNS que, por causa da licença, precisa ser compilado do fonte. Para isso utilizei este tutorial aqui.

O Resultado

O resultado não foi o que eu esperava. Sinceramente tinha quase que certeza que a disputa ia ser cabeça à cabeça entre o djbDNS e o MaraDNS, mas os resultados reais estão abaixo:

SERIAL
Sem Cache Com Cache
Tempo de execução Erros Tempo de execução Erros
MaraDNS 00:09:55 2 00:09:10 2
PowerDNS 00:07:49 0 00:01:07 0
TinyDNS 00:09:47 6 00:02:11 6
Bind 00:07:08 0 00:01:54 3

PARALELO
With Cache
Execution Time Errors Pico de uso da CPU
MaraDNS 00:00:27 29 10.00%
PowerDNS 00:00:11 1 2.00%
TinyDNS 00:00:22 6 11.00%
Bind 00:00:13 5 30.00%

  • Erros são connection time outs que recebi do servidor.
  • Picos de CPU não foram significativos no teste serial

Eu não esperava que o resultado fosse mostrar o PowerDNS como a melhor ferramenta, mas foi isso que os testes mostraram. Depois de ver isso pesquisei um pouco e descobri que grandes instalações, como register.com, tucows.com e mediawiki utilizam este sistema.

Já mandei o resultado da pesquisa para o resto da equipe e espero implementar o PowerDNS em breve.

2 thoughts on “Benchmark de Servidores DNS Recursivos

  1. Phillip Fernandes

    A única experiência que tive com servidores dns foi na faculdade, usando o Bind. Ou seja: extremamente superficial e chata.

    Não tenho problemas com os DNS’s que a telemar disponibiliza para o Velox (serviço ADSL) aqui de Juiz de Fora, mas vou tentar implementar um servidor DNS próprio em casa usando o PowerDNS.

    Depois eu comento o resultado aqui.

    Valeu!

Comments are closed.