Nativ modullar (dasturchilar uchun)
Oddiy foydalanish uchun modullar talab etilmaydi. Ushbu qoʻllanma nativ kutubxonalar orqali Windows yoki Linux xizmati imkoniyatlarini kengaytirmoqchi boʻlgan dasturchilar va tizim maʼmurlariga moʻljallangan. Modullar xizmat ichida uning huquqlari bilan ishga tushadi. Faqat ishonchli kodlarni oʻrnating hamda modul fayllari, bogʻliqliklar va konfiguratsiya fayllariga faqat maʼmur egalik qilishini taʼminlang.
Modulni yuklash
Xizmat konfiguratsiya fayli yonidagi modules.d katalogidan *.conf fayllarini oʻqiydi. Standart joylashuvlar:
| Operatsion tizim | Modul konfiguratsiyasi joylashuvi | Kutubxona formati |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
Har bir faylga har bir qatorda bittadan kutubxonaning mutlaq yoʻli yoziladi. Masalan, /etc/mudfish-dns/modules.d/10-policy.conf fayli tarkibi quyidagicha boʻlishi mumkin:
/usr/lib/mudfish-dns/modules/policy.so
Fayllar nomlari tartibida, har bir fayl ichida esa qatorlar ketma-ketligida oʻqiladi. Boʻsh qatorlar va # bilan boshlanuvchi izohlar eʼtiborga olinmaydi. Yoʻllarni qoʻshtirnoqqa olmang, muhit oʻzgaruvchilarini yoki qator oxiridagi izohlarni ishlatmang: ular talqin qilinmaydi. Windows tizimida ham boʻshliqlari (probel) boʻlgan yoʻllar bilan birga toʻliq mutlaq yoʻlni fayl ichida koʻrsating.
Modul qoʻshilgandan, oʻzgartirilgandan yoki oʻchirilgandan soʻng xizmatni qayta ishga tushiring. Linux tizimida quyidagi buyruq ishlatiladi:
sudo systemctl restart mudfish-dns.service
Windows tizimida xizmatlar boshqaruvidan Mudfish DNS xizmatini qayta ishga tushiring. Ilovadagi DNS ni boshlash, DNS ni toʻxtatish va Sozlamalarni qoʻllash amallari modullarni qayta yuklamaydi. Konfiguratsiya faylini oʻqib boʻlmasa, yoʻl notoʻgʻri boʻlsa yoki yuklash/boshlangʻich ishga tushirishda xatolik yuz bersa, xizmat ishga tushmaydi. Modul katalogi mavjud boʻlmasligi yoki boʻsh boʻlishiga ruxsat etiladi.
Dastur ishlab chiqish jarayonida --module argumentini ketma-ket koʻrsatib, kutubxonalarni argumentlar tartibida yuklash mumkin. Bu holatda avtomatik modules.d yuklanishi oʻrnini bosadi. --config FILE parametri konfiguratsiya fayli yonidagi modul katalogi manzilini ham oʻzgartiradi. --restore-dns esa modullarni yuklamasdan tiklashni amalga oshiradi.
Xuklarni (Hooks) amalga oshirish
mudfish_dns_module.h sarlavha faylini oʻqing yoki mudfish_dns_module.h faylini yuklab oling. Ushbu sarlavha faylida modullarda ishlatiladigan tuzilmalar, xuklar, amallar va maʼlumotlarning yashash muddati qoidalari aniqlangan. Ushbu qoʻllanmada C ABI v2 ishlatiladi. mudfish_dns_module_init_v2() funksiyasini tashqi foydalanish uchun chiqaring (export qiling) hamda xuklarni toʻldirishdan oldin MUDFISH_DNS_MODULE_ABI_V2 va uzatilgan tuzilma hajmini tekshiring. Muvaffaqiyatli ishga tushganda 0 qaytaring.
| Xuk | Chaqirilish vaqti |
|---|---|
on_dns_query | Tahlil qilingan soʻrov qabul qilingandan soʻng, keshdan qidirish yoki yoʻnaltirishdan oldin. |
on_dns_response | Javob tanlangandan soʻng, keshga saqlash yoki mijozga qaytarishdan oldin. Keshdagi javoblar ham ushbu xukdan oʻtadi. |
on_web_hello | Dastlabki HTTP Host/TLS SNI tekshiruvi tugagandan soʻng, ulanish yoki dastlabki maʼlumotlarni qayta ishlashdan oldin. |
on_web_data | Keyingi mijoz maʼlumotlari yoki server maʼlumotlari oʻqilgandan soʻng, uzatishdan oldin. |
DNS amallari
v2 DNS xuki muvaffaqiyatli yakunlanganda 0 qaytaradi va result->action qiymatini oʻrnatadi.
| Amal | Natijasi |
|---|---|
MUDFISH_DNS_CONTINUE | Keyingi modul va standart ishlovni davom ettiradi. |
MUDFISH_DNS_ALLOW | Joriy xuk zanjirini yakunlaydi va odatiy DNS qidiruvini davom ettiradi yoki tanlangan javobni qaytaradi. |
MUDFISH_DNS_BLOCK | REFUSED xatosini qaytaradi. |
MUDFISH_DNS_DROP | DNS javobini yubormasdan bekor qiladi (tashlab yuboradi). |
MUDFISH_DNS_ANSWER | Taqdim etilgan IPv4/IPv6 manzillari va TTL bilan javob yaratadi. |
MUDFISH_DNS_REPLACE | Modul tomonidan taqdim etilgan toʻliq DNS sim (wire) formatidagi javobdan foydalanadi. |
v2 DNS xukida amal konstantalarini toʻgʻridan-toʻgʻri qaytarmang. Agar funksiya 0 dan boshqa qiymat qaytarsa yoki natija yaroqsiz boʻlsa, SERVFAIL yuzaga keladi. ALLOW faqat joriy xuk zanjirini yakunlaydi, biroq domen qoidalari, aloqa usuliga ruxsat va sertifikat tekshiruvini chetlab oʻtmaydi. DROPdan tashqari barcha soʻrov natijalari javob xukidan ham oʻtadi.
Veb-xuklar toʻgʻridan-toʻgʻri MUDFISH_DNS_CONTINUE yoki MUDFISH_DNS_REJECT qaytaradi. Veb-soʻrov rad etilsa, ulanish tugatiladi. Veb-xuklardan foydalanish uchun veb-himoya yoqilgan boʻlishi kerak va deshifrlangan HTTPS tarkibi taqdim etilmaydi.
Buferlar, oqimlar va kesh
Kiruvchi hodisalar va buferlar faqat oʻqish uchun boʻlib, faqat qayta chaqiruv (callback) bajarilishi davomida amal qiladi. Oʻrinbosar javoblar modulga tegishli boʻlgan xotiradan foydalanishi kerak hamda mazkur modulning keyingi chaqiruvigacha yoki toʻxtatilish vaqtigacha yaroqli boʻlishi zarur. Stek xotirasidan yoki hodisadan olingan koʻrsatkichlarni (pointer) qaytarmang. Oʻrinbosar javobning DNS ID, opcode va savol (question) qismi dastlabki soʻrovga mos kelishi kerak. Bitta nusxaning qayta chaqiruvlari ketma-ket bajariladi, biroq turli oqimlardan chaqirilishi mumkin. Qayta chaqiruvlarni tez bajaring va ABI chegarasidan tashqariga istisnolarni (exceptions) chiqarmang.
Yaratilgan, almashtirilgan, toʻsilgan yoki tashlab yuborilgan natijalar xost keshida saqlanmaydi. Keshdagi javob almashtirilsa ham, asl kesh yozuvi oʻzgarmaydi. Xost oʻrinbosar javobning AD bayrogʻini tozalaydi va DNSSEC tekshiruvi yoki qayta imzolashni amalga oshirmaydi. Imzolangan maʼlumotlarni oʻzgartiruvchi modul buzilgan imzolarni oʻzi boshqarishi kerak.
Misol va sarlavha fayli
Quyidagi sahifalarda toʻliq misol kodi va kerakli sarlavha fayli mavjud. Mudfish DNS manba kodlarini alohida yuklab olish shart emas.
| Fayl | Tarkibi |
|---|---|
| policy.c — DNS siyosati namunasi | DNS soʻrovlariga ruxsat berish, toʻsish, tashlab yuborish, IP javobini yaratish, javob manzili va TTL ni oʻzgartirish. Linux tizimida kompilyatsiya va sinash buyruqlarini ham oʻz ichiga oladi. |
| mudfish_dns_module.h — modul sarlavhasi | ABI deklaratsiyalari, xuk signaturalari, amal konstantalari, bufer egaligi qoidalari. |
Kompilyatsiyadan oldin policy.c va mudfish_dns_module.h fayllarini bitta katalogga yuklab oling. Misoldagi kompilyatsiya buyrugʻi Linux .so kutubxonasini hosil qiladi.