Пређи на главни садржај

Нативни модули (за програмере)

За уобичајену употребу модули нису потребни. Овај водич је намењен програмерима и администраторима који желе да нативним библиотекама прошире Windows или Linux услугу. Модули раде унутар услуге, са њеним овлашћењима. Инсталирајте само поуздан код и обезбедите да датотеке модула, зависности и конфигурације остану у власништву администратора.

Учитавање модула​

Услуга чита *.conf датотеке из директоријума modules.d поред конфигурационе датотеке. Подразумеване локације су следеће.

Оперативни системЛокација конфигурације модулаФормат библиотеке
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 радње​

DNS куке v2 враћају 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 формату који је дао модул.

Не враћајте константу радње непосредно из DNS куке v2. Ненулта повратна вредност или неважећи резултат изазива SERVFAIL. ALLOW завршава само тренутни ланац кука и не заобилази правила домена, дозволе транспорта или проверу сертификата. Резултати упита осим DROP пролазе и кроз куке одговора.

Веб-куке непосредно враћају MUDFISH_DNS_CONTINUE или MUDFISH_DNS_REJECT. Одбијање веб-захтева затвара везу. За веб-куке мора бити укључена веб-заштита; дешифровани HTTPS садржај није доступан.

Бафери, нити и кеш​

Улазни догађаји и бафери су само за читање и важе само током повратног позива. Заменски одговор мора користити меморију у власништву модула и остати важећи до следећег повратног позива тог модула или његовог гашења. Не враћајте меморију са стека или показиваче позајмљене из догађаја. DNS ID, opcode и питање заменског одговора морају одговарати изворном упиту. Позиви једне инстанце извршавају се редом, али могу долазити са различитих нити. Позиви треба да се брзо заврше и не смеју пропуштати изузетке преко ABI границе.

Генерисани, замењени, блокирани и одбачени резултати не чувају се у кешу домаћина. Замена кешираног одговора не мења изворну ставку кеша. Домаћин уклања AD заставицу заменског одговора и не проверава DNSSEC нити поново потписује податке. Модул који мења потписане податке мора сам обрадити потписе који су постали неважећи.

Пример и заглавље​

Следеће странице садрже цео изворни пример и потребно заглавље. Није потребно засебно преузимати стабло изворног кода Mudfish DNS-а.

ДатотекаСадржај
policy.c — пример DNS политикеДозвољавање, блокирање и одбацивање DNS упита, генерисање IP одговора, промена адресе и TTL-а одговора. Укључује Linux команде за изградњу и тестирање.
mudfish_dns_module.h — заглавље модулаABI декларације, потписи кука, константе радњи и правила власништва бафера.

Пре изградње преузмите policy.c и mudfish_dns_module.h у исти директоријум. Команде примера праве Linux .so библиотеку.