
numa v0.23.0
مُحلّل DNS محمول بلغة Rust — نطاقات .numa المحلية، حظر الإعلانات، تجاوزات المطور
Numa
DNS تملكه. أينما تذهب. — numa.rs
محلّل DNS محمول في ملف ثنائي واحد. احجب الإعلانات على أي شبكة، وسمِّ خدماتك المحلية (frontend.numa)، وتجاوز أي اسم مضيف مع إرجاع تلقائي، واختم كل استعلام صادر باستخدام ODoH (RFC 9230) بحيث لا يرى أي طرف بمفرده هويتك وما سألت عنه — كل ذلك من حاسوبك المحمول، دون حاجة إلى حساب سحابي أو Raspberry Pi.
مبني من الصفر بلغة Rust. لا مكتبات DNS. تخزين مؤقت، وحظر إعلانات، ومجالات الخدمات المحلية جاهزة فورًا. تحليل تكراري اختياري من خوادم الجذر مع التحقق الكامل لسلسلة الثقة DNSSEC، بالإضافة إلى مستمع DNS عبر TLS للاتصالات المشفرة للعملاء (iOS Private DNS، systemd-resolved، إلخ). شغّل numa relay فيتحول الملف الثنائي نفسه إلى نقطة نهاية ODoH عامة أيضًا — قائمة DNSCrypt المنسّقة تحتوي حاليًا على مرحِّل واحد باقٍ، لذا كل نشر لـ Numa يوسع النظام البيئي ماديًا. ملف ثنائي واحد بحجم ~8 ميجابايت، كل شيء مضمّن.

بداية سريعة
# 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
# جميع المنصات
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.2 وليس 127.0.0.1.
الخدمات المحلية
سمِّ خدمات التطوير بدلاً من تذكر أرقام المنافذ:
curl -X POST localhost:5380/services \
-d '{"name":"frontend","target_port":5173}'
الآن يعمل https://frontend.numa في متصفحك — قفل أخضر، شهادة صالحة، تمرير WebSocket لـ HMR. بدون mkcert، بدون nginx، بدون /etc/hosts.
أضف توجيهًا قائمًا على المسار (app.numa/api → :5001)، وشارك الخدمات عبر الأجهزة عبر اكتشاف الشبكة المحلية، أو هيّئ كل شيء في numa.toml.
حظر الإعلانات والخصوصية
يتم حظر أكثر من 385 ألف نطاق عبر قائمة Hagezi Pro. يعمل على أي شبكة — مقاهٍ، فنادق، مطارات. يسافر مع حاسوبك المحمول.
ثلاثة أوضاع تحليل:
forward(افتراضي) — وكيل شفاف إلى نظام DNS الحالي. كل شيء يعمل كما كان، مع إضافة التخزين المؤقت وحظر الإعلانات. بوابات الاشتراك، شبكات VPN، DNS المؤسسي — كلها محترمة.recursive— التحليل مباشرة من خوادم الجذر. لا اعتماد على مزود خارجي، لا كيان واحد يرى نمط استعلاماتك كاملاً. أضف[dnssec] enabled = trueللتحقق الكامل لسلسلة الثقة.auto— فحص خوادم الجذر عند بدء التشغيل، تحليل تكراري إذا كانت متاحة، وإلا العودة إلى DoH مشفّر إذا كان محظورًا.
يُتحقق DNSSEC من سلسلة الثقة الكاملة: توقيعات RRSIG، والتحقق من DNSKEY، وتفويض DS، وإثباتات الرفض NSEC/NSEC3. اقرأ كيف يعمل ←
مستمع DNS عبر TLS (RFC 7858) — اقبل الاستعلامات المشفّرة على المنفذ 853 من العملاء الصارمين مثل iOS Private DNS و systemd-resolved و stubby. وضعان:
- شهادة ذاتية التوقيع (افتراضي) — يُنشئ Numa هيئة تصديق محلية تلقائيًا. يضيفها
numa installإلى مخزن الثقة النظامي في macOS و Linux (Debian/Ubuntu و Fedora/RHEL/SUSE و Arch) و Windows. في iOS، ثبت ملف.mobileconfigمنnuma setup-phone. يحتفظ Firefox بمخزن NSS خاص به ويتجاهل مخزن النظام — ثق بهيئة التصديق يدويًا هناك إذا كنت بحاجة إلى HTTPS لخدمات.numaفي Firefox. - شهادة خاصة بك — وجّه
[dot] cert_path/key_pathإلى شهادة موثوقة عمومًا (مثل Let's Encrypt عبر تحدي DNS-01 على نطاق يشير إلى مثيل Numa الخاص بك). يتصل العملاء دون أي إعداد لمخزن الثقة — نفس تجربة المستخدم مع AdGuard Home أو Cloudflare1.1.1.1.
يتم الإعلان عن ALPN "dot" وتطبيقه في كلا الوضعين؛ يُرفض المصافحة مع ALPN غير مطابق كدفاع ضد الخلط بين البروتوكولات.
إعداد الهاتف — وجّه هاتف iPhone أو Android إلى Numa في خطوة واحدة:
numa setup-phone
يطبع رمز QR. امسحه ضوئيًا، ثبّت الملف الشخصي، بدّل الثقة بالشهادة — سيتجه DNS هاتفك الآن عبر Numa عبر TLS. يتطلب [mobile] enabled = true في numa.toml.
اكتشاف الشبكة المحلية
شغّل Numa على أجهزة متعددة. تجد بعضها البعض تلقائيًا عبر mDNS:
الجهاز A (192.168.1.5) الجهاز B (192.168.1.20)
┌──────────────────────┐ ┌──────────────────────┐
│ Numa │ mDNS │ Numa │
│ - api (منفذ 8000) │◄───────────►│ - grafana (3000) │
│ - frontend (5173) │ discovery │ │
└──────────────────────┘ └──────────────────────┘
من الجهاز B: curl http://api.numa ← يتم توجيهه إلى منفذ 8000 الخاص بالجهاز A. فعّل باستخدام numa lan on.
وضع المحور: شغّل مثيلاً واحدًا مع bind_addr = "0.0.0.0:53" ووجّه DNS الأجهزة الأخرى إليه — تحصل على حظر الإعلانات + تحليل .numa دون تثبيت أي شيء. يقبل bind_addr أيضًا قائمة لربط مجموعة فرعية معينة من الواجهات.
دوكر
# موصى به — شبكة المضيف (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.
وصفات compose جاهزة:
packaging/client/— وضع عميل ODoH (DNS مجهول)، Numa + ملفnuma.tomlابتدائي.packaging/relay/— مرحّل ODoH عام، Numa + Caddy + ACME.
مقارنة مع الأدوات الأخرى
| Pi-hole | AdGuard Home | Unbound | Numa | |
|---|---|---|---|---|
| وكيل الخدمة المحلية + TLS تلقائي | — | — | — | مجالات .numa، HTTPS، WebSocket |
| اكتشاف خدمات الشبكة المحلية | — | — | — | mDNS، بدون إعداد |
| تجاوزات المطوّر (REST API) | — | — | — | إرجاع تلقائي، قابل للبرمجة |
| محلل تكراري | — | — | نعم | نعم، مع اختيار SRTT |
| التحقق من DNSSEC | — | — | نعم | نعم (RSA, ECDSA, Ed25519) |
| حظر الإعلانات | نعم | نعم | — | أكثر من 385 ألف نطاق |
| واجهة إدارة ويب | كاملة | كاملة | — | لوحة تحكم |
| مزود علوي مشفّر (DoH/DoT) | يحتاج cloudflared | DoH فقط | DoT فقط | DoH + DoT (tls://) |
| عملاء مشفّرون (مستمع DoT) | يحتاج ستونيل جانبي | نعم | نعم | أصلي (RFC 7858) |
| نقطة نهاية خادم DoH | — | نعم | — | نعم (RFC 8484) |
| تحوط الطلبات | — | — | — | جميع البروتوكولات (UDP, DoH, DoT) |
| خدمة قديمة + جلب مسبق | — | — | جلب مسبق عند 90% TTL | RFC 8767، جلب مسبق عند 90% TTL |
| التوجيه الشرطي | — | نعم | نعم | نعم (قواعد حسب اللاحقة) |
| قابلية الحمل (حاسوب محمول) | لا (جهاز تطبيقي) | لا (جهاز تطبيقي) | خادم | ملف ثنائي واحد، macOS/Linux/Windows |
| نضج المجتمع | 56 ألف نجمة، 10 سنوات | 33 ألف نجمة | 20 سنة | جديد |
الأداء
0.1 مللي ثانية للاستعلامات المخزنة — يضاهي Unbound و AdGuard Home. التخزين المؤقت على مستوى الحزمة يخزّن البايتات الخام مع تعديل TTL في المكان. تحوط الطلبات يزيل ذروة p99: p99 للتحليل التكراري البارد 538 مللي ثانية مقابل 748 مللي ثانية لـ Unbound (−28%)، σ 4 مرات أضيق. المقاييس ←
تعرف على المزيد
- مدونة: Numa كمحلل لشبكة Tailnet
- مدونة: DNS عبر TLS من الصفر في Rust
- مدونة: تطبيق DNSSEC من الصفر في Rust
- مدونة: بنيت محلّل DNS من الصفر
- مرجع الإعدادات — كل الخيارات موثقة داخليًا
- REST API — تجاوزات، ذاكرة مؤقتة، حظر، خدمات، تشخيص
- numa-metrics — سجل استعلامات دائم وتحليلات، خارج المضيف بطبيعته (لا كتابة على بطاقة SD)
خارطة الطريق
- إعادة توجيه DNS، تخزين مؤقت، حظر إعلانات، تجاوزات مطور
- مجالات
.numaالمحلية — TLS تلقائي، توجيه المسار، وكيل WebSocket - اكتشاف الخدمات عبر الشبكة المحلية — mDNS، DNS عبر الأجهزة + وكيل
- DNS عبر HTTPS — مزود علوي مشفّر + نقطة نهاية خادم (RFC 8484)
- DNS عبر TLS — مستمع عميل مشفّر (RFC 7858) + إعادة توجيه علوية (
tls://) - Oblivious DoH — وضع عميل مجهول + مرحّل عام (
numa relay، RFC 9230) - تحليل تكراري + DNSSEC — سلسلة الثقة، NSEC/NSEC3
- اختيار خادم الأسماء المعتمد على SRTT
- تجاوز الفشل متعدد المرسلات — مزودات علوية متعددة مع ترتيب SRTT، مجموعة احتياطية
- تحوط الطلبات — طلبات متوازية تنقذ فقدان الحزمة وزمن الذيل (جميع البروتوكولات)
- خدمة قديمة + جلب مسبق — RFC 8767، تحديث خلفي عند <10% TTL وعند تقديم خدمة قديمة
- التوجيه الشرطي — قواعد حسب اللاحقة لـ DNS مقسم الأفق (Tailscale، VPNs)
- تسخين الذاكرة المؤقتة — تحليل استباقي للمجالات المحددة
- الإعداد للجوال — تدفق QR
setup-phone، API جوال، ملفات توصيف mobileconfig - تكامل pkarr — DNS سيادي عبر DHT الرئيسي
- أسماء
.numaعالمية — مدعومة بـ DHT، بدون مسجل
الترخيص
MIT