
numa v0.23.0
रस्ट में पोर्टेबल DNS रिज़ॉल्वर — .numa स्थानीय डोमेन, विज्ञापन अवरोधन, डेवलपर ओवरराइड
Numa
DNS जो आपका है। हर जगह। — numa.rs
एक ही बाइनरी में एक पोर्टेबल DNS रिज़ॉल्वर। किसी भी नेटवर्क पर विज्ञापन ब्लॉक करें, अपनी स्थानीय सेवाओं को नाम दें (frontend.numa), किसी भी होस्टनेम को ऑटो-रिवर्ट के साथ ओवरराइड करें, और हर आउटबाउंड क्वेरी को ODoH (RFC 9230) से सील करें ताकि कोई एक पक्ष यह न देख सके कि आप कौन हैं और आपने क्या पूछा — यह सब आपके लैपटॉप से, बिना किसी क्लाउड अकाउंट या Raspberry Pi के।
Rust में स्क्रैच से बनाया गया। शून्य DNS लाइब्रेरी। कैशिंग, विज्ञापन ब्लॉकिंग, और स्थानीय सेवा डोमेन बॉक्स से बाहर। पूर्ण DNSSEC चेन-ऑफ-ट्रस्ट वैलिडेशन के साथ रूट नेमसर्वर से वैकल्पिक रिकर्सिव रिज़ॉल्यूशन, और एन्क्रिप्टेड क्लाइंट कनेक्शन (iOS Private DNS, systemd-resolved, आदि) के लिए DNS-over-TLS लिसनर। numa relay चलाएं और वही बाइनरी एक सार्वजनिक ODoH एंडपॉइंट भी बन जाती है — क्यूरेटेड DNSCrypt सूची में वर्तमान में एक ही जीवित रिले है, इसलिए हर Numa डिप्लॉय पारिस्थितिकी तंत्र का विस्तार करता है। एक ~8MB बाइनरी, सब कुछ एम्बेडेड।

त्वरित आरंभ
# 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 — GitHub Releases से डाउनलोड करें
# All platforms
cargo install numa
# Docker
docker run -d --name numa --network host ghcr.io/razvandimescu/numa
# Nix
nix run github:razvandimescu/numa
sudo numa # फोरग्राउंड में चलाएं (पोर्ट 53 के लिए रूट/एडमिन चाहिए)
डैशबोर्ड खोलें: http://numa.numa (या http://localhost:5380)
सिस्टम DNS के रूप में सेट करें:
| प्लेटफ़ॉर्म | इंस्टॉल | अनइंस्टॉल |
|---|---|---|
| macOS | sudo numa install | sudo numa uninstall |
| Linux | sudo numa install | sudo numa uninstall |
| Windows | numa install (एडमिन) + रीबूट | numa uninstall (एडमिन) + रीबूट |
macOS और Linux पर, numa एक सिस्टम सर्विस (launchd/systemd) के रूप में चलता है। Windows पर, numa रजिस्ट्री के माध्यम से लॉगिन पर स्वतः प्रारंभ होता है। Windows 127.0.0.2:53 भी बाइंड करता है (बिल्ट-इन Dnscache 127.0.0.1:53 का मालिक है) और उस पर क्वेरी रूट करने के लिए एक NRPT नियम स्थापित करता है — इसलिए bind_addr/api_bind_addr को 127.0.0.1 के बजाय 127.0.0.2 के विरुद्ध संपादित करें।
स्थानीय सेवाएँ
पोर्ट नंबर याद करने के बजाय अपनी डेव सेवाओं को नाम दें:
curl -X POST localhost:5380/services \
-d '{"name":"frontend","target_port":5173}'
अब https://frontend.numa आपके ब्राउज़र में काम करता है — हरा ताला, मान्य प्रमाणपत्र, HMR के लिए WebSocket पासथ्रू। कोई mkcert, कोई nginx, कोई /etc/hosts नहीं।
पथ-आधारित रूटिंग जोड़ें (app.numa/api → :5001), LAN डिस्कवरी के माध्यम से मशीनों के बीच सेवाएँ साझा करें, या numa.toml में सब कुछ कॉन्फ़िगर करें।
विज्ञापन ब्लॉकिंग और गोपनीयता
Hagezi Pro के माध्यम से 385K+ डोमेन ब्लॉक किए गए। किसी भी नेटवर्क पर काम करता है — कॉफी शॉप, होटल, हवाई अड्डे। आपके लैपटॉप के साथ यात्रा करता है।
तीन रिज़ॉल्यूशन मोड:
forward(डिफ़ॉल्ट) — आपके मौजूदा सिस्टम DNS के लिए पारदर्शी प्रॉक्सी। सब कुछ पहले की तरह काम करता है, बस ऊपर कैशिंग और विज्ञापन ब्लॉकिंग के साथ। कैप्टिव पोर्टल, VPN, कॉर्पोरेट DNS — सभी का सम्मान किया जाता है।recursive— रूट नेमसर्वर से सीधे हल करें। कोई अपस्ट्रीम निर्भरता नहीं, कोई एक इकाई आपका पूरा क्वेरी पैटर्न नहीं देखती। पूर्ण चेन-ऑफ-ट्रस्ट वैलिडेशन के लिए[dnssec] enabled = trueजोड़ें।auto— स्टार्टअप पर रूट सर्वर प्रोब करें, यदि पहुँच योग्य हो तो रिकर्सिव, यदि अवरुद्ध हो तो एन्क्रिप्टेड DoH फ़ॉलबैक।
DNSSEC ट्रस्ट की पूरी श्रृंखला को मान्य करता है: RRSIG हस्ताक्षर, DNSKEY सत्यापन, DS प्रत्यायोजन, NSEC/NSEC3 अस्वीकृति प्रमाण। यह कैसे काम करता है पढ़ें →
DNS-over-TLS लिसनर (RFC 7858) — iOS Private DNS, systemd-resolved, या stubby जैसे सख्त क्लाइंट से पोर्ट 853 पर एन्क्रिप्टेड क्वेरी स्वीकार करें। दो मोड:
- स्व-हस्ताक्षरित (डिफ़ॉल्ट) — numa स्वचालित रूप से एक स्थानीय CA उत्पन्न करता है।
numa installइसे macOS, Linux (Debian/Ubuntu, Fedora/RHEL/SUSE, Arch) और Windows पर सिस्टम ट्रस्ट स्टोर में जोड़ता है। iOS पर,numa setup-phoneसे.mobileconfigइंस्टॉल करें। Firefox अपना स्वयं का NSS स्टोर रखता है और सिस्टम स्टोर को अनदेखा करता है — यदि आपको Firefox में.numaसेवाओं के लिए HTTPS चाहिए तो वहां मैन्युअल रूप से CA पर भरोसा करें। - अपना स्वयं का प्रमाणपत्र लाएं —
[dot] cert_path/key_pathको सार्वजनिक रूप से विश्वसनीय प्रमाणपत्र (जैसे, DNS-01 चैलेंज के माध्यम से Let's Encrypt, आपके numa इंस्टेंस की ओर इशारा करते डोमेन पर) पर इंगित करें। क्लाइंट बिना किसी ट्रस्ट-स्टोर सेटअप के कनेक्ट होते हैं — AdGuard Home या Cloudflare1.1.1.1के समान UX।
ALPN "dot" दोनों मोड में विज्ञापित और लागू किया जाता है; गलत ALPN वाले हैंडशेक को क्रॉस-प्रोटोकॉल कन्फ्यूजन डिफेंस के रूप में अस्वीकार कर दिया जाता है।
फ़ोन सेटअप — अपने iPhone या Android को एक चरण में Numa की ओर इंगित करें:
numa setup-phone
एक QR कोड प्रिंट करता है। इसे स्कैन करें, प्रोफ़ाइल इंस्टॉल करें, प्रमाणपत्र ट्रस्ट टॉगल करें — आपके फ़ोन का DNS अब Numa के माध्यम से TLS पर रूट होता है। numa.toml में [mobile] enabled = true आवश्यक है।
LAN डिस्कवरी
एकाधिक मशीनों पर Numa चलाएं। वे mDNS के माध्यम से स्वचालित रूप से एक-दूसरे को ढूंढते हैं:
Machine A (192.168.1.5) Machine B (192.168.1.20)
┌──────────────────────┐ ┌──────────────────────┐
│ Numa │ mDNS │ Numa │
│ - api (port 8000) │◄───────────►│ - grafana (3000) │
│ - frontend (5173) │ discovery │ │
└──────────────────────┘ └──────────────────────┘
Machine B से: curl http://api.numa → Machine A के पोर्ट 8000 पर प्रॉक्सी। numa lan on से सक्षम करें।
हब मोड: bind_addr = "0.0.0.0:53" के साथ एक इंस्टेंस चलाएं और अन्य उपकरणों के DNS को उसकी ओर इंगित करें — वे बिना कुछ इंस्टॉल किए विज्ञापन ब्लॉकिंग + .numa रिज़ॉल्यूशन प्राप्त करते हैं। bind_addr इंटरफेस के एक विशिष्ट उपसमूह को बाइंड करने के लिए एक सूची भी स्वीकार करता है।
Docker
# अनुशंसित — होस्ट नेटवर्किंग (Linux)
docker run -d --name numa --network host ghcr.io/razvandimescu/numa
# पोर्ट मैपिंग (macOS/Windows Docker Desktop)
docker run -d --name numa -p 53:53/udp -p 53:53/tcp -p 5380:5380 ghcr.io/razvandimescu/numa
http://localhost:5380 पर डैशबोर्ड। इमेज डिफ़ॉल्ट रूप से API और प्रॉक्सी को 0.0.0.0 से बाइंड करती है। कस्टम कॉन्फ़िगरेशन के साथ ओवरराइड करें:
docker run -d --name numa --network host \
-v /path/to/numa.toml:/root/.config/numa/numa.toml \
ghcr.io/razvandimescu/numa
मल्टी-आर्क: linux/amd64 और linux/arm64।
तैयार कंपोज़ रेसिपी:
packaging/client/— ODoH क्लाइंट मोड (अनाम DNS), Numa + स्टार्टरnuma.toml।packaging/relay/— सार्वजनिक ODoH रिले, Numa + Caddy + ACME।
तुलना
| Pi-hole | AdGuard Home | Unbound | Numa | |
|---|---|---|---|---|
| स्थानीय सेवा प्रॉक्सी + ऑटो TLS | — | — | — | .numa डोमेन, HTTPS, WebSocket |
| LAN सेवा खोज | — | — | — | mDNS, शून्य कॉन्फ़िगरेशन |
| डेवलपर ओवरराइड (REST API) | — | — | — | ऑटो-रिवर्ट, स्क्रिप्ट करने योग्य |
| रिकर्सिव रिज़ॉल्वर | — | — | हाँ | हाँ, SRTT चयन के साथ |
| DNSSEC वैलिडेशन | — | — | हाँ | हाँ (RSA, ECDSA, Ed25519) |
| विज्ञापन ब्लॉकिंग | हाँ | हाँ | — | 385K+ डोमेन |
| वेब एडमिन UI | पूर्ण | पूर्ण | — | डैशबोर्ड |
| एन्क्रिप्टेड अपस्ट्रीम (DoH/DoT) | cloudflared चाहिए | केवल DoH | केवल DoT | DoH + DoT (tls://) |
| एन्क्रिप्टेड क्लाइंट (DoT लिसनर) | stunnel साइडकार चाहिए | हाँ | हाँ | मूल (RFC 7858) |
| DoH सर्वर एंडपॉइंट | — | हाँ | — | हाँ (RFC 8484) |
| अनुरोध हेजिंग | — | — | — | सभी प्रोटोकॉल (UDP, DoH, DoT) |
| सर्व-स्टेल + प्रीफ़ेच | — | — | 90% TTL पर प्रीफ़ेच | RFC 8767, 90% TTL पर प्रीफ़ेच |
| सशर्त अग्रेषण | — | हाँ | हाँ | हाँ (प्रति-प्रत्यय नियम) |
| पोर्टेबल (लैपटॉप) | नहीं (उपकरण) | नहीं (उपकरण) | सर्वर | एकल बाइनरी, macOS/Linux/Windows |
| सामुदायिक परिपक्वता | 56K स्टार, 10 वर्ष | 33K स्टार | 20 वर्ष | नया |
प्रदर्शन
0.1ms कैश्ड क्वेरी — Unbound और AdGuard Home से मेल खाती है। वायर-स्तरीय कैश इन-प्लेस TTL पैचिंग के साथ कच्चे बाइट्स संग्रहीत करता है। अनुरोध हेजिंग p99 स्पाइक्स को समाप्त करता है: कोल्ड रिकर्सिव p99 538ms बनाम Unbound 748ms (−28%), σ 4× टाइटर। बेंचमार्क →
और जानें
- ब्लॉग: Numa आपके टेलनेट रिज़ॉल्वर के रूप में
- ब्लॉग: Rust में स्क्रैच से DNS-over-TLS
- ब्लॉग: Rust में स्क्रैच से DNSSEC लागू करना
- ब्लॉग: मैंने स्क्रैच से DNS रिज़ॉल्वर बनाया
- कॉन्फ़िगरेशन संदर्भ — सभी विकल्प इनलाइन दस्तावेज़ित
- REST API — ओवरराइड, कैश, ब्लॉकिंग, सेवाएँ, डायग्नोस्टिक्स
- numa-metrics — टिकाऊ क्वेरी इतिहास और विश्लेषण, डिज़ाइन द्वारा ऑफ-होस्ट (कोई SD-कार्ड राइट नहीं)
रोडमैप
- DNS फ़ॉरवर्डिंग, कैशिंग, विज्ञापन ब्लॉकिंग, डेवलपर ओवरराइड
-
.numaस्थानीय डोमेन — ऑटो TLS, पथ रूटिंग, WebSocket प्रॉक्सी - LAN सेवा खोज — mDNS, क्रॉस-मशीन DNS + प्रॉक्सी
- DNS-over-HTTPS — एन्क्रिप्टेड अपस्ट्रीम + सर्वर एंडपॉइंट (RFC 8484)
- DNS-over-TLS — एन्क्रिप्टेड क्लाइंट लिसनर (RFC 7858) + अपस्ट्रीम फ़ॉरवर्डिंग (
tls://) - Oblivious DoH — अनामित क्लाइंट मोड + सार्वजनिक रिले (
numa relay, RFC 9230) - रिकर्सिव रिज़ॉल्यूशन + DNSSEC — चेन-ऑफ-ट्रस्ट, NSEC/NSEC3
- SRTT-आधारित नेमसर्वर चयन
- मल्टी-फ़ॉरवर्डर फ़ेलओवर — SRTT रैंकिंग के साथ कई अपस्ट्रीम, फ़ॉलबैक पूल
- अनुरोध हेजिंग — समानांतर अनुरोध पैकेट लॉस और टेल लेटेंसी को बचाते हैं (सभी प्रोटोकॉल)
- सर्व-स्टेल + प्रीफ़ेच — RFC 8767, <10% TTL और स्टेल सर्व पर बैकग्राउंड रिफ्रेश
- सशर्त अग्रेषण — स्प्लिट-होराइजन DNS (Tailscale, VPN) के लिए प्रति-प्रत्यय नियम
- कैश वार्मिंग — कॉन्फ़िगर किए गए डोमेन के लिए सक्रिय रिज़ॉल्यूशन
- मोबाइल ऑनबोर्डिंग —
setup-phoneQR फ्लो, मोबाइल API, mobileconfig प्रोफाइल - pkarr एकीकरण — Mainline DHT के माध्यम से स्व-संप्रभु DNS
- वैश्विक
.numaनाम — DHT-समर्थित, कोई रजिस्ट्रार नहीं
लाइसेंस
MIT