
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 adresse erronée en soupçonnant 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 ainsi à 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 le chemin de votre requête DNS jusqu'à sa destination en utilisant dnstraceroute, vérifiant ainsi 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 les différences dans les chemins empruntés, vous alertant ainsi d'éventuels problèmes.
dnseval évalue plusieurs résolveurs DNS pour vous aider à choisir le meilleur résolveur DNS pour votre réseau. Bien qu'il soit recommandé d'utiliser votre propre résolveur DNS pour éviter de dépendre de résolveurs tiers, dnseval peut vous aider à sélectionner le résolveur DNS optimal si nécessaire. Il vous permet de comparer les serveurs DNS en fonction des performances (latence) et de la fiabilité (perte de paquets), vous offrant une vue d'ensemble 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 à partir du code source pour une flexibilité et un contrôle optimaux.
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 permet d'exécuter des outils directement sans installation :
# Exécutez dnsping directement sans installation
uvx --from dnsdiag dnsping google.com
# Exécutez avec des options spécifiques
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Exécutez dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Exécutez dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
Pour installer dnsdiag de manière permanente :
# Installez les outils dnsdiag
uv tool install dnsdiag
# Mettez à niveau vers la dernière version
uv tool upgrade dnsdiag
De temps en temps, des paquets binaires seront publiés pour Windows, Mac OS X et Linux. Vous pouvez récupérer la dernière version sur la page des versions.
Les binaires pré-construits sont disponibles pour :
Windows ARM64 n'est actuellement pas pris en charge en raison de dépendances de construction 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 en utilisant le sous-système Windows pour Linux (WSL2) ou l'installer directement à partir des 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 « pinguer » 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 s'excluent mutuellement ; 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 de sous-réseau client EDNS 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
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]