Volver a actualizaciones
Nuevo releaseJul 28, 2026

numa v0.22.0

Resolvedor DNS portátil en Rust — dominios locales .numa, bloqueo de anuncios, anulaciones para desarrolladores

Compartir

Numa

CI crates.io License: MIT

DNS que es tuyo. Dondequiera que vayas. — numa.rs

Un resolutor DNS portátil en un solo binario. Bloquea anuncios en cualquier red, nombra tus servicios locales (frontend.numa), sobrescribe cualquier nombre de host con reversión automática y sella cada consulta saliente con ODoH (RFC 9230) para que ninguna entidad vea tanto quién eres como qué preguntaste — todo desde tu portátil, sin cuenta en la nube ni Raspberry Pi.

Construido desde cero en Rust. Cero librerías DNS. Caché, bloqueo de anuncios y dominios de servicios locales listos para usar. Resolución recursiva opcional desde los servidores de nombres raíz con validación completa de cadena de confianza DNSSEC, más un listener DNS-over-TLS para conexiones de clientes cifradas (iOS Private DNS, systemd-resolved, etc.). Ejecuta numa relay y el mismo binario se convierte también en un endpoint ODoH público — la lista curada de DNSCrypt actualmente tiene un solo relay superviviente, así que cada despliegue de Numa expande materialmente el ecosistema. Un binario de ~8MB, todo embebido. El parser del protocolo de red fue escrito a mano como proyecto de aprendizaje; las características posteriores (resolutor recursivo, DNSSEC, dashboard) fueron construidas con asistencia de IA.

Numa dashboard

Inicio Rápido

Tres formas de entrar, de menor a mayor compromiso. Solo la tercera cambia el DNS de tu sistema.

1. Pruébalo en Docker (nada instalado en el host)

docker run -d --name numa -p 127.0.0.1:5553:53/udp -p 127.0.0.1:5553:53/tcp \
  -p 127.0.0.1:5380:5380 ghcr.io/razvandimescu/numa
dig @127.0.0.1 -p 5553 example.com
docker exec numa numa token            # dashboard password

Abre http://localhost:5380 e inicia sesión con cualquier nombre de usuario y ese token. El puerto 5553 evita lo que ya esté ocupando el 53 en el host. numa.numa no resolverá aquí, porque el host no está usando Numa para DNS. Limpia con docker rm -f numa.

2. Ejecutar en primer plano (DNS del sistema intacto)

Instala el binario:

# macOS
brew install razvandimescu/tap/numa

# Linux
curl -fsSL https://raw.githubusercontent.com/razvandimescu/numa/main/install.sh | sh

# Arch Linux
pacman -S numa

# Windows — download from GitHub Releases
# All platforms
cargo install numa

# Nix
nix run github:razvandimescu/numa
sudo numa                              # Ctrl-C to stop (port 53 requires root/admin)

Numa escucha en el puerto 53, pero tu sistema mantiene su resolutor actual hasta que ejecutes numa install, así que prueba con dig @127.0.0.1 example.com. El dashboard está en http://localhost:5380. Si el puerto 53 está ocupado (systemd-resolved en Ubuntu/Mint), configura bind_addr en numa.toml o usa Docker.

3. Establecer como DNS del sistema

PlataformaInstalarDesinstalar
macOSsudo numa installsudo numa uninstall
Linuxsudo numa installsudo numa uninstall
Windowsnuma install (admin) + rebootnuma uninstall (admin) + reboot

install registra un servicio, apunta el DNS del sistema a Numa y confía en su CA local. uninstall revierte las tres cosas. Una vez instalado, el dashboard también está en http://numa.numa.

En macOS y Linux, numa se ejecuta como servicio del sistema (launchd/systemd). La unidad systemd no tiene privilegios (DynamicUser=yes, solo CAP_NET_BIND_SERVICE); el daemon launchd se ejecuta como root. numa install reconfigura systemd-resolved mediante un drop-in que numa uninstall elimina; cualquier otro proceso que ocupe el puerto 53 (dnsmasq, incluido el de NetworkManager) tiene que detenerse a mano. En Windows, numa se inicia automáticamente al iniciar sesión vía registro. Windows también vincula 127.0.0.2:53 (el Dnscache integrado posee 127.0.0.1:53) e instala una regla NRPT para enrutar consultas hacia allí — así que edita bind_addr/api_bind_addr contra 127.0.0.2, no 127.0.0.1.

Iniciar sesión

Sobre loopback (localhost, 127.0.0.1, numa.numa) no se necesita inicio de sesión. Cualquier otra cosa, incluido el mapeo de puertos de Docker o la dirección LAN de esta máquina, pide el token de API, que Numa genera en el primer arranque. Imprímelo con sudo numa token (una shell de administrador en Windows) e inicia sesión con cualquier nombre de usuario. Fija el tuyo con [server] api_token o NUMA_API_TOKEN.

Eliminar todo rastro

uninstall restaura el DNS pero conserva el directorio de datos, así que una reinstalación mantiene el mismo token y CA. Para eliminar todo, desinstala primero, luego borra:

PlataformaLo que queda
macOSel binario, /usr/local/var/numa, /usr/local/var/log/numa.log
Linuxel binario (/usr/local/bin/numa de install.sh), /var/lib/numa, /etc/numa
Windowsel binario, %PROGRAMDATA%\numa

Las instalaciones por gestor de paquetes eliminan el binario con brew uninstall, pacman -R o cargo uninstall. En Linux, numa install copia un binario que no puede ejecutar desde su ubicación original (p. ej. ~/.cargo/bin) a /usr/local/bin/numa, y la desinstalación deja esa copia.

También elimina ~/.config/numa si creaste una configuración de usuario, y la ruta [server] data_dir si configuraste una.

Servicios Locales

Nombra tus servicios de desarrollo en lugar de recordar números de puerto:

curl -X POST localhost:5380/services \
  -d '{"name":"frontend","target_port":5173}'

Ahora https://frontend.numa funciona en tu navegador — candado verde, certificado válido, paso de WebSocket para HMR. Sin mkcert, sin nginx, sin /etc/hosts.

Añade enrutamiento basado en rutas (app.numa/api → :5001), comparte servicios entre máquinas vía descubrimiento LAN, o configura todo en numa.toml.

Bloqueo de Anuncios y Privacidad

Bloqueo de anuncios y rastreadores vía Hagezi Pro, actualizado diariamente. Funciona en cualquier red — cafeterías, hoteles, aeropuertos. Viaja con tu portátil.

Tres modos de resolución:

  • forward (predeterminado) — proxy transparente a tu DNS de sistema existente. Todo funciona como antes, solo con caché y bloqueo de anuncios encima. Portales cautivos, VPNs, DNS corporativo — todo respetado.
  • recursive — resuelve directamente desde los servidores de nombres raíz. Sin dependencia de upstream, ninguna entidad única ve tu patrón completo de consultas. Añade [dnssec] enabled = true para validación completa de cadena de confianza.
  • auto — sondea los servidores raíz al arrancar, recursivo si es alcanzable, si no forward sobre DoH a Quad9 (https://9.9.9.9/dns-query), que entonces ve tus consultas. Usa forward con tu propio [upstream] para elegir un proveedor diferente.

DNSSEC valida la cadena de confianza completa: firmas RRSIG, verificación DNSKEY, delegación DS, pruebas de denegación NSEC/NSEC3. Lee cómo funciona →

Listener DNS-over-TLS (RFC 7858) — acepta consultas cifradas en el puerto 853 de clientes estrictos como iOS Private DNS, systemd-resolved o stubby. Dos modos:

Categorías