Vietiniai moduliai (kūrėjams)
Įprastam naudojimui modulių nereikia. Šis vadovas skirtas kūrėjams ir administratoriams, norintiems vietinėmis bibliotekomis išplėsti Windows arba Linux paslaugos funkcijas. Moduliai vykdomi paslaugos viduje su jos teisėmis. Diekite tik patikimą kodą; modulių, priklausomybių ir konfigūracijos failų savininkas turi būti administratorius.
Modulio įkėlimas
Paslauga skaito *.conf failus kataloge modules.d, esančiame šalia konfigūracijos failo. Numatytosios vietos:
| Operacinė sistema | Modulių konfigūracijos vieta | Bibliotekos formatas |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
Kiekviename faile rašykite po vieną absoliutų bibliotekos kelią eilutėje. Pavyzdžiui, /etc/mudfish-dns/modules.d/10-policy.conf turinys:
/usr/lib/mudfish-dns/modules/policy.so
Failai skaitomi vardų tvarka, o kiekvieno failo eilutės – jų tvarka. Tuščios eilutės ir eilutės, prasidedančios #, ignoruojamos. Neapgaubkite kelių kabutėmis, nenaudokite aplinkos kintamųjų ar eilutės pabaigos komentarų: tokios išraiškos neinterpretuojamos. Windows taip pat įrašykite visą absoliutų kelią, net jei jame yra tarpų.
Pridėję, pakeitę ar pašalinę modulį paleiskite paslaugą iš naujo. Linux komanda:
sudo systemctl restart mudfish-dns.service
Windows paslaugų valdymo lange paleiskite Mudfish DNS paslaugą iš naujo. Programėlės Paleisti DNS, Sustabdyti DNS ir Taikyti nustatymus modulių neperkrauna. Jei konfigūracijos failas neperskaitomas, kelias neteisingas ar įkeliant bei inicijuojant kyla klaida, paslauga nepasileidžia. Modulių katalogo gali nebūti arba jis gali būti tuščias.
Kuriant galima kelis kartus nurodyti --module, kad bibliotekos būtų įkeltos argumentų tvarka. Tai pakeičia automatinį modules.d įkėlimą. --config FILE taip pat pakeičia šalia konfigūracijos esančio modulių katalogo vietą. --restore-dns atlieka atkūrimą neįkeldamas modulių.
Atgalinio iškvietimo funkcijų įgyvendinimas
Perskaitykite mudfish_dns_module.h antraštę arba atsisiųskite mudfish_dns_module.h. Ji apibrėžia struktūras, iškvietimo funkcijas, veiksmus ir duomenų gyvavimo taisykles. Šiame vadove naudojamas C ABI v2. Eksportuokite mudfish_dns_module_init_v2() ir prieš užpildydami funkcijų laukus patikrinkite MUDFISH_DNS_MODULE_ABI_V2 bei perduotos struktūros dydį. Sėkmingai inicijavę grąžinkite 0.
| Funkcija | Kada iškviečiama |
|---|---|
on_dns_query | Priėmus išanalizuotą užklausą, prieš paiešką talpykloje ar persiuntimą. |
on_dns_response | Pasirinkus atsakymą, prieš išsaugant talpykloje ar grąžinant klientui. Taip pat taikoma talpykloje esantiems atsakymams. |
on_web_hello | Patikrinus pradinį HTTP Host/TLS SNI, prieš jungiantis ar apdorojant pradinius duomenis. |
on_web_data | Perskaičius paskesnius kliento ar serverio duomenis, prieš persiunčiant. |
DNS veiksmai
v2 DNS funkcijos sėkmės atveju grąžina 0 ir nustato result->action.
| Veiksmas | Poveikis |
|---|---|
MUDFISH_DNS_CONTINUE | Tęsiamas kitas modulis ir įprastas apdorojimas. |
MUDFISH_DNS_ALLOW | Baigiama dabartinė funkcijų grandinė ir tęsiama įprasta DNS užklausa arba grąžinamas pasirinktas atsakymas. |
MUDFISH_DNS_BLOCK | Grąžinamas REFUSED. |
MUDFISH_DNS_DROP | Atmetama nesiunčiant DNS atsakymo. |
MUDFISH_DNS_ANSWER | Sukuriamas atsakymas su pateiktu IPv4/IPv6 adresu ir TTL. |
MUDFISH_DNS_REPLACE | Naudojamas modulio pateiktas pilnas DNS perdavimo formato atsakymas. |
v2 DNS funkcijos neturi tiesiogiai grąžinti veiksmo konstantos. Jei grąžinama ne 0 arba rezultatas netinkamas, gaunamas SERVFAIL. ALLOW baigia tik dabartinę funkcijų grandinę ir neapeina domenų taisyklių, ryšio būdų leidimų ar sertifikatų patikros. Visų užklausų rezultatai, išskyrus DROP, taip pat pereina atsakymo funkcijas.
Žiniatinklio funkcijos tiesiogiai grąžina MUDFISH_DNS_CONTINUE arba MUDFISH_DNS_REJECT. Atmetus žiniatinklio užklausą ryšys nutraukiamas. Šioms funkcijoms reikia įjungtos žiniatinklio apsaugos; iššifruotas HTTPS turinys neteikiamas.
Buferiai, gijos ir talpykla
Įvesties įvykiai ir buferiai yra tik skaitomi ir galioja tik iškvietimo metu. Pakaitinis atsakymas turi naudoti moduliui priklausančią atmintį ir galioti iki kito to modulio iškvietimo arba užbaigimo. Negrąžinkite dėklo atminties ar iš įvykio pasiskolintos rodyklės. Pakaitinio atsakymo DNS ID, opcode ir klausimas turi sutapti su pradine užklausa. Vieno egzemplioriaus iškvietimai vykdomi nuosekliai, tačiau gali vykti skirtingose gijose. Užbaikite juos greitai ir neleiskite išimtims pereiti ABI ribos.
Sugeneruoti, pakeisti, užblokuoti ar atmesti rezultatai nesaugomi pagrindinės paslaugos talpykloje. Pakeitus talpyklos atsakymą pradinis jos įrašas nesikeičia. Pagrindinė paslauga pašalina pakaitinio atsakymo AD vėliavėlę ir netikrina DNSSEC bei nepasirašo iš naujo. Modulis, keičiantis pasirašytus duomenis, pats turi tvarkyti nebegaliojančius parašus.
Pavyzdys ir antraštė
Toliau pateiktuose puslapiuose yra visas pavyzdžio kodas ir reikalinga antraštė. Atskirai atsisiųsti Mudfish DNS šaltinio medžio nereikia.
| Failas | Turinys |
|---|---|
| policy.c – DNS politikos pavyzdys | Užklausų leidimas, blokavimas, atmetimas, IP atsakymo kūrimas, atsakymo adreso ir TTL keitimas. Taip pat Linux kompiliavimo ir testavimo komandos. |
| mudfish_dns_module.h – modulio antraštė | ABI deklaracijos, funkcijų parašai, veiksmų konstantos ir buferių nuosavybės taisyklės. |
Prieš kompiliuodami atsisiųskite policy.c ir mudfish_dns_module.h į tą patį katalogą. Pavyzdžio kompiliavimo komanda sukuria Linux .so biblioteką.