Төл модульдер (әзірлеушілер үшін)
Қарапайым пайдалану кезінде модульдер қажет емес. Бұл нұсқаулық төл кітапханалар арқылы 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-та Қызметтерді басқару (Services) бөлімінен 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 wire-format жауабын пайдаланады. |
v2 DNS хуктерінен әрекет тұрақтыларын тікелей қайтармаңыз. Егер функция 0-ден басқа мән
қайтарса немесе нәтиже жарамсыз болса, SERVFAIL қатесі туындайды. ALLOW тек ағымдағы
хуктер тізбегін ғана тоқтатады және домен ережелерін, байланыс түріне рұқсатты немесе сертификат тексерісін
айналып өтпейді. DROP әрекетінен басқа сұрау нәтижелері жауап хуктерінен де өтеді.
Веб хуктері MUDFISH_DNS_CONTINUE немесе MUDFISH_DNS_REJECT тұрақтысын тікелей қайтарады.
Веб-сұрау қабылданбағанда байланыс үзіледі. Веб хуктерін пайдалану үшін веб қорғауы қосулы
болуы керек және дешифрленген HTTPS мазмұны берілмейді.
Буферлер, ағындар және кэш
Кіріс оқиғалары мен буферлері тек оқуға арналған және кері шақыру (callback) орындалу барысында ғана жарамды. Ауыстыру жауаптары модульге тиесілі жадты пайдалануы керек және сол модульдің келесі кері шақыруына немесе жабылуына дейін сақталуы тиіс. Стек жадын немесе оқиғадан алынған уақытша сілтемелерді қайтармаңыз. Ауыстыру жауабының 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 кітапханасын жасайды.