العودة إلى التحديثات
New releaseAug 20, 2026

numa v0.23.0

مُحلّل DNS محمول بلغة Rust — نطاقات .numa المحلية، حظر الإعلانات، تجاوزات المطور

مشاركة

Numa

CI crates.io License: MIT

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 ميجابايت، كل شيء مضمّن.

لوحة تحكم 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 — تنزيل من إصدارات 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 كنظام:

المنصةالتثبيتإلغاء التثبيت
macOSsudo numa installsudo numa uninstall
Linuxsudo numa installsudo numa uninstall
Windowsnuma 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 أو Cloudflare 1.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-holeAdGuard HomeUnboundNuma
وكيل الخدمة المحلية + TLS تلقائيمجالات .numa، HTTPS، WebSocket
اكتشاف خدمات الشبكة المحليةmDNS، بدون إعداد
تجاوزات المطوّر (REST API)إرجاع تلقائي، قابل للبرمجة
محلل تكرارينعمنعم، مع اختيار SRTT
التحقق من DNSSECنعمنعم (RSA, ECDSA, Ed25519)
حظر الإعلاناتنعمنعمأكثر من 385 ألف نطاق
واجهة إدارة ويبكاملةكاملةلوحة تحكم
مزود علوي مشفّر (DoH/DoT)يحتاج cloudflaredDoH فقطDoT فقطDoH + DoT (tls://)
عملاء مشفّرون (مستمع DoT)يحتاج ستونيل جانبينعمنعمأصلي (RFC 7858)
نقطة نهاية خادم DoHنعمنعم (RFC 8484)
تحوط الطلباتجميع البروتوكولات (UDP, DoH, DoT)
خدمة قديمة + جلب مسبقجلب مسبق عند 90% TTLRFC 8767، جلب مسبق عند 90% TTL
التوجيه الشرطينعمنعمنعم (قواعد حسب اللاحقة)
قابلية الحمل (حاسوب محمول)لا (جهاز تطبيقي)لا (جهاز تطبيقي)خادمملف ثنائي واحد، macOS/Linux/Windows
نضج المجتمع56 ألف نجمة، 10 سنوات33 ألف نجمة20 سنةجديد

الأداء

0.1 مللي ثانية للاستعلامات المخزنة — يضاهي Unbound و AdGuard Home. التخزين المؤقت على مستوى الحزمة يخزّن البايتات الخام مع تعديل TTL في المكان. تحوط الطلبات يزيل ذروة p99: p99 للتحليل التكراري البارد 538 مللي ثانية مقابل 748 مللي ثانية لـ Unbound (−28%)، σ 4 مرات أضيق. المقاييس ←

تعرف على المزيد

خارطة الطريق

  • إعادة توجيه 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

الفئات