Torna agli aggiornamenti
New releaseJul 28, 2026

numa v0.22.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 resolver DNS portatile in un singolo binario. Blocca gli annunci su qualsiasi rete, assegna 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 entità veda sia chi sei sia cosa hai chiesto — tutto dal tuo laptop, senza account cloud né Raspberry Pi.

Costruito da zero in Rust. Zero librerie DNS. Caching, blocco degli annunci e domini per servizi locali inclusi. Risoluzione ricorsiva opzionale dai root nameserver con validazione completa della catena di fiducia DNSSEC, più un listener DNS-over-TLS per connessioni client cifrate (iOS Private DNS, systemd-resolved, ecc.). Esegui numa relay e lo stesso binario diventa anche un endpoint ODoH pubblico — la lista curata DNSCrypt attualmente ha un solo relay sopravvissuto, quindi ogni deploy di Numa espande materialmente l'ecosistema. Un binario da ~8MB, tutto incorporato. Il parser del protocollo wire è stato scritto a mano come progetto di apprendimento; le funzionalità successive (resolver ricorsivo, DNSSEC, dashboard) sono state costruite con l'assistenza dell'IA.

Numa dashboard

Avvio Rapido

Tre modi per iniziare, dal meno al più impegnativo. Solo il terzo modifica il DNS di sistema.

1. Provalo in Docker (niente installato sull'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

Apri http://localhost:5380 e accedi con un qualsiasi username e quel token. La porta 5553 aggira qualunque cosa occupi già la 53 sull'host. numa.numa non si risolverà qui, perché l'host non sta usando Numa per il DNS. Pulisci con docker rm -f numa.

2. Esegui in primo piano (DNS di sistema intatto)

Installa il 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 ascolta sulla porta 53, ma il tuo sistema mantiene il resolver attuale finché non esegui numa install, quindi testa con dig @127.0.0.1 example.com. La dashboard è su http://localhost:5380. Se la porta 53 è occupata (systemd-resolved su Ubuntu/Mint), imposta bind_addr in numa.toml o usa Docker.

3. Imposta come DNS di sistema

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

install registra un servizio, punta il DNS di sistema a Numa e si fida della sua CA locale. uninstall inverte tutte e tre le cose. Una volta installato, la dashboard è anche su http://numa.numa.

Su macOS e Linux, numa viene eseguito come servizio di sistema (launchd/systemd). L'unit systemd è non privilegiata (DynamicUser=yes, solo CAP_NET_BIND_SERVICE); il daemon launchd viene eseguito come root. numa install riconfigura systemd-resolved tramite un drop-in che numa uninstall rimuove; qualsiasi altro processo che occupa la porta 53 (dnsmasq, incluso quello di NetworkManager) deve essere fermato a mano. Su Windows, numa si avvia automaticamente al login tramite il registro. Windows associa anche 127.0.0.2:53 (il Dnscache integrato possiede 127.0.0.1:53) e installa una regola NRPT per instradare le query lì — quindi modifica bind_addr/api_bind_addr su 127.0.0.2, non 127.0.0.1.

Accesso

Tramite loopback (localhost, 127.0.0.1, numa.numa) non è richiesto il login. Per qualsiasi altro caso, incluso il port mapping di Docker o l'indirizzo LAN di questa macchina, viene richiesto il token API, che Numa genera al primo avvio. Stampalo con sudo numa token (una shell amministratore su Windows) e accedi con un qualsiasi username. Fissa il tuo con [server] api_token o NUMA_API_TOKEN.

Rimuovere ogni traccia

uninstall ripristina il DNS ma mantiene la directory dei dati, quindi una reinstallazione mantiene lo stesso token e la stessa CA. Per rimuovere tutto, disinstalla prima, poi elimina:

PiattaformaCosa rimane
macOSil binario, /usr/local/var/numa, /usr/local/var/log/numa.log
Linuxil binario (/usr/local/bin/numa da install.sh), /var/lib/numa, /etc/numa
Windowsil binario, %PROGRAMDATA%\numa

Le installazioni tramite package manager rimuovono il binario con brew uninstall, pacman -R o cargo uninstall. Su Linux, numa install copia un binario che non può eseguire dalla sua posizione originale (es. ~/.cargo/bin) in /usr/local/bin/numa, e la disinstallazione lascia quella copia.

Elimina anche ~/.config/numa se hai creato una configurazione utente, e il percorso [server] data_dir se ne hai impostato uno.

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}'

Ora https://frontend.numa funziona nel tuo browser — lucchetto verde, certificato valido, passthrough WebSocket per HMR. Niente mkcert, niente nginx, niente /etc/hosts.

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

Blocco Annunci e Privacy

Blocco di annunci e tracker tramite Hagezi Pro, aggiornato quotidianamente. Funziona su qualsiasi rete — bar, hotel, aeroporti. Viaggia con il tuo laptop.

Tre modalità di risoluzione:

  • forward (predefinita) — proxy trasparente verso il tuo DNS di sistema esistente. Tutto funziona come prima, solo con caching e blocco annunci in più. Captive portal, VPN, DNS aziendali — tutto rispettato.
  • recursive — risolve direttamente dai root nameserver. Nessuna dipendenza upstream, nessuna singola entità vede il tuo pattern completo di query. Aggiungi [dnssec] enabled = true per la validazione completa della catena di fiducia.
  • auto — sonda i root server all'avvio, ricorsivo se raggiungibile, altrimenti forward su DoH verso Quad9 (https://9.9.9.9/dns-query), che quindi vede le tue query. Usa forward con il tuo [upstream] per scegliere un provider diverso.

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

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

Categorie