الانتقال إلى المحتوى الرئيسي

الوحدات الأصلية للمطورين

لا تحتاج الوحدات للاستخدام العادي. هذا الدليل للمطورين والمديرين الراغبين في توسيع خدمة Windows أو Linux بمكتبات أصلية. تعمل الوحدات داخل الخدمة بصلاحياتها. ثبّت شفرة موثوقة فقط، وأبقِ ملفات الوحدات وتبعياتها وإعداداتها مملوكة للمدير.

تحميل وحدة​

تقرأ الخدمة ملفات *.conf من مجلد modules.d المجاور لملف الإعدادات. المواقع الافتراضية:

النظامموقع إعدادات الوحداتصيغة المكتبة
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

اكتب المسار المطلق لكل مكتبة في سطر مستقل. مثلًا، محتوى /etc/mudfish-dns/modules.d/10-policy.conf:

/usr/lib/mudfish-dns/modules/policy.so

تُقرأ الملفات بترتيب أسمائها والأسطر بترتيبها داخل كل ملف. تُتجاهل الأسطر الفارغة والتي تبدأ بـ#. لا تضع المسارات بين علامات اقتباس ولا تستخدم متغيرات بيئة أو تعليقات في نهاية السطر، فهذه الصيغ لا تُفسّر. في Windows أيضًا، اكتب المسار المطلق كاملًا، بما فيه المسافات.

أعد تشغيل الخدمة بعد إضافة وحدة أو تغييرها أو إزالتها. في Linux:

sudo systemctl restart mudfish-dns.service

في Windows، أعد تشغيل خدمة Mudfish DNS من إدارة الخدمات. لا تعيد أزرار بدء DNS وإيقاف DNS وتطبيق الإعدادات تحميل الوحدات. لن تبدأ الخدمة إذا تعذرت قراءة الإعدادات أو كان المسار غير صحيح أو فشل التحميل أو التهيئة. يُسمح بغياب مجلد الوحدات أو كونه فارغًا.

أثناء التطوير، يمكنك تكرار الوسيط --module لتحميل المكتبات بترتيب الوسائط، ويحل ذلك محل التحميل التلقائي من modules.d. يغيّر --config FILE أيضًا موقع مجلد الوحدات المجاور لملف الإعدادات. ينفذ --restore-dns الاستعادة دون تحميل وحدات.

تنفيذ الخطافات​

اقرأ الترويسة mudfish_dns_module.h أو نزّل mudfish_dns_module.h. تعرّف البنى والخطافات والإجراءات وقواعد عمر البيانات. يستخدم هذا الدليل C ABI v2. صدّر mudfish_dns_module_init_v2()، وتحقق من MUDFISH_DNS_MODULE_ABI_V2 وحجم البنية الممرر قبل ملء الخطافات. أعد 0 عند نجاح التهيئة.

الخطافوقت الاستدعاء
on_dns_queryبعد قبول الاستعلام المحلل، وقبل مراجعة الذاكرة المؤقتة أو تمريره.
on_dns_responseبعد اختيار الاستجابة وقبل تخزينها مؤقتًا أو إعادتها للعميل. تمر الاستجابات المخزنة أيضًا بهذا الخطاف.
on_web_helloبعد فحص HTTP Host/TLS SNI الأولي، وقبل الاتصال أو معالجة البيانات الأولية.
on_web_dataبعد قراءة بيانات لاحقة من العميل أو الخادم، وقبل تمريرها.

إجراءات DNS​

تُعيد خطافات DNS في v2 صفرًا عند النجاح وتضبط result->action.

الإجراءالأثر
MUDFISH_DNS_CONTINUEمتابعة الوحدة التالية والمعالجة العادية.
MUDFISH_DNS_ALLOWإنهاء سلسلة الخطافات الحالية ومتابعة الاستعلام العادي أو إعادة الاستجابة المختارة.
MUDFISH_DNS_BLOCKإعادة REFUSED.
MUDFISH_DNS_DROPإسقاط الطلب دون إرسال استجابة DNS.
MUDFISH_DNS_ANSWERإنشاء استجابة من عنوان IPv4/IPv6 وTTL المقدمين.
MUDFISH_DNS_REPLACEاستخدام استجابة DNS كاملة بصيغتها السلكية تقدمها الوحدة.

لا تُعد ثابت الإجراء مباشرةً من خطاف DNS v2. إذا أعادت الدالة قيمة غير صفرية أو كانت النتيجة غير صالحة، ينتج SERVFAIL. ينهي ALLOW السلسلة الحالية فقط، ولا يتجاوز قواعد النطاقات أو أذونات طرق النقل أو فحص الشهادة. تمر نتائج الاستعلامات، عدا DROP، بخطافات الاستجابة أيضًا.

تُعيد خطافات الويب MUDFISH_DNS_CONTINUE أو MUDFISH_DNS_REJECT مباشرةً. يُنهى الاتصال عند رفض طلب الويب. تتطلب الخطافات تفعيل حماية الويب، ولا يُقدم محتوى HTTPS مفكوك التشفير.

المخازن والخيوط والذاكرة المؤقتة​

أحداث الإدخال ومخازنه للقراءة فقط، وصالحة أثناء الاستدعاء فقط. يجب أن تستخدم الاستجابة البديلة ذاكرة تملكها الوحدة، وتبقى صالحة حتى الاستدعاء التالي لتلك الوحدة أو إنهائها. لا تُعد ذاكرة المكدس أو مؤشرًا مستعارًا من الحدث. يجب أن تتطابق DNS ID وopcode والسؤال في الاستجابة البديلة مع الاستعلام الأصلي. تُنفذ استدعاءات النسخة الواحدة تسلسليًا، لكن قد تأتي من خيوط مختلفة. أنهِ الاستدعاءات بسرعة ولا تسمح بانتشار الاستثناءات عبر حدود ABI.

لا تُخزّن النتائج المنشأة أو المستبدلة أو المحظورة أو المسقطة في ذاكرة المضيف المؤقتة. استبدال استجابة مخزنة لا يغيّر العنصر الأصلي في الذاكرة. يمسح المضيف علم AD في الاستجابات البديلة، ولا يتحقق من DNSSEC أو يعيد التوقيع. يجب أن تتعامل الوحدة التي تعدّل بيانات موقعة بنفسها مع التواقيع التي أصبحت غير صالحة.

المثال والترويسة​

تتضمن الصفحتان التاليتان المصدر الكامل والترويسة المطلوبة، دون تنزيل شجرة مصدر Mudfish DNS منفصلة.

الملفالمحتوى
policy.c — مثال سياسة DNSالسماح والاستبعاد والحظر وإسقاط الاستعلامات وإنشاء استجابات IP وتعديل العناوين وTTL. يتضمن أوامر البناء والاختبار على Linux.
mudfish_dns_module.h — ترويسة الوحدةتعريفات ABI وتواقيع الخطافات وثوابت الإجراءات وقواعد ملكية المخازن.

نزّل policy.c وmudfish_dns_module.h في المجلد نفسه قبل البناء. ينتج أمر المثال مكتبة Linux بصيغة .so.