Retour aux mises à jour
New releaseAug 7, 2026

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

Partager

dnsglobe

crates.io dnsglobe dnsglobe-bin license

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.

démo dnsglobe — vérification des enregistrements A et NS d'un domaine auprès de 34 résolveurs dans le monde avec EDNS Client Subnet, alternance du sous-réseau client, puis transformation de la carte du monde en globe rotatif

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

KeyAction
type / ⌫ / Delmodifier le domaine
←/→ / Home/Enddéplacer le curseur dans le champ du domaine
Enterlancer la vérification et surveiller : re-interroge toutes les 30 s jusqu'à ce que la propagation atteigne 100 %
Ctrl+Rarrêter ou reprendre la surveillance
Tab / Shift-Tabsélectionner le type d'enregistrement (A, AAAA, CNAME, MX, NS, TXT, SOA) et relancer la requête
↑/↓ / PgUp/PgDndé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+Xsupprimer le résolveur en surbrillance pour cette session
Ctrl+Schanger le tri du tableau : résolveur / emplacement / ping / statut / réponse
Ctrl+Obasculer la vue du monde entre carte plate et globe rotatif
Ctrl+Nfaire défiler le sous-réseau client ECS et relancer la requête (uniquement si --ecs/la config en définit un)
Ctrl+Ueffacer le domaine
Esc / Ctrl+Cquitter

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.

Catégories