नेटिव मॉड्यूल (डेवलपर के लिए)
सामान्य उपयोग के लिए मॉड्यूल आवश्यक नहीं हैं। यह मार्गदर्शिका नेटिव लाइब्रेरी से Windows/Linux सेवा बढ़ाने वाले डेवलपर और प्रशासकों के लिए है। मॉड्यूल सेवा के भीतर उसी के अधिकारों से चलते हैं। केवल विश्वसनीय कोड इंस्टॉल करें और मॉड्यूल, निर्भरता तथा सेटिंग फ़ाइलें प्रशासक के स्वामित्व में रखें।
मॉड्यूल लोड करें
सेवा सेटिंग फ़ाइल के पास modules.d से *.conf पढ़ती है। डिफ़ॉल्ट स्थान:
| सिस्टम | मॉड्यूल सेटिंग स्थान | लाइब्रेरी प्रारूप |
|---|---|---|
| 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 क्रियाएँ
v2 DNS हुक सफलता पर 0 लौटाते हैं और 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 वायर प्रतिक्रिया इस्तेमाल करें। |
v2 DNS हुक से क्रिय ा स्थिरांक सीधे न लौटाएँ। गैर-शून्य वापसी या अमान्य परिणाम से 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 लाइब्रेरी बनाता है।