
Conjunto de ferramentas de medição, solução de problemas e auditoria de segurança de DNS
Você já se perguntou se seu ISP está interceptando seu tráfego DNS? Notou algum comportamento incomum nas respostas DNS, ou foi redirecionado para o endereço errado e suspeitou que algo estivesse errado com seu DNS? Oferecemos um conjunto de ferramentas para realizar auditorias básicas em suas consultas e respostas DNS, ajudando você a garantir que seu DNS esteja funcionando conforme o esperado.
Com o dnsping, você pode medir o tempo de resposta de qualquer servidor DNS para consultas arbitrárias. Similar ao utilitário ping tradicional, o dnsping oferece funcionalidade comparável para requisições DNS, ajudando a monitorar a capacidade de resposta do servidor.
Você também pode rastrear a rota da sua requisição DNS até seu destino usando o dnstraceroute, verificando se ela não está sendo redirecionada ou interceptada. Ao comparar consultas DNS enviadas ao mesmo servidor, o dnstraceroute permite observar quaisquer diferenças nos caminhos percorridos, alertando-o sobre possíveis problemas.
O dnseval avalia múltiplos resolvedores DNS para ajudá-lo a escolher o melhor resolvedor DNS para sua rede. Embora seja recomendado usar seu próprio resolvedor DNS para evitar dependência de resolvedores 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), fornecendo uma visão abrangente para tomada de decisões informadas.
Existem várias formas de usar este conjunto de ferramentas, embora recomendamos executá-lo diretamente a partir do código fonte para maior flexibilidade e controle.
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:
# Executar dnsping diretamente sem instalação
uvx --from dnsdiag dnsping google.com
# Executar com opções específicas
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Executar dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Executar dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
Para instalar o dnsdiag permanentemente:
# Instalar ferramentas dnsdiag
uv tool install dnsdiag
# Atualizar para a versão mais recente
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 a versão mais recente na página de releases.
Binários pré-compilados estão disponíveis para:
Windows ARM64 não é suportado atualmente devido a dependências de compilação que exigem toolchains de compilação nativos nã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 preferir não instalar o dnsdiag em sua máquina local, você pode usar a imagem Docker para executar as ferramentas em um ambiente containerizado. Por exemplo:
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
O dnsping permite que você "pingue" um resolvedor DNS enviando uma consulta DNS arbitrária várias vezes. Para uma lista completa de opções de linha de comando suportadas, use --help. Aqui estão algumas flags principais:
--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 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 Sub-rede do Cliente EDNS 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 mínimo, máximo e médio de resposta, 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
./dnsping.py -c 2 --nsid -s 8.8.8.8 google.com