
Comprobador de propagación de DNS con TUI — observa cómo un registro DNS se propaga a través de 34 resolutores públicos de todo el mundo, en un mapa mundial dentro de tu terminal.
Un comprobador global de propagación DNS para tu terminal — una TUI de Rust que consulta 34 resolutores DNS públicos de todo el mundo en paralelo, compara sus respuestas y muestra la propagación de tu registro en un mapa mundial.

Piensa en dnschecker.org / whatsmydns.net, pero en tu terminal, con modo de vigilancia: inicia una comprobación y vuelve a consultar hasta que el registro se haya propagado por todas partes.
Los resolutores abarcan las redes anycast globales (Google, Cloudflare, Quad9), América del Norte, Europa, Rusia, Oriente Medio, Asia Oriental y el hemisferio sur (Telstra AU, SafeSurfer NZ, UOL BR) — cada uno consultado directamente, para que veas la vista actual de cada servidor sobre el registro.
Cada resolutor se consulta directamente (sin caché, EDNS0, respaldo TCP para respuestas truncadas), por lo que lo que ves es la vista actual de cada servidor sobre el registro. Las respuestas que comparten cualquier registro se agrupan, de modo que el DNS round-robin (cada resolutor almacena en caché un subconjunto distinto de un grupo de IP) cuenta como una respuesta coherente, no como veinte en conflicto. El indicador de propagación muestra cuántos resolutores están en el grupo mayoritario; los valores atípicos se marcan ≠ DIFFERS una vez que todos los resultados han llegado.
La tabla cabe en un terminal de 80 columnas: la dirección IPv4 completa de cada resolutor, el tiempo de ida y vuelta, el TTL y la cuenta regresiva de expiración permanecen intactos, y el veredicto de cada fila se reduce al glifo del margen izquierdo (✓ ≠ ! ↻ ∅ ✗) para que la respuesta conserve el espacio. La cuenta regresiva es deliberadamente aproximada — 45s, 4m, 2h, 1d —, ya que una columna de segundos latiendo fuera de sincronía es ruido por encima de un minuto.
Cuando el terminal es lo suficientemente ancho, aparece una vista del mundo a la derecha con un punto por resolutor, coloreado según su estado (verde coincide, magenta difiere, rojo error, amarillo en curso). La vista se adapta al ancho: los terminales de ≥157 columnas obtienen un mapa plano mundial; los más estrechos (≥131 columnas) obtienen un globo 3D giratorio, que necesita menos columnas; redimensionar a través del umbral transforma uno en el otro. Ctrl+O alterna mapa/globo manualmente, y --view auto|map|globe (o view = "..." en el archivo de configuración) fuerza un estilo directamente.
A cada resolutor se le pregunta qué sitio suyo te está respondiendo, mediante NSID (RFC 5001), una opción EDNS que el nodo respondedor rellena con su propio nombre (gpdns-yul, yul01, res721.qyul1, jfk-dns1-02.inet.centurylink.net). No requiere soporte por operador, por lo que los resolutores que añadas tú mismo también pueden informar de un sitio. Cuando NSID no nombra ningún lugar, entran en juego las consultas de identificación específicas del operador: Quad9 (TXT id.server.on.quad9.net), Cloudflare (CH TXT id.server), Google (subred de salida mediante TXT o-o.myaddr.l.google.com contrastada con TXT locations.publicdns.goog), OpenDNS (TXT debug.opendns.com), CleanBrowsing y Neustar UltraDNS. El sitio descubierto se muestra en la columna Loc con códigos estilo →YUL, y el punto del resolutor en el mapa se mueve al PoP que realmente atiende tus consultas.
Instalación:
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
Ejecución:
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 = [...] en el archivo de configuración) adjunta una opción EDNS Client Subnet (RFC 7871) a cada consulta, por lo que las zonas GeoDNS responden para esa red de cliente en lugar de para el propio punto de vista del resolutor. Las subredes son CIDR o IPs simples; la mayoría de los resolutores públicos usan como máximo /24 (IPv4) o /56 (IPv6). Con varias subredes configuradas, Ctrl+N alterna la activa (además de una posición desactivada) y vuelve a consultar inmediatamente; --once ejecuta cada subred y termina con un resumen de convergencia por subred. Los resolutores que ignoran deliberadamente ECS (Cloudflare, Quad9, …) se marcan como NO ECS — su respuesta se muestra como referencia pero se excluye del porcentaje de propagación, ya que describe su propia ubicación, no la red probada.
Opcionalmente, añade tus propios resolutores — o reemplaza por completo la lista integrada — con un archivo de configuración TOML en ~/.config/dnsglobe/config.toml ($XDG_CONFIG_HOME/dnsglobe/config.toml si está definido). Define DNSGLOBE_CONFIG para usar una ruta diferente.
# 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
La configuración no válida (IP incorrecta, clave desconocida, color no reconocido, subred ecs incorrecta, lat sin lon, replace = true sin resolutores) se notifica al inicio indicando la entrada problemática.
→YUL); para el resto, la columna de ubicación es la región de origen del operador.src/resolvers.rs; usa el archivo de configuración anterior para ampliarla o reemplazarla sin recompilar. Cada entrada integrada se verificó que responde a consultas externas; muchos resolutores conocidos de ISP (y, notablemente, todos los importantes de África) rechazan consultas desde fuera de su red, por lo que no pueden incluirse.El proyecto ofrece salidas de flake de Nix opcionales para usuarios que ya usan Nix. El flake compila desde el código fuente.
# 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
El flake expone packages.<system>.default, apps.<system>.default, devShells.<system>.default y overlays.default.
Actualiza mediante el mismo flujo de trabajo de Nix que usaste para instalar. Para instalaciones de perfil, ejecuta nix profile list y luego nix profile upgrade <index-or-name>. Para entradas de flake, ejecuta nix flake update <repo> en tu propio flake y recompila.
Para entornos de desarrollo reproducibles, 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
O instala Devbox mediante Homebrew:
brew install jetify-com/devbox/devbox
Hecho con ❤️ por la gente que trabaja en 514.ax.
| Tecla | Acción |
|---|
| escribir / ⌫ / Del | editar el dominio |
| ←/→ / Home/End | mover el cursor en el campo de dominio |
| Enter | iniciar la comprobación y vigilar: vuelve a consultar cada 30 s hasta que la propagación alcance el 100% |
| Ctrl+R | detener o reanudar la vigilancia |
| Tab / Shift-Tab | seleccionar el tipo de registro (A, AAAA, CNAME, MX, NS, TXT, SOA) y volver a consultar |
| ↑/↓ / PgUp/PgDn | mover el resaltado por la tabla de resolutores (se desplaza para seguirlo) |
| + | añadir un resolutor para esta sesión (nombre, IP, ubicación y posición en el mapa opcionales) |
| Ctrl+X | eliminar el resolutor resaltado de esta sesión |
| Ctrl+S | cambiar la clasificación de la tabla: resolutor / ubicación / ping / estado / respuesta |
| Ctrl+O | alternar la vista del mundo entre mapa plano y globo giratorio |
| Ctrl+N | cambiar la subred de cliente ECS y volver a consultar (solo cuando --ecs/config define una) |
| Ctrl+U | borrar el dominio |
| Esc / Ctrl+C | salir |