نیٹیو ماڈیولز (ڈیولپرز کے لیے)
عام استعمال کے لیے ماڈیولز کی ضرورت نہیں ہوتی۔ یہ گائیڈ ان ڈیولپرز اور ایڈمنسٹریٹرز کے لیے ہے جو نیٹیو لائبریریوں کے ذریعے Windows یا Linux سروس کی صلاحیتیں بڑھانا چاہتے ہیں۔ ماڈیولز سروس کے اندر سروس کے اختیارات کے ساتھ چلتے ہیں۔ صرف قابلِ اعتماد کوڈ انسٹال کریں اور ماڈیول فائلیں، منحصر فائلیں اور کنفیگریشن فائلیں ایڈمنسٹریٹر کی ملکیت میں رکھیں۔
ماڈیول لوڈ کرنا
سروس کنفیگریشن فائل کے ساتھ موجود modules.d ڈائریکٹری سے *.conf فائلیں پڑھتی ہے۔
ڈیفالٹ مقامات درج ذیل ہیں۔
| آپریٹنگ سسٹم | ماڈیول کنفیگریشن کا مقام | لائبریری کی قسم |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
ہر فائل میں ہر سطر پر لائبریری کا ایک مکمل (absolute) راستہ لکھیں۔ مثال کے طور پر
/etc/mudfish-dns/modules.d/10-policy.conf کا مواد یہ ہوگا۔
/usr/lib/mudfish-dns/modules/policy.so
فائلیں نام کی ترتیب سے پڑھی جاتی ہیں، اور ہر فائل کے اندر سطر کی ترتیب سے۔ خالی سطریں
اور # سے شروع ہونے والی سطریں نظر انداز کی جاتی ہیں۔ راستے کو اقتباس (quotes) میں نہ
لکھیں، اور ماحولیاتی متغیرات یا سطر کے آخر میں تبصرے استعمال نہ کریں۔ ایسے اظہار
سمجھے نہیں جاتے۔ 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 ایکشنز
v2 DNS ہکس کامیابی پر 0 واپس کرتے ہیں اور result->action سیٹ کرتے ہیں۔
| ایکشن | اثر |
|---|---|
MUDFISH_DNS_CONTINUE | اگلے ماڈیول اور معمول کی پروسیسنگ کے ساتھ جاری رہتا ہے۔ |
MUDFISH_DNS_ALLOW | موجودہ ہک چین ختم کرتا ہے اور معمول کی DNS تلاش جاری رکھتا ہے یا منتخب جواب واپس کرتا ہے۔ |
MUDFISH_DNS_BLOCK | REFUSED واپس کرتا ہے۔ |
MUDFISH_DNS_DROP | DNS جواب بھیجے بغیر اسے ختم کر دیتا ہے۔ |
MUDFISH_DNS_ANSWER | فراہم کردہ IPv4/IPv6 ایڈریس اور TTL کے ساتھ جواب تیار کرتا ہے۔ |
MUDFISH_DNS_REPLACE | ماڈیول کا فراہم کردہ مکمل DNS وائر فارمیٹ جواب استعمال کرتا ہے۔ |
v2 DNS ہکس میں ایکشن کانسٹنٹس براہِ راست واپس نہ کریں۔ اگر فنکشن غیر صفر قدر واپس کرے
یا نتیجہ غلط ہو تو SERVFAIL پیدا ہوتا ہے۔ ALLOW صرف موجودہ ہک چین ختم کرتا ہے، اور
ڈومین قواعد، ٹرانسپورٹ کی اجازت، یا سرٹیفکیٹ کی جانچ کو بائی پاس نہیں کرتا۔ DROP کے
علاوہ کوئری کے نتائج رسپانس ہک سے بھی گزرتے ہیں۔
ویب ہکس MUDFISH_DNS_CONTINUE یا MUDFISH_DNS_REJECT براہِ راست واپس کرتے ہیں۔
ویب درخواست مسترد کرنے پر کنکشن بند ہو جاتا ہے۔ ویب ہکس استعمال کرنے کے لیے ویب
پروٹیکشن آن ہونا ضروری ہے، اور ڈیکرپٹ شدہ HTTPS مواد فراہم نہیں کیا جاتا۔
بفرز، تھریڈنگ اور کیشنگ
ان پٹ ایونٹس اور بفرز صرف پڑھنے کے لیے ہیں اور صرف کال بیک کے چلنے کے دوران درست رہتے ہیں۔ متبادل جواب کو ماڈیول کی ملکیت والی میموری استعمال کرنی چاہیے، اور وہ اسی ماڈیول کے اگلے کال بیک یا بند ہونے تک درست رہنی چاہیے۔ اسٹیک میموری یا ایونٹ سے ادھار لیے ہوئے پوائنٹرز واپس نہ کریں۔ متبادل جواب کا DNS ID، opcode اور سوال اصل کوئری سے مطابقت رکھنے چاہئیں۔ ایک انسٹینس کے کال بیکس ترتیب وار چلتے ہیں لیکن مختلف تھریڈز سے کال ہو سکتے ہیں۔ کال بیکس مختصر رکھیں اور ABI کی حد کے پار exceptions کو پھیلنے نہ دیں۔
تیار کردہ، تبدیل شدہ، بلاک کیے گئے اور رد کیے گئے نتائج ہوسٹ کیش میں محفوظ نہیں کیے جاتے۔ کیش شدہ جواب تبدیل کرنے سے اصل کیش اندراج نہیں بدلتا۔ ہوسٹ متبادل جواب کا AD فلیگ صاف کر دیتا ہے اور DNSSEC کی تصدیق یا دوبارہ دستخط نہیں کرتا۔ دستخط شدہ ڈیٹا میں ترمیم کرنے والے ماڈیولز کو کالعدم ہو چکے دستخط خود سنبھالنے ہوں گے۔
مثال اور ہیڈر
نیچے دیے گئے صفحات میں مکمل مثالی سورس اور مطلوبہ ہیڈر موجود ہیں۔ Mudfish DNS کا سورس ٹری الگ سے ڈاؤن لوڈ کرنے کی ضرورت نہیں۔
| فائل | مواد |
|---|---|
| policy.c — DNS پالیسی کی مثال | DNS کوئریز کی اجازت، بلاکنگ، ڈراپ، IP جواب کی تیاری، اور جوابی ایڈریس و TTL میں تبدیلی۔ Linux بلڈ اور ٹیسٹ کمانڈز بھی شامل ہیں۔ |
| mudfish_dns_module.h — ماڈیول ہیڈر | ABI ڈیکلریشنز، ہک سگنیچرز، ایکشن کانسٹنٹس، اور بفر کی ملکیت کے قواعد۔ |
بلڈ سے پہلے policy.c اور mudfish_dns_module.h کو ایک ہی ڈائریکٹری میں ڈاؤن لوڈ کریں۔
مثال کی بلڈ کمانڈ Linux .so لائبریری بناتی ہے۔