
Ensemble d'outils de mesure DNS, de dépannage et d'audit de sécurité
Vous êtes-vous déjà demandé si votre FAI interceptait votre trafic DNS ? Avez-vous remarqué un comportement inhabituel dans vos réponses DNS, ou avez-vous été redirigé vers une mauvaise adresse et soupçonné un problème avec votre DNS ? Nous proposons une suite d'outils pour effectuer des audits de base sur vos requêtes et réponses DNS, vous aidant à garantir que votre DNS fonctionne comme prévu.
Avec dnsping, vous pouvez mesurer le temps de réponse de n'importe quel serveur DNS pour des requêtes
arbitraires. Semblable à l'utilitaire ping classique, dnsping offre des fonctionnalités
comparables pour les requêtes DNS, vous aidant à surveiller la réactivité du serveur.
Vous pouvez également tracer la route de votre requête DNS jusqu'à sa destination à l'aide de
dnstraceroute, en vérifiant qu'elle n'est pas redirigée ou interceptée. En comparant les requêtes DNS envoyées au même serveur, dnstraceroute vous permet d'observer
toute différence dans les chemins empruntés, vous alertant d'éventuels problèmes.
dnseval évalue plusieurs résolveurs DNS pour vous aider à choisir le meilleur résolveur DNS
pour votre réseau. Bien que l'utilisation de votre propre résolveur DNS soit recommandée pour éviter
de dépendre de résolveurs DNS tiers, dnseval peut vous aider à sélectionner le
résolveur DNS optimal lorsque cela est nécessaire. Il vous permet de comparer les serveurs DNS en fonction de leurs performances (latence) et de leur fiabilité (perte de paquets), vous offrant une vue complète pour une prise de décision éclairée.
Il existe plusieurs façons d'utiliser cet ensemble d'outils, bien que nous recommandions de l'exécuter directement depuis le code source pour une flexibilité et un contrôle optimaux. L'exécution depuis les sources ou l'installation avec pip nécessite Python 3.11 ou une version plus récente.
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
pip3 install dnsdiag
uv est un gestionnaire de paquets Python rapide qui peut exécuter des outils directement sans installation :
# Exécuter dnsping directement sans installation
uvx --from dnsdiag dnsping google.com
# Exécuter avec des options spécifiques
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Exécuter dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Exécuter dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
Pour installer dnsdiag de manière persistante :
# Installer les outils dnsdiag
uv tool install dnsdiag
# Mettre à niveau vers la dernière version
uv tool upgrade dnsdiag
De temps à autre, des paquets binaires sont publiés pour Windows, Mac OS X et Linux. Vous pouvez récupérer la dernière version depuis la page des releases.
Des binaires précompilés sont disponibles pour :
Windows ARM64 n'est actuellement pas pris en charge en raison de dépendances de compilation nécessitant des chaînes d'outils de compilation natives qui ne sont pas facilement disponibles. Si vous utilisez Windows sur ARM, vous pouvez exécuter dnsdiag via le sous-système Windows pour Linux (WSL2) ou l'installer directement depuis les sources.
Si vous préférez ne pas installer dnsdiag sur votre machine locale, vous pouvez utiliser
l'image Docker pour exécuter les outils dans un environnement conteneurisé. Par exemple :
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
dnsping vous permet de « pinger » un résolveur DNS en envoyant une requête DNS arbitraire plusieurs fois. Pour une liste complète des options de ligne de commande prises en charge, utilisez --help. Voici quelques options clés :
--tcp, --tls, --doh, --quic ou --http3 pour sélectionner le protocole de transport (par défaut UDP). Ces options sont mutuellement exclusives ; un seul protocole peut être spécifié par commande.--flags pour afficher les indicateurs de réponse, y compris les indicateurs EDNS, pour chaque réponse.--dnssec pour demander la validation DNSSEC, si disponible.--nsid pour afficher l'identifiant du serveur de noms (NSID) s'il est disponible (RFC 5001).--ecs pour inclure les informations EDNS Client Subnet pour l'optimisation du routage géographique.--cookie pour afficher les cookies DNS (RFC 7873) lorsqu'ils sont présents dans les réponses../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 fournit également des statistiques telles que les temps de réponse
minimum, maximum et moyen, ainsi que la gigue (écart-type) et la perte de paquets.
Voici quelques cas d'utilisation intéressants pour dnsping :
--dnssec../dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com