TL;DR

Numa là DNS resolver mới do Razvan Dimescu viết từ đầu bằng Rust — không xài transitive DNS library nào — đóng gói trong một binary ~8MB chạy native trên macOS, Linux, Windows. Trong cùng một tiến trình nó làm ba việc mà trước giờ cần ba tool riêng: (1) chặn 385.000+ domain quảng cáo kiểu Pi-hole, (2) phân giải đệ quy từ root nameserver có DNSSEC kiểu Unbound, và (3) cấp domain .numa với TLS tự động cho local dev service kiểu mkcert + nginx. Cached query dưới 1ms. Trên p99 cold recursive, nó nhanh hơn Unbound 28%. MIT License, free, không cần Raspberry Pi, không cần cloud account. Mới release v0.14.2.

Có gì mới

Numa xuất hiện trên Hacker News (Show HN thread 115 điểm) với pitch ngắn gọn: "DNS you own. Everywhere you go." Khác với các giải pháp hiện có, Numa không phải là một appliance (Pi-hole) cũng không phải một dịch vụ cloud (NextDNS, Cloudflare 1.1.1.1). Nó là một file binary duy nhất bạn bỏ trong laptop và mang theo người.

Tác giả built nó thành daily-driver DNS cho chính mình, nên scope từ đầu là một forwarding proxy với ad blocking, rồi lớn dần thành một iterative resolver có DNSSEC chain-of-trust, có DoT listener, có local service proxy. Highlight feature của v0.13.0 là request hedging — gửi song song nhiều protocol để cứu tail latency.

Số liệu kỹ thuật

  • Binary: ~8MB, everything embedded (blocklist, CA gen, dashboard HTML)
  • Memory footprint với 390K domain bị block: ~31MB tổng (23.4MB blocklist + 3.8MB cache + ~4MB query log/runtime)
  • Cached query: 689 nanoseconds round-trip (parse + lookup + serialize)
  • Throughput single-thread: ~2.0M queries/sec batched pipeline
  • DNSSEC: chain-of-trust đầy đủ qua ring — RSA/SHA-256, ECDSA P-256, Ed25519; NSEC/NSEC3 denial proof; EDNS0 DO bit, payload 1232 bytes (DNS Flag Day 2020)
  • Listeners: UDP:53, TCP:53, DoT:853 (RFC 7858, ALPN "dot" enforcement), HTTP proxy :80, HTTPS proxy :443, dashboard :5380
  • Ba chế độ phân giải: forward (mặc định, proxy qua system DNS), recursive (từ root hints, không upstream), auto (probe root on startup, fallback DoH nếu bị chặn)
  • REST API: 27 endpoint cho overrides, cache, blocking, services, diagnostics
  • Dependencies: tokio, axum, hyper, ring, reqwest, rcgen, rustls, tokio-rustls, socket2, serde — không có transitive DNS library

So sánh với Pi-hole, AdGuard Home, Unbound

Đây là điểm mà Numa định vị rõ nhất: nó không thay thế hoàn toàn một tool nào, mà gộp tính năng của cả ba vào một binary portable.

Tính năngPi-holeAdGuard HomeUnboundNuma
Local domain + auto TLS.numa + WebSocket
LAN discovery (mDNS)Zero config
Recursive resolverCần UnboundYesYes, có SRTT
DNSSEC validationPassthroughPassthroughYesRSA/ECDSA/Ed25519
Ad blockingYesYes385K+ domain
DoT listenerCần stunnelYesYesNative RFC 7858
Request hedgingAll protocols
Portable (laptop)No (appliance)No (appliance)ServerSingle binary
Tuổi đời10 năm, 56K stars33K stars20 nămMới (454 stars)

Benchmark cold recursive đáng chú ý: Numa p99 538ms so với Unbound 748ms — giảm 28%, và standard deviation tighter gấp 4 lần nhờ request hedging.

Use case thực tế

1. Dev web local có HTTPS đàng hoàng. Thay vì nhớ port localhost:5173, localhost:5001, localhost:3000, bạn map chúng thành https://frontend.numa, https://api.numa/v1, https://admin.numa. Green lock, cert hợp lệ, WebSocket HMR passthrough. Không cần mkcert, không cần nginx, không cần /etc/hosts.

2. Block ads trên Wi-Fi khách sạn / quán cafe. Binary chạy trên laptop, đi đâu cũng có ad blocking — kể cả khi bạn switch qua VPN công ty. Forward mode respect system DNS, captive portal vẫn hoạt động.

3. Dev đang xài Tailscale. Numa auto-detect forwarding rule từ system — query khớp .ts.net đi qua Tailscale DNS, còn lại đi qua Numa. Không cần cấu hình split-DNS tay.

4. DNS mã hoá cho điện thoại. Chạy numa setup-phone → in QR code → scan bằng iPhone/Android → cài .mobileconfig → điện thoại query DNS qua TLS về máy bạn.

5. Homelab hub mode. Trên SBC đặt bind_addr = "0.0.0.0:53", point mọi thiết bị trong nhà về IP đó — thành network-wide ad blocker kiểu Pi-hole, nhưng thêm được .numa resolution.

Hạn chế & pricing

  • License: MIT, hoàn toàn miễn phí, không cần cloud account
  • Browser quirk: Chrome/Firefox đôi khi treat .numa là search query — phải gõ trailing slash https://frontend.numa/ để force DNS resolution. Đây là browser behavior chứ không phải lỗi Numa
  • Firefox trust store: Firefox xài NSS store riêng, phải trust CA của Numa bằng tay nếu cần HTTPS cho .numa service trong Firefox
  • Community maturity: còn mới — 454 GitHub stars tại thời điểm research, so với Pi-hole 10 năm / 56K stars và Unbound 20 năm. Chạy production-critical thì nên theo dõi thêm vài release
  • Docker compose: reverse container resolution cần workaround dns: [host.docker.internal]

Roadmap tiếp theo

10 phase đã completed: proxy core, override + REST API, ad blocking, system integration, local service proxy, DoH, recursive + DNSSEC, hostile-network resilience, Windows support, DoT listener. Giờ hướng tới "Self-Sovereign DNS":

  • Phase 11 — pkarr integration: DNS tự sovereign qua Mainline DHT, không cần registrar
  • Phase 12 — Global .numa names: self-publish, DHT-backed, first-come-first-served
  • Phase 13.onion bridge: đặt tên human-readable cho Tor hidden service qua Ed25519 same-key binding

Nếu hướng này đi tới đích thì Numa vừa là dev tool, vừa là công cụ privacy đáng chú ý trong ecosystem — một trong số ít project cố gắng phá cái cấu trúc ICANN-registrar-centric mà không cần blockchain.

Cài thử: brew install razvandimescu/tap/numa hoặc cargo install numa hoặc chạy curl -fsSL https://raw.githubusercontent.com/razvandimescu/numa/main/install.sh | sh. Dashboard mở tại http://numa.numa hoặc http://localhost:5380.

Nguồn: GitHub razvandimescu/numa, numa.rs, Show HN thread, Rust Forum announcement.