
dnsglobe v0.5.0
Vérificateur global de propagation DNS en TUI — observez la propagation d'un enregistrement DNS sur 34 résolveurs publics dans le monde, sur une carte du monde dans votre terminal
dnsglobe
Un vérificateur global de propagation DNS pour votre terminal — une TUI Rust qui interroge 34 résolveurs DNS publics dans le monde en parallèle, compare leurs réponses et affiche la propagation de votre enregistrement sur une carte du monde.

Pensez à dnschecker.org / whatsmydns.net, mais dans votre terminal, avec le mode watch : lancez une vérification et il re-interroge jusqu'à ce que l'enregistrement se soit propagé partout.
Les résolveurs couvrent les réseaux anycast mondiaux (Google, Cloudflare, Quad9), l'Amérique du Nord, l'Europe, la Russie, le Moyen-Orient, l'Asie de l'Est et l'hémisphère sud (Telstra AU, SafeSurfer NZ, UOL BR) — chacun interrogé directement, afin que vous voyiez la vue actuelle propre à chaque serveur de l'enregistrement.
Chaque résolveur est interrogé directement (sans cache, EDNS0, repli TCP pour les
réponses tronquées), donc ce que vous voyez est la vue actuelle propre à chaque serveur de
l'enregistrement. Les réponses partageant un même enregistrement sont regroupées — ainsi, un DNS round-robin
(chaque résolveur mettant en cache un sous-ensemble différent d'un pool d'IP) compte comme une
réponse cohérente, et non vingt réponses contradictoires. La jauge de propagation indique
combien de résolveurs sont dans le groupe majoritaire ; les valeurs aberrantes sont signalées
≠ DIFFERS une fois tous les résultats reçus.
Le tableau tient dans un terminal de 80 colonnes : l'adresse IPv4 complète de chaque résolveur,
le temps de réponse, la TTL et le compte à rebours d'expiration restent intacts, et le
verdict de chaque ligne se réduit au glyphe dans la marge gauche (✓ ≠ ! ↻ ∅ ✗) pour que la réponse
garde la place. Le compte à rebours est volontairement approximatif — 45s, 4m, 2h, 1d
— car une colonne de secondes défilant en désordre est du bruit au-delà d'une minute.
Lorsque le terminal est assez large, une vue du monde apparaît à droite
avec un point par résolveur, coloré selon son état (vert = accord, magenta = différence,
rouge = erreur, jaune = en cours). La vue s'adapte à la largeur : les terminaux ≥157
colonnes obtiennent une carte du monde plate, les plus étroits (≥131 colonnes) un globe 3D
en rotation, qui nécessite moins de colonnes ; redimensionner au-delà du seuil transforme l'un
en l'autre. Ctrl+O permet de basculer manuellement entre carte et globe, et --view auto|map|globe
(ou view = "..." dans le fichier de configuration) impose un style directement.
Chaque résolveur est interrogé pour savoir quel site vous répond, via NSID
(RFC 5001) — une option EDNS que le nœud qui répond remplit avec son propre nom
(gpdns-yul, yul01, res721.qyul1, jfk-dns1-02.inet.centurylink.net).
Cela ne nécessite aucun support par opérateur, donc les résolveurs que vous ajoutez vous-même peuvent indiquer un
site. Lorsque NSID ne nomme aucun lieu, les requêtes d'identification spécifiques à l'opérateur
prennent le relais : Quad9 (TXT id.server.on.quad9.net), Cloudflare
(CH TXT id.server), Google (sous-réseau de sortie via
TXT o-o.myaddr.l.google.com mis en correspondance avec TXT locations.publicdns.goog),
OpenDNS (TXT debug.opendns.com), CleanBrowsing et Neustar UltraDNS. Le
site découvert s'affiche dans la colonne Loc sous forme de codes de style →YUL, et le
point du résolveur sur la carte se déplace vers le POP qui sert réellement vos requêtes.
Usage
Installation :
brew install 514-labs/tap/dnsglobe # Homebrew (macOS/Linux)
cargo install dnsglobe # from crates.io
yay -S dnsglobe # from archlinux aur (compile from source)
yay -S dnsglobe-bin # from archlinux aur (install prebuilt binary)
nix run github:514-labs/dnsglobe # Nix flakes (builds from source)
# or grab a prebuilt binary from the GitHub Releases page
Exécution :
dnsglobe # start empty, type a domain
dnsglobe example.com # query immediately and watch
dnsglobe example.com TXT # same, starting on TXT records
dnsglobe --once example.com TXT # no TUI: print results, exit (for scripts)
dnsglobe example.com --ecs 203.0.113.0/24 # see the zone as that client network does
dnsglobe --once example.com --ecs 203.0.113.0/24,198.51.100.0/24
# one table per subnet + a convergence summary
EDNS Client Subnet (ECS)
--ecs (ou ecs = [...] dans le fichier de configuration) ajoute une option EDNS Client Subnet
(RFC 7871) à chaque
requête, afin que les zones GeoDNS répondent pour ce réseau client au lieu du
point de vue du résolveur lui-même. Les sous-réseaux sont des CIDR ou des IP nues ; la plupart des résolveurs
publics utilisent au plus /24 (IPv4) ou /56 (IPv6). Avec plusieurs sous-réseaux
configurés, Ctrl+N fait défiler le sous-réseau actif (plus une position off) et
relance la requête immédiatement ; --once exécute chaque sous-réseau et se termine par un
récapitulatif de convergence par sous-réseau. Les résolveurs qui ignorent délibérément ECS
(Cloudflare, Quad9, …) sont marqués NO ECS — leur réponse est affichée à titre de
référence mais exclue du pourcentage de propagation, car elle décrit
leur propre emplacement, et non le réseau sondé.
Keys
| Key | Action |
|---|---|
| type / ⌫ / Del | modifier le domaine |
| ←/→ / Home/End | déplacer le curseur dans le champ du domaine |
| Enter | lancer la vérification et surveiller : re-interroge toutes les 30 s jusqu'à ce que la propagation atteigne 100 % |
| Ctrl+R | arrêter ou reprendre la surveillance |
| Tab / Shift-Tab | sélectionner le type d'enregistrement (A, AAAA, CNAME, MX, NS, TXT, SOA) et relancer la requête |
| ↑/↓ / PgUp/PgDn | déplacer la surbrillance dans le tableau des résolveurs (défilement automatique) |
| + | ajouter un résolveur pour cette session (nom, IP, emplacement et position sur la carte facultatifs) |
| Ctrl+X | supprimer le résolveur en surbrillance pour cette session |
| Ctrl+S | changer le tri du tableau : résolveur / emplacement / ping / statut / réponse |
| Ctrl+O | basculer la vue du monde entre carte plate et globe rotatif |
| Ctrl+N | faire défiler le sous-réseau client ECS et relancer la requête (uniquement si --ecs/la config en définit un) |
| Ctrl+U | effacer le domaine |
| Esc / Ctrl+C | quitter |
Configuration
En option, ajoutez vos propres résolveurs — ou remplacez entièrement la liste intégrée —
avec un fichier de configuration TOML dans ~/.config/dnsglobe/config.toml
($XDG_CONFIG_HOME/dnsglobe/config.toml si défini). Définissez DNSGLOBE_CONFIG pour
utiliser un autre chemin.
# Set to true to replace the built-in list instead of extending it —
# e.g. to watch propagation across your own nameservers only.
replace = false
# EDNS Client Subnet(s) to query with (Ctrl+N cycles; --ecs overrides).
ecs = ["203.0.113.0/24"]
# World-view style: auto (default — pick by terminal width), map, or globe.
# The --view flag overrides this.
view = "auto"
[[resolvers]]
name = "Corp DNS" # required — shown in the Resolver column
ip = "10.0.0.53" # required — IPv4 or IPv6, queried on port 53
location = "HQ" # optional — Loc column / location sort
lat = 40.7 # optional — position on the world map;
lon = -74.0 # omit both to leave it off the map
[[resolvers]]
name = "NS1 (public)"
ip = "198.51.100.53"
# Optionally recolor the UI. Every key is optional; unset roles keep their
# defaults. Colors are ANSI names ("lightcyan"), 256-color indexes ("208"),
# or hex ("#ff8700" — needs truecolor support).
[theme]
accent = "lightcyan" # borders, titles, cursor, anycast sites
agree = "lightgreen" # answers matching the majority; fast latency
differ = "lightmagenta" # answers disagreeing with the majority
error = "white on lightred"
# ERR / SERVFAIL / NONE; slow latency. Written
# "<fg> on <bg>", it becomes a filled badge on the
# status glyph and word — legible on any background;
# a plain color like "lightred" drops the badge
pending = "lightyellow" # queries in flight; middling latency
stale = "208" # caches serving an answer past its own TTL
upstream = "lightblue" # refetched but upstream still has the old data
muted = "faint" # labels, hints, countdowns, quiet borders —
# "faint" dims your terminal's default foreground;
# set a color if your terminal renders faint poorly
coastline = "gray" # map/globe land outline
grid = "244" # globe graticule and limb
Une configuration invalide (mauvaise IP, clé inconnue, couleur non reconnue, sous-réseau ecs invalide,
lat sans lon, replace = true sans résolveurs) est signalée au
démarrage avec l'entrée fautive nommée.
Notes
- Plusieurs résolveurs sont des réseaux anycast, donc le nœud qui répond est celui
le plus proche de vous. Les réseaux qui identifient leur nœud — via NSID ou une
requête d'identification — indiquent le site réel qui répond (
→YUL) ; pour les autres, la colonne d'emplacement correspond à la région d'origine de l'opérateur. - La liste intégrée des résolveurs se trouve dans
src/resolvers.rs; utilisez le fichier de configuration ci-dessus pour l'étendre ou la remplacer sans recompiler. Chaque entrée intégrée a été vérifiée pour répondre aux requêtes externes ; de nombreux résolveurs FAI bien connus (et, notamment, tous les grands résolveurs africains) refusent les requêtes provenant de l'extérieur de leur réseau, ils ne peuvent donc pas être inclus.
Nix
Le projet fournit des sorties de flake Nix optionnelles pour les utilisateurs qui utilisent déjà Nix. Le flake compile à partir des sources.
# Latest source from default branch
nix run github:514-labs/dnsglobe
# Specific release (uses the flake at that git tag)
nix run github:514-labs/dnsglobe/v0.4.0
# Named outputs (if the flake exposes them): #latest, #source
nix run github:514-labs/dnsglobe#source
# Build / develop
nix build github:514-labs/dnsglobe
nix develop github:514-labs/dnsglobe
Le flake expose packages.<system>.default, apps.<system>.default, devShells.<system>.default et overlays.default.
Mettez à jour via le même flux de travail Nix que celui utilisé pour l'installation. Pour les installations de profile, exécutez nix profile list puis nix profile upgrade <index-or-name>. Pour les entrées de flake, exécutez nix flake update <repo> dans votre propre flake et reconstruisez.
Devbox
Pour des environnements de développement reproductibles, utilisez Devbox :
# Install Devbox first (if not already installed)
curl -fsSL https://get.jetify.dev/devbox | bash
# Initialize the environment
devbox shell
# Build the project
devbox run build
Ou installez Devbox via Homebrew :
brew install jetify-com/devbox/devbox
Fait avec ❤️ par les personnes qui travaillent sur 514.ax.