Torna agli aggiornamenti
New releaseAug 20, 2026

numa v0.23.0

Resolutor DNS portatile in Rust — domini locali .numa, blocco pubblicità, override per sviluppatori

Condividi

Numa

CI crates.io License: MIT

Il DNS che possiedi. Ovunque tu vada.numa.rs

Un risolutore DNS portabile in un singolo binario. Blocca gli annunci su qualsiasi rete, dai un nome ai tuoi servizi locali (frontend.numa), sovrascrivi qualsiasi hostname con ripristino automatico e sigilla ogni query in uscita con ODoH (RFC 9230) in modo che nessuna singola parte veda sia chi sei sia cosa hai chiesto — tutto dal tuo laptop, senza account cloud o Raspberry Pi.

Realizzato da zero in Rust. Zero librerie DNS. Caching, blocco annunci e domini per servizi locali pronti all'uso. Risoluzione ricorsiva opzionale dai nameserver root con convalida completa della catena di fiducia DNSSEC, più un listener DNS-over-TLS per connessioni client crittografate (iOS Private DNS, systemd-resolved, ecc.). Esegui numa relay e lo stesso binario diventa anche un endpoint ODoH pubblico — l'elenco DNSSEC curato attualmente ha un solo relay sopravvissuto, quindi ogni deploy di Numa espande materialmente l'ecosistema. Un singolo binario di ~8MB, tutto incorporato.

Dashboard di Numa

Avvio rapido

# 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 — scarica da GitHub Releases
# Tutte le piattaforme
cargo install numa

# Docker
docker run -d --name numa --network host ghcr.io/razvandimescu/numa

# Nix
nix run github:razvandimescu/numa
sudo numa                              # esegui in primo piano (porta 53 richiede root/admin)

Apri la dashboard: http://numa.numa (o http://localhost:5380)

Imposta come DNS di sistema:

PiattaformaInstallazioneDisinstallazione
macOSsudo numa installsudo numa uninstall
Linuxsudo numa installsudo numa uninstall
Windowsnuma install (amministratore) + riavvionuma uninstall (amministratore) + riavvio

Su macOS e Linux, numa viene eseguito come servizio di sistema (launchd/systemd). Su Windows, numa si avvia automaticamente al login tramite registro. Windows inoltre associa 127.0.0.2:53 (il Dnscache integrato possiede 127.0.0.1:53) e installa una regola NRPT per instradare le query verso di esso — quindi modifica bind_addr/api_bind_addr rispetto a 127.0.0.2, non 127.0.0.1.

Servizi locali

Assegna un nome ai tuoi servizi di sviluppo invece di ricordare i numeri di porta:

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

Adesso https://frontend.numa funziona nel tuo browser — lucchetto verde, certificato valido, passaggio WebSocket per HMR. Nessun mkcert, nessun nginx, nessun /etc/hosts.

Aggiungi instradamento basato su percorso (app.numa/api → :5001), condividi servizi tra macchine tramite scoperta LAN o configura tutto in numa.toml.

Blocco pubblicità e privacy

Oltre 385.000 domini bloccati tramite Hagezi Pro. Funziona su qualsiasi rete — caffetterie, hotel, aeroporti. Viaggia con il tuo laptop.

Tre modalità di risoluzione:

  • forward (predefinita) — proxy trasparente al tuo DNS di sistema esistente. Tutto funziona come prima, solo con caching e blocco annunci in più. Portali captive, VPN, DNS aziendali — tutti rispettati.
  • recursive — risolvi direttamente dai nameserver root. Nessuna dipendenza upstream, nessuna singola entità vede il tuo pattern completo di query. Aggiungi [dnssec] enabled = true per la convalida completa della catena di fiducia.
  • auto — sonda i server root all'avvio, ricorsivo se raggiungibile, fallback DoH crittografato se bloccato.

DNSSEC convalida l'intera catena di fiducia: firme RRSIG, verifica DNSKEY, delega DS, prove di negazione NSEC/NSEC3. Leggi come funziona →

Listener DNS-over-TLS (RFC 7858) — accetta query crittografate sulla porta 853 da client rigorosi come iOS Private DNS, systemd-resolved o stubby. Due modalità:

  • Self-signed (predefinita) — numa genera automaticamente una CA locale. numa install la aggiunge al trust store di sistema su macOS, Linux (Debian/Ubuntu, Fedora/RHEL/SUSE, Arch) e Windows. Su iOS, installa il .mobileconfig da numa setup-phone. Firefox mantiene il proprio store NSS e ignora quello di sistema — aggiungi manualmente la fiducia alla CA lì se hai bisogno di HTTPS per i servizi .numa in Firefox.
  • Certificato proprio — imposta [dot] cert_path / key_path su un certificato pubblico attendibile (ad es., Let's Encrypt tramite sfida DNS-01 su un dominio che punta alla tua istanza numa). I client si connettono senza alcuna configurazione del trust store — stessa UX di AdGuard Home o Cloudflare 1.1.1.1.

ALPN "dot" viene pubblicizzato e applicato in entrambe le modalità; un handshake con ALPN non corrispondente viene rifiutato come difesa contro confusione tra protocolli.

Configurazione telefono — collega il tuo iPhone o Android a Numa in un passaggio:

numa setup-phone

Stampa un codice QR. Scansiona, installa il profilo, attiva la fiducia del certificato — il DNS del tuo telefono ora passa attraverso Numa via TLS. Richiede [mobile] enabled = true in numa.toml.

Scoperta LAN

Esegui Numa su più macchine. Si trovano automaticamente tramite mDNS:

Macchina A (192.168.1.5)              Macchina B (192.168.1.20)
┌──────────────────────┐             ┌──────────────────────┐
│ Numa                 │    mDNS     │ Numa                 │
│  - api (porta 8000)  │◄───────────►│  - grafana (3000)    │
│  - frontend (5173)   │  scoperta   │                      │
└──────────────────────┘             └──────────────────────┘

Dalla Macchina B: curl http://api.numa → inoltrato alla porta 8000 della Macchina A. Abilita con numa lan on.

Modalità hub: esegui un'istanza con bind_addr = "0.0.0.0:53" e punta il DNS di altri dispositivi verso di essa — ottengono blocco annunci + risoluzione .numa senza installare nulla. bind_addr accetta anche un elenco per associare un sottoinsieme specifico di interfacce.

Docker

# Consigliato — rete host (Linux)
docker run -d --name numa --network host ghcr.io/razvandimescu/numa

# Mapping delle porte (macOS/Windows Docker Desktop)
docker run -d --name numa -p 53:53/udp -p 53:53/tcp -p 5380:5380 ghcr.io/razvandimescu/numa

Dashboard a http://localhost:5380. L'immagine associa API e proxy a 0.0.0.0 di default. Sovrascrivi con una configurazione personalizzata:

docker run -d --name numa --network host \
  -v /path/to/numa.toml:/root/.config/numa/numa.toml \
  ghcr.io/razvandimescu/numa

Multi-arch: linux/amd64 e linux/arm64.

Ricette compose chiavi in mano:

Confronto

Pi-holeAdGuard HomeUnboundNuma
Proxy servizi locali + TLS automaticoDomini .numa, HTTPS, WebSocket
Scoperta servizi LANmDNS, zero configurazione
Sovrascritture sviluppatore (API REST)Ripristino automatico, scriptabile
Risolutore ricorsivoSì, con selezione SRTT
Convalida DNSSECSì (RSA, ECDSA, Ed25519)
Blocco annunciOltre 385.000 domini
Interfaccia web adminCompletaCompletaDashboard
Upstream crittografato (DoH/DoT)Necessita cloudflaredSolo DoHSolo DoTDoH + DoT (tls://)
Client crittografati (listener DoT)Necessita sidecar stunnelNativo (RFC 7858)
Endpoint server DoHSì (RFC 8484)
Hedging delle richiesteTutti i protocolli (UDP, DoH, DoT)
Serve-stale + prefetchPrefetch al 90% TTLRFC 8767, prefetch al 90% TTL
Inoltro condizionaleSì (regole per suffisso)
Portatile (laptop)No (appliance)No (appliance)ServerSingolo binario, macOS/Linux/Windows
Maturità community56K stelle, 10 anni33K stelle20 anniNuovo

Prestazioni

Query in cache da 0,1 ms — alla pari con Unbound e AdGuard Home. La cache a livello di rete memorizza byte grezzi con patch in-place della TTL. L'hedging delle richieste elimina gli spike p99: p99 ricorsivo a freddo 538 ms vs Unbound 748 ms (−28%), σ 4× più stretto. Benchmark →

Per saperne di più

Roadmap

  • Inoltro DNS, caching, blocco annunci, sovrascritture sviluppatore
  • Domini locali .numa — TLS automatico, instradamento percorsi, proxy WebSocket
  • Scoperta servizi LAN — mDNS, DNS + proxy cross-macchina
  • DNS-over-HTTPS — upstream crittografato + endpoint server (RFC 8484)
  • DNS-over-TLS — listener client crittografato (RFC 7858) + inoltro upstream (tls://)
  • Oblivious DoH — modalità client anonima + relay pubblico (numa relay, RFC 9230)
  • Risoluzione ricorsiva + DNSSEC — catena di fiducia, NSEC/NSEC3
  • Selezione nameserver basata su SRTT
  • Failover multi-forwarder — più upstream con ranking SRTT, pool di fallback
  • Hedging delle richieste — richieste parallele salvano perdita di pacchetti e latenza di coda (tutti i protocolli)
  • Serve-stale + prefetch — RFC 8767, aggiornamento in background a <10% TTL e su serve-stale
  • Inoltro condizionale — regole per suffisso per DNS split-horizon (Tailscale, VPN)
  • Riscaldamento cache — risoluzione proattiva per domini configurati
  • Onboarding mobile — flusso QR setup-phone, API mobile, profili mobileconfig
  • Integrazione pkarr — DNS auto-sovrano tramite Mainline DHT
  • Nomi .numa globali — basati su DHT, nessun registrar

Licenza

MIT

Categorie