Zurück zu den Updates
New releaseJul 28, 2026

numa v0.22.0

Portabler DNS-Resolver in Rust — lokale .numa-Domains, Adblocking, Entwickler-Overrides

Teilen

Numa

CI crates.io License: MIT

DNS, der dir gehört. Überall, wo du hingehst. — numa.rs

Ein portabler DNS-Resolver in einer einzigen Binary. Blockiere Werbung in jedem Netzwerk, benenne deine lokalen Dienste (frontend.numa), überschreibe jeden Hostnamen mit automatischem Zurücksetzen und versiegle jede ausgehende Abfrage mit ODoH (RFC 9230), sodass keine einzelne Partei sowohl sieht, wer du bist, als auch, was du gefragt hast — alles von deinem Laptop aus, ohne Cloud-Konto oder Raspberry Pi.

Von Grund auf in Rust entwickelt. Keine DNS-Bibliotheken. Caching, Werbeblockierung und lokale Dienst-Domains von Haus aus. Optionale rekursive Auflösung von Root-Nameservern mit vollständiger DNSSEC-Vertrauenskette-Validierung, plus ein DNS-over-TLS-Listener für verschlüsselte Client-Verbindungen (iOS Private DNS, systemd-resolved, etc.). Führe numa relay aus und dieselbe Binary wird auch zu einem öffentlichen ODoH-Endpunkt — die kuratierte DNSCrypt-Liste hat derzeit nur einen überlebenden Relay, also erweitert jedes Numa-Deployment das Ökosystem materiell. Eine ~8MB Binary, alles eingebettet. Der Wire-Protocol-Parser wurde als Lernprojekt von Hand geschrieben; spätere Features (rekursiver Resolver, DNSSEC, Dashboard) wurden mit KI-Unterstützung gebaut.

Numa dashboard

Schnellstart

Drei Wege hinein, von am wenigsten bis am meisten Verbindlichkeit. Nur der dritte ändert dein System-DNS.

1. In Docker ausprobieren (nichts auf dem Host installiert)

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

Öffne http://localhost:5380 und melde dich mit einem beliebigen Benutzernamen und diesem Token an. Port 5553 umgeht alles, was auf dem Host bereits 53 belegt. numa.numa wird hier nicht aufgelöst, weil der Host Numa nicht für DNS verwendet. Aufräumen mit docker rm -f numa.

2. Im Vordergrund ausführen (System-DNS unberührt)

Installiere die Binary:

# 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 lauscht auf Port 53, aber dein System behält seinen aktuellen Resolver, bis du numa install ausführst, also teste mit dig @127.0.0.1 example.com. Das Dashboard ist unter http://localhost:5380 erreichbar. Wenn Port 53 belegt ist (systemd-resolved unter Ubuntu/Mint), setze bind_addr in numa.toml oder verwende Docker.

3. Als System-DNS einrichten

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

install registriert einen Dienst, richtet das System-DNS auf Numa aus und vertraut dessen lokaler CA. uninstall macht alle drei rückgängig. Nach der Installation ist das Dashboard auch unter http://numa.numa erreichbar.

Unter macOS und Linux läuft numa als Systemdienst (launchd/systemd). Die systemd-Unit ist unprivilegiert (DynamicUser=yes, nur CAP_NET_BIND_SERVICE); der launchd-Daemon läuft als root. numa install konfiguriert systemd-resolved über ein Drop-in um, das numa uninstall entfernt; jeder andere Prozess, der Port 53 belegt (dnsmasq, einschließlich des von NetworkManager), muss manuell gestoppt werden. Unter Windows startet numa automatisch bei der Anmeldung über die Registry. Windows bindet außerdem 127.0.0.2:53 (der integrierte Dnscache besitzt 127.0.0.1:53) und installiert eine NRPT-Regel, um Abfragen dorthin zu leiten — also bearbeite bind_addr/api_bind_addr gegen 127.0.0.2, nicht 127.0.0.1.

Anmelden

Über Loopback (localhost, 127.0.0.1, numa.numa) ist keine Anmeldung erforderlich. Bei allem anderen, einschließlich Docker-Port-Mapping oder der LAN-Adresse dieser Maschine, wird das API-Token verlangt, das Numa beim ersten Start generiert. Gib es mit sudo numa token aus (unter Windows eine Administrator-Shell) und melde dich mit einem beliebigen Benutzernamen an. Lege dein eigenes fest mit [server] api_token oder NUMA_API_TOKEN.

Jede Spur entfernen

uninstall stellt DNS wieder her, behält aber das Datenverzeichnis, sodass eine Neuinstallation dasselbe Token und dieselbe CA behält. Um alles zu entfernen, zuerst deinstallieren, dann löschen:

PlattformZurückgelassen
macOSdie Binary, /usr/local/var/numa, /usr/local/var/log/numa.log
Linuxdie Binary (/usr/local/bin/numa von install.sh), /var/lib/numa, /etc/numa
Windowsdie Binary, %PROGRAMDATA%\numa

Paketmanager-Installationen entfernen die Binary mit brew uninstall, pacman -R oder cargo uninstall. Unter Linux kopiert numa install eine Binary, die es von ihrem ursprünglichen Speicherort (z. B. ~/.cargo/bin) nicht ausführen kann, nach /usr/local/bin/numa, und die Deinstallation lässt diese Kopie zurück.

Lösche außerdem ~/.config/numa, wenn du eine Benutzerkonfiguration erstellt hast, und den Pfad [server] data_dir, wenn du einen festgelegt hast.

Lokale Dienste

Benenne deine Dev-Dienste, statt dir Portnummern zu merken:

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

Jetzt funktioniert https://frontend.numa in deinem Browser — grünes Schloss, gültiges Zertifikat, WebSocket-Passthrough für HMR. Kein mkcert, kein nginx, keine /etc/hosts.

Füge pfadbasiertes Routing hinzu (app.numa/api → :5001), teile Dienste über Maschinen hinweg via LAN-Discovery oder konfiguriere alles in numa.toml.

Werbeblockierung & Datenschutz

Werbung- und Tracker-Blockierung via Hagezi Pro, täglich aktualisiert. Funktioniert in jedem Netzwerk — Cafés, Hotels, Flughäfen. Reist mit deinem Laptop.

Drei Auflösungsmodi:

  • forward (Standard) — transparenter Proxy zu deinem bestehenden System-DNS. Alles funktioniert wie zuvor, nur mit Caching und Werbeblockierung obendrauf. Captive Portals, VPNs, Corporate DNS — alles respektiert.
  • recursive — direkt von Root-Nameservern auflösen. Keine Upstream-Abhängigkeit, keine einzelne Entität sieht dein vollständiges Abfragemuster. Füge [dnssec] enabled = true für vollständige Vertrauenskette-Validierung hinzu.
  • auto — Root-Server beim Start prüfen, rekursiv wenn erreichbar, sonst Forward über DoH zu Quad9 (https://9.9.9.9/dns-query), das dann deine Abfragen sieht. Verwende forward mit deinem eigenen [upstream], um einen anderen Anbieter zu wählen.

DNSSEC validiert die vollständige Vertrauenskette: RRSIG-Signaturen, DNSKEY-Verifikation, DS-Delegation, NSEC/NSEC3-Verweigerungsnachweise. Lies, wie es funktioniert →

DNS-over-TLS-Listener (RFC 7858) — akzeptiere verschlüsselte Abfragen auf Port 853 von strikten Clients wie iOS Private DNS, systemd-resolved oder stubby. Zwei Modi:

Kategorien