الوحدات الأصلية للمطورين
لا تحتاج الوحدات للاستخدام العادي. هذا الدليل للمطورين والمديرين الراغبين في توسيع خدمة 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.