
Toolset per misurazione DNS, risoluzione dei problemi e audit di sicurezza
Ti sei mai chiesto se il tuo ISP sta intercettando il tuo traffico DNS? Hai notato comportamenti insoliti nelle tue risposte DNS, o sei stato reindirizzato a un indirizzo sbagliato e hai sospettato che qualcosa non andasse con il tuo DNS? Offriamo una suite di strumenti per eseguire audit di base sulle tue richieste e risposte DNS, aiutandoti a garantire che il tuo DNS funzioni come previsto.
Con dnsping, puoi misurare il tempo di risposta di qualsiasi server DNS per query
arbitrarie. Simile alla normale utility ping, dnsping offre funzionalità
comparabili per le richieste DNS, aiutandoti a monitorare la reattività del server.
Puoi anche tracciare il percorso della tua richiesta DNS fino alla sua destinazione usando
dnstraceroute, verificando che non venga reindirizzata o intercettata. Confrontando le query DNS inviate allo stesso server, dnstraceroute ti permette di
osservare eventuali differenze nei percorsi seguiti, avvisandoti di possibili problemi.
dnseval valuta più resolver DNS per aiutarti a scegliere il miglior resolver DNS
per la tua rete. Sebbene sia consigliato utilizzare il tuo resolver DNS per evitare
di dipendere da resolver DNS di terze parti, dnseval può assisterti nella selezione del
resolver DNS ottimale quando necessario. Ti consente di confrontare i server DNS in base
alle prestazioni (latenza) e all'affidabilità (perdita di pacchetti), offrendoti una visione completa per un processo decisionale informato.
Ci sono diversi modi per utilizzare questo set di strumenti, anche se consigliamo di eseguirlo direttamente dal codice sorgente per la massima flessibilità e controllo. L'esecuzione dal sorgente o l'installazione con pip richiede Python 3.11 o versioni successive.
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
pip3 install dnsdiag
uv è un gestore di pacchetti Python veloce che può eseguire strumenti direttamente senza installazione:
# Esegui dnsping direttamente senza installazione
uvx --from dnsdiag dnsping google.com
# Esegui con opzioni specifiche
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Esegui dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Esegui dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
Per installare dnsdiag in modo permanente:
# Installa gli strumenti dnsdiag
uv tool install dnsdiag
# Aggiorna all'ultima versione
uv tool upgrade dnsdiag
Di tanto in tanto, vengono rilasciati pacchetti binari per Windows, Mac OS X e Linux. Puoi scaricare l'ultima release dalla pagina delle release.
I binari precompilati sono disponibili per:
Windows ARM64 non è attualmente supportato a causa di dipendenze di build che richiedono toolchain di compilazione native non prontamente disponibili. Se utilizzi Windows su ARM, puoi eseguire dnsdiag usando Windows Subsystem for Linux (WSL2) o installarlo direttamente dal sorgente.
Se preferisci non installare dnsdiag sulla tua macchina locale, puoi usare
l'immagine Docker per eseguire gli strumenti in un ambiente containerizzato. Ad esempio:
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
dnsping ti permette di fare "ping" a un resolver DNS inviando una query DNS arbitraria più volte. Per un elenco completo delle opzioni da riga di comando supportate, usa --help. Ecco alcune opzioni chiave:
--tcp, --tls, --doh, --quic o --http3 per selezionare il protocollo di trasporto (il predefinito è UDP). Queste opzioni sono mutuamente esclusive; è possibile specificare un solo protocollo per comando.--flags per visualizzare i flag di risposta, inclusi i flag EDNS, per ogni risposta.--dnssec per richiedere la validazione DNSSEC, se disponibile.--nsid per visualizzare il Name Server Identifier (NSID) se disponibile (RFC 5001).--ecs per includere le informazioni EDNS Client Subnet per l'ottimizzazione del routing geografico.--cookie per visualizzare i DNS cookie (RFC 7873) quando presenti nelle risposte../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
dnsping fornisce anche statistiche come i tempi di risposta minimo, massimo e medio,
insieme al jitter (deviazione standard) e alla perdita di pacchetti.
Ecco alcuni casi d'uso interessanti per 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