
Temos o bind 9.8.1.dfsg.P1-4ubuntu0.13 no Ubuntu 12.04, que está rodando em um servidor não muito carregado (média de carga: 0,19, 0,12, 0,13) e atendendo solicitações para redes de pequenos escritórios com estações de trabalho Macos e Ubuntu.
Executei alguns testes de DNS no script no contêiner que está sendo executado como servidor DNS e enviei os resultados para o influxdb.
#!/bin/bash
while true
do
rndc flush
bind_timeout=$( dig @192.168.128.3 redhat.com | grep 'Query time' | awk '{ print $4 }' )
google_timeout=$( dig @8.8.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
yandex_timeout=$( dig @77.88.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "bind,server=bind,without_cache=yes value=$bind_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "google,server=google,without_cache=yes value=$google_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "yandex,server=yandex,without_cache=yes value=$yandex_timeout" &
wait
bind_timeout=$( dig @192.168.128.3 redhat.com | grep 'Query time' | awk '{ print $4 }' )
google_timeout=$( dig @8.8.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
yandex_timeout=$( dig @77.88.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "bind,server=bind,without_cache=no value=$bind_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "google,server=google,without_cache=no value=$google_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "yandex,server=yandex,without_cache=no value=$yandex_timeout" &
wait
sleep 5
done
Descobri que o bind responde às solicitações mais lentamente do que8.8.8.8e77.88.8.8. Isso pode ser visto nos gráficos:
Liberando o cache antes da primeira série de solicitações com rndc flush
. Vincular usa o Google8.8.8.8e8.8.4.4como encaminhadores:
Nunca limpe o cache do bind em execução. Vincular usa o Google8.8.8.8e8.8.4.4como encaminhadores:
Liberando o cache antes da primeira série de solicitações com rndc flush
. O Bind usa uma lista atualizada de servidores raiz como encaminhadores:
Nunca limpe o cache do bind em execução. O Bind usa uma lista atualizada de servidores raiz como encaminhadores:
Por que o tempo máximo de consulta (cerca de 5k no primeiro gráfico e 2,5k no terceiro gráfico) com o DNS público do Google é maior que os servidores raiz?
Por que a consulta através do bind é mais lenta do que a consulta direta de servidores DNS públicos?
Pode haver algo errado em meus testes?
ATUALIZAÇÃO 1
Há 20 segundos de TTL nos gráficos - está errado. TTL para redhat.com é de 60 segundos.
Responder1
Seus testes medem o tempo total para realizar sua consulta, incluindo
- atraso de rede de e para a máquina que executa seu script de teste
- tempo de processamento no servidor de nomes em teste
- tempo que o servidor de nomes em teste gasta aguardando respostas de outros servidores de nomes, ou seja. tempo para realizar quaisquer subconsultas recursivas
Os resultados são praticamente os esperados.
- Se você consultar seu servidor BIND local sem liberar o cache, a resposta virá do cache na maioria das vezes. Mesmo que o TTL do A RR tenha expirado, o NS RR ainda estará no cache, portanto apenas o próprio A RR deverá ser solicitado externamente.
- Se você consultar seu servidor BIND local após limpar o cache e tivernãoencaminhadores configurados, seu servidor BIND local executará uma consulta recursiva começando de um servidor raiz para baixo.
- Se você consultar seu servidor BIND local após limpar o cache e tiver configurado os servidores do Google como encaminhadores, seu servidor BIND local encaminhará a consulta como está para um dos servidores do Google que, por sua vez, responderá à consulta de seu cache ou realizar uma consulta recursiva. Observe que você não tem controle sobre o cache dos servidores do Google.
Conseqüentemente, as consultas ao servidor BIND local sem primeiro limpar o cache são mais rápidas e não são influenciadas pela configuração do encaminhador. As consultas ao servidor BIND local após a limpeza do cache e com os servidores do Google configurados como encaminhadores são mais lentas do que as consultas diretas aos servidores do Google porque adicionam a estes últimos a sobrecarga de passar primeiro pelo servidor BIND local.