مرکزی مواد پر جائیں

نیٹیو ماڈیولز (ڈیولپرز کے لیے)

عام استعمال کے لیے ماڈیولز کی ضرورت نہیں ہوتی۔ یہ گائیڈ ان ڈیولپرز اور ایڈمنسٹریٹرز کے لیے ہے جو نیٹیو لائبریریوں کے ذریعے 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_BLOCKREFUSED واپس کرتا ہے۔
MUDFISH_DNS_DROPDNS جواب بھیجے بغیر اسے ختم کر دیتا ہے۔
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 لائبریری بناتی ہے۔