
रस्ट में पोर्टेबल DNS रिज़ॉल्वर — .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 बाइनरी, सब कुछ एम्बेडेड। वायर-प्रोटोकॉल पार्सर एक लर्निंग प्रोजेक्ट के रूप में हाथ से लिखा गया था; बाद की सुविधाएँ (रिकर्सिव रिज़ॉल्वर, DNSSEC, डैशबोर्ड) AI सहायता से बनाई गईं।

अंदर आने के तीन तरीके, कम से अधिक प्रतिबद्धता तक। केवल तीसरा आपका सिस्टम DNS बदलता है।
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
http://localhost:5380 खोलें और किसी भी यूज़रनेम और उस टोकन से लॉग इन करें। पोर्ट 5553 होस्ट पर 53 को जो भी पकड़े हुए है उसे बायपास कर देता है। numa.numa यहाँ रिज़ॉल्व नहीं होगा, क्योंकि होस्ट DNS के लिए Numa का उपयोग नहीं कर रहा है। docker rm -f numa से साफ़ करें।
बाइनरी इंस्टॉल करें:
# 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 पोर्ट 53 पर सुनता है, लेकिन आपका सिस्टम अपना वर्तमान रिज़ॉल्वर तब तक बनाए रखता है जब तक आप numa install नहीं चलाते, इसलिए dig @127.0.0.1 example.com से परीक्षण करें। डैशबोर्ड http://localhost:5380 पर है। यदि पोर्ट 53 लिया हुआ है (Ubuntu/Mint पर systemd-resolved), तो numa.toml में bind_addr सेट करें या Docker का उपयोग करें।
| प्लेटफ़ॉर्म | इंस्टॉल | अनइंस्टॉल |
|---|---|---|
| macOS | sudo numa install | sudo numa uninstall |
| Linux | sudo numa install | sudo numa uninstall |
| Windows | numa install (admin) + reboot | numa uninstall (admin) + reboot |
install एक सर्विस रजिस्टर करता है, सिस्टम DNS को Numa की ओर इंगित करता है और उसके लोकल CA पर भरोसा करता है। uninstall तीनों को उलट देता है। इंस्टॉल होने के बाद, डैशबोर्ड http://numa.numa पर भी उपलब्ध है।
macOS और Linux पर, numa एक सिस्टम सर्विस (launchd/systemd) के रूप में चलता है। systemd यूनिट अनप्रिविलेज्ड है (DynamicUser=yes, केवल CAP_NET_BIND_SERVICE); launchd डेमॉन root के रूप में चलता है। numa install एक drop-in के माध्यम से systemd-resolved को पुनः कॉन्फ़िगर करता है जिसे numa uninstall हटा देता है; पोर्ट 53 को पकड़े हुए कोई भी अन्य प्रोसेस (dnsmasq, NetworkManager का भी) हाथ से रोकना पड़ता है। 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 के विरुद्ध संपादित करें।
लूपबैक (localhost, 127.0.0.1, numa.numa) पर किसी लॉगिन की आवश्यकता नहीं है। बाकी कुछ भी, जिसमें Docker पोर्ट मैपिंग या इस मशीन का LAN पता शामिल है, के लिए API टोकन माँगा जाता है, जिसे Numa पहली बार शुरू होने पर जनरेट करता है। इसे sudo numa token (Windows पर एक एडमिनिस्ट्रेटर शेल) से प्रिंट करें और किसी भी यूज़रनेम से लॉग इन करें। अपना खुद का [server] api_token या NUMA_API_TOKEN से पिन करें।
uninstall DNS को पुनर्स्थापित करता है लेकिन डेटा डायरेक्टरी रखता है, इसलिए पुनः इंस्टॉल करने पर वही टोकन और CA बना रहता है। सब कुछ हटाने के लिए, पहले अनइंस्टॉल करें, फिर हटाएँ:
| प्लेटफ़ॉर्म | पीछे छूटा |
|---|---|
| macOS | बाइनरी, /usr/local/var/numa, /usr/local/var/log/numa.log |
| Linux | बाइनरी (install.sh से /usr/local/bin/numa), /var/lib/numa, /etc/numa |
| Windows | बाइनरी, %PROGRAMDATA%\numa |
पैकेज-मैनेजर इंस्टॉल brew uninstall, pacman -R या cargo uninstall से बाइनरी हटा देते हैं। Linux पर, numa install एक बाइनरी की प्रति बनाता है जिसे वह अपने मूल स्थान (जैसे ~/.cargo/bin) से नहीं चला सकता, /usr/local/bin/numa पर, और uninstall उस प्रति को छोड़ देता है।
यदि आपने यूज़र कॉन्फ़िग बनाया है तो ~/.config/numa भी हटाएँ, और यदि आपने सेट किया है तो [server] data_dir पथ भी।
पोर्ट नंबर याद रखने के बजाय अपनी डेव सेवाओं को नाम दें:
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 के माध्यम से विज्ञापन और ट्रैकर ब्लॉकिंग, प्रतिदिन रीफ्रेश। किसी भी नेटवर्क पर काम करता है — कॉफ़ी शॉप, होटल, एयरपोर्ट। आपके लैपटॉप के साथ यात्रा करता है।
तीन रिज़ॉल्यूशन मोड:
forward (डिफ़ॉल्ट) — आपके मौजूदा सिस्टम DNS के लिए ट्रांसपेरेंट प्रॉक्सी। सब कुछ पहले की तरह काम करता है, बस ऊपर कैशिंग और विज्ञापन ब्लॉकिंग के साथ। कैप्टिव पोर्टल, VPN, कॉर्पोरेट DNS — सभी का सम्मान।recursive — सीधे रूट नेमसर्वर से रिज़ॉल्व करें। कोई अपस्ट्रीम निर्भरता नहीं, कोई एक इकाई आपके पूरे क्वेरी पैटर्न को नहीं देखती। पूर्ण चेन-ऑफ-ट्रस्ट वैलिडेशन के लिए [dnssec] enabled = true जोड़ें।auto — स्टार्टअप पर रूट सर्वर की जाँच करें, पहुँच योग्य होने पर रिकर्सिव, अन्यथा Quad9 (https://9.9.9.9/dns-query) को DoH पर फ़ॉरवर्ड करें, जो तब आपकी क्वेरीज़ देखता है। एक अलग प्रोवाइडर चुनने के लिए अपने [upstream] के साथ forward का उपयोग करें।DNSSEC पूर्ण चेन-ऑफ-ट्रस्ट को मान्य करता है: RRSIG हस्ताक्षर, DNSKEY सत्यापन, DS डेलिगेशन, NSEC/NSEC3 इनकार प्रमाण। यह कैसे काम करता है पढ़ें →
DNS-over-TLS लिसनर (RFC 7858) — iOS Private DNS, systemd-resolved, या stubby जैसे सख्त क्लाइंट से पोर्ट 853 पर एन्क्रिप्टेड क्वेरीज़ स्वीकार करें। दो मोड: