
Controllore di propagazione DNS globale TUI — osserva un record DNS propagarsi attraverso 34 resolver pubblici in tutto il mondo, su una mappa mondiale nel tuo terminale
Un controllo globale della propagazione DNS per il tuo terminale — una TUI in Rust che interroga 34 resolver DNS pubblici in tutto il mondo in parallelo, confronta le loro risposte e mostra la propagazione del tuo record su una mappa del mondo.

Pensa a dnschecker.org / whatsmydns.net, ma nel tuo terminale, con la modalità watch: avvii un controllo e riinterroga finché il record non si è propagato ovunque.
I resolver coprono le reti anycast globali (Google, Cloudflare, Quad9), il Nord America, l'Europa, la Russia, il Medio Oriente, l'Asia orientale e l'emisfero meridionale (Telstra AU, SafeSurfer NZ, UOL BR) — ciascuno interrogato direttamente, così vedi la visione attuale del record di ogni singolo server.
Ogni resolver viene interrogato direttamente (niente cache, EDNS0, fallback TCP per le risposte troncate), quindi ciò che vedi è la visione attuale del record di ogni singolo server. Le risposte che condividono un qualsiasi record vengono raggruppate — così il DNS round-robin (ogni resolver che mette in cache un sottoinsieme diverso di un pool di IP) conta come una risposta coerente, non venti in conflitto. L'indicatore di propagazione mostra quanti resolver sono nel gruppo di maggioranza; le eccezioni vengono contrassegnate con ≠ DIFFERS una volta che tutti i risultati sono arrivati.
La tabella entra in un terminale da 80 colonne: l'indirizzo IPv4 completo di ogni resolver, il tempo di andata e ritorno, il TTL e il conto alla rovescia della scadenza restano intatti, e il verdetto di ogni riga si riduce al glifo nel margine sinistro (✓ ≠ ! ↻ ∅ ✗) così la risposta mantiene lo spazio. Il conto alla rovescia è volutamente approssimativo — 45s, 4m, 2h, 1d — perché una colonna di secondi che scorrono fuori sincrono è rumore oltre il minuto.
Quando il terminale è abbastanza largo, a destra appare una vista del mondo con un punto per ogni resolver, colorato in base allo stato (verde concorda, magenta differisce, rosso errore, giallo in volo). La vista si adatta alla larghezza: i terminali con ≥157 colonne ottengono una mappa del mondo piatta, quelli più stretti (≥131 colonne) un globo 3D rotante, che richiede meno colonne; ridimensionare oltre la soglia trasforma l'una nell'altro. Ctrl+O alterna mappa/globo manualmente, e --view auto|map|globe (o view = "..." nel file di configurazione) impone uno stile direttamente.
A ogni resolver viene chiesto quale dei suoi siti ti sta rispondendo, tramite NSID (RFC 5001) — un'opzione EDNS che il nodo che risponde compila con il proprio nome (gpdns-yul, yul01, res721.qyul1, jfk-dns1-02.inet.centurylink.net). Non richiede alcun supporto per operatore, quindi anche i resolver che aggiungi tu possono segnalare un sito. Dove NSID non indica un luogo, subentrano le query di identificazione specifiche dell'operatore: Quad9 (TXT id.server.on.quad9.net), Cloudflare (CH TXT id.server), Google (subnet di uscita tramite TXT o-o.myaddr.l.google.com confrontata con TXT locations.publicdns.goog), OpenDNS (TXT debug.opendns.com), CleanBrowsing e Neustar UltraDNS. Il sito individuato appare nella colonna Loc con codici stile →YUL e il punto del resolver sulla mappa si sposta al POP che sta effettivamente servendo le tue query.
Installa:
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
Esegui:
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
--ecs (o ecs = [...] nel file di configurazione) aggiunge un'opzione EDNS Client Subnet (RFC 7871) a ogni query, così le zone GeoDNS rispondono per quella rete client invece che per il punto di osservazione del resolver. Le subnet sono CIDR o IP puri; la maggior parte dei resolver pubblici usa al massimo /24 (IPv4) o /56 (IPv6). Con più subnet configurate, Ctrl+N cicla quella attiva (più una posizione off) e riinterroga immediatamente; --once esegue ogni subnet e termina con un riepilogo di convergenza per subnet. I resolver che ignorano deliberatamente ECS (Cloudflare, Quad9, …) sono contrassegnati con NO ECS — la loro risposta viene mostrata come riferimento ma esclusa dalla percentuale di propagazione, poiché descrive la loro posizione, non la rete sondata.
Facoltativamente, puoi aggiungere i tuoi resolver — o sostituire completamente l'elenco integrato — con un file di configurazione TOML in ~/.config/dnsglobe/config.toml ($XDG_CONFIG_HOME/dnsglobe/config.toml se impostato). Usa DNSGLOBE_CONFIG per un percorso diverso.
# 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
Una configurazione non valida (IP errato, chiave sconosciuta, colore non riconosciuto, subnet ecs errata, lat senza lon, replace = true senza resolver) viene segnalata all'avvio indicando la voce incriminata.
→YUL); per le altre, la colonna della posizione indica la regione di origine dell'operatore.src/resolvers.rs; usa il file di configurazione sopra per estenderlo o sostituirlo senza ricompilare. Ogni voce integrata è stata verificata per rispondere a query esterne; molti noti resolver ISP (e, in particolare, tutti i principali resolver africani) rifiutano query provenienti da fuori dalla loro rete, quindi non possono essere inclusi.Il progetto fornisce output flake Nix opzionali per gli utenti che già usano Nix. La flake compila dal sorgente.
# 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
La flake espone packages.<system>.default, apps.<system>.default, devShells.<system>.default e overlays.default.
Aggiorna tramite lo stesso flusso di lavoro Nix che hai usato per installare. Per le installazioni di profilo, esegui nix profile list e poi nix profile upgrade <index-or-name>. Per gli input della flake, esegui nix flake update <repo> nella tua flake e ricompila.
Per ambienti di sviluppo riproducibili, usa 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
Oppure installa Devbox tramite Homebrew:
brew install jetify-com/devbox/devbox
Creato con ❤️ dalle persone che lavorano su 514.ax.
| Tasto | Azione |
|---|
| tipo / ⌫ / Del | modifica il dominio |
| ←/→ / Home/End | sposta il cursore nel campo del dominio |
| Invio | avvia il controllo e osserva: riinterroga ogni 30 s finché la propagazione non raggiunge il 100% |
| Ctrl+R | interrompe o riprende l'osservazione |
| Tab / Shift-Tab | seleziona il tipo di record (A, AAAA, CNAME, MX, NS, TXT, SOA) e riinterroga |
| ↑/↓ / PgUp/PgDn | sposta l'evidenziazione nella tabella dei resolver (scorre per seguire) |
| + | aggiunge un resolver per questa sessione (nome, IP, posizione facoltativa e posizione sulla mappa) |
| Ctrl+X | rimuove il resolver evidenziato per questa sessione |
| Ctrl+S | cicla l'ordinamento della tabella: resolver / posizione / ping / stato / risposta |
| Ctrl+O | alterna la vista del mondo tra mappa piatta e globo rotante |
| Ctrl+N | cicla la subnet client ECS e riinterroga (solo quando --ecs/config ne configura una) |
| Ctrl+U | cancella il dominio |
| Esc / Ctrl+C | esci |