
Conjunto de ferramentas de medição, solução de problemas e auditoria de segurança de DNS
Você já se perguntou se o seu provedor de internet está interceptando o seu tráfego DNS? Você notou algum comportamento incomum nas suas respostas DNS, ou foi redirecionado para o endereço errado e suspeitou que algo poderia estar errado com o seu DNS? Oferecemos um conjunto de ferramentas para realizar auditorias básicas nas suas requisições e respostas DNS, ajudando você a garantir que o seu DNS está funcionando conforme o esperado.
Com o dnsping, você pode medir o tempo de resposta de qualquer servidor DNS para consultas
arbitrárias. Semelhante ao utilitário ping comum, o dnsping oferece funcionalidade
comparável para requisições DNS, ajudando você a monitorar a capacidade de resposta do servidor.
Você também pode rastrear a rota da sua requisição DNS até o seu destino usando o
dnstraceroute, verificando se ela não está sendo redirecionada ou interceptada. Ao
comparar consultas DNS enviadas para o mesmo servidor, o dnstraceroute permite que você
observe quaisquer diferenças nos caminhos percorridos, alertando você sobre possíveis problemas.
O dnseval avalia múltiplos resolvedores DNS para ajudar você a escolher o melhor resolvedor DNS
para a sua rede. Embora seja recomendado usar o seu próprio resolvedor DNS para evitar
dependência de resolvedores DNS de terceiros, o dnseval pode auxiliar na seleção do
resolvedor DNS ideal quando necessário. Ele permite comparar servidores DNS com base em
desempenho (latência) e confiabilidade (perda de pacotes), oferecendo uma visão abrangente
para uma tomada de decisão informada.
Existem várias maneiras de usar este conjunto de ferramentas, embora recomendemos executá-lo diretamente a partir do código-fonte para maior flexibilidade e controle. Executar a partir do código-fonte ou instalar com pip requer Python 3.11 ou mais recente.
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
pip3 install dnsdiag
uv é um gerenciador de pacotes Python rápido que pode executar ferramentas diretamente sem instalação:
# Run dnsping directly without installation
uvx --from dnsdiag dnsping google.com
# Run with specific options
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Run dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Run dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
Para instalar o dnsdiag de forma persistente:
# Install dnsdiag tools
uv tool install dnsdiag
# Upgrade to the latest version
uv tool upgrade dnsdiag
De tempos em tempos, pacotes binários serão lançados para Windows, Mac OS X e Linux. Você pode obter o lançamento mais recente na página de releases.
Binários pré-compilados estão disponíveis para:
O Windows ARM64 não é suportado atualmente devido a dependências de build que exigem toolchains de compilação nativa que não estão prontamente disponíveis. Se você estiver usando Windows em ARM, pode executar o dnsdiag usando o Subsistema Windows para Linux (WSL2) ou instalar diretamente a partir do código-fonte.
Se você preferir não instalar o dnsdiag na sua máquina local, pode usar a
imagem Docker para executar as ferramentas em um ambiente conteinerizado. Por exemplo:
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
O dnsping permite que você faça "ping" em um resolvedor DNS enviando uma consulta DNS arbitrária várias vezes. Para uma lista completa das opções de linha de comando suportadas, use --help. Aqui estão algumas flags importantes:
--tcp, --tls, --doh, --quic ou --http3 para selecionar o protocolo de transporte (o padrão é UDP). Essas opções são mutuamente exclusivas; apenas um protocolo pode ser especificado por comando.--flags para exibir as flags de resposta, incluindo flags EDNS, para cada resposta.--dnssec para solicitar validação DNSSEC, se disponível.--nsid para exibir o Identificador do Servidor de Nomes (NSID), se disponível (RFC 5001).--ecs para incluir informações de EDNS Client Subnet para otimização de roteamento geográfico.--cookie para exibir cookies DNS (RFC 7873) quando presentes nas respostas../dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 8.8.8.8 brokendnssec.net
dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75 bytes from 8.8.8.8: seq=1 time=73.703 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=2 time=69.523 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=3 time=58.058 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=4 time=54.235 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=5 time=57.806 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=54.235 ms, avg=22.665 ms, max=69.523 ms, stddev=38.202 ms
O dnsping também fornece estatísticas como tempos de resposta mínimo, máximo e médio,
juntamente com jitter (desvio padrão) e perda de pacotes.
Aqui estão alguns casos de uso interessantes para o dnsping:
--dnssec../dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com
dnsping.py DNS: 94.140.14.14:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
66 bytes from 94.140.14.14: seq=1 time=31.407 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=2 time=29.156 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=3 time=30.892 ms NOERROR [ECS:203.0.113.0/24/24]
--- 94.140.14.14 dnsping statistics ---
3 requests transmitted, 3 responses received, 0% lost
min=29.156 ms, avg=30.485 ms, max=31.407 ms, stddev=1.176 ms