Нативни модули (за програмере)
За уобичајену употребу модули нису потребни. Овај водич је намењен програмерима и администраторима који желе да нативним библиотекама прошире 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 садржај није доступан.