Natiivmoodulid (arendajatele)
Tavakasutuseks pole mooduleid vaja. See juhend on arendajatele ja administraatoritele, kes soovivad Windowsi või Linuxi teenuse funktsioone natiivteegiga laiendada. Moodulid töötavad teenuse sees selle õigustega. Paigaldage ainult usaldusväärset koodi ning hoidke mooduli-, sõltuvus- ja seadistusfailid administraatori omandis.
Mooduli laadimine
Teenus loeb seadistusfaili kõrval olevast modules.d kataloogist *.conf faile. Vaikeasukohad on järgmised.
| Operatsioonisüsteem | Mooduli seadistuse asukoht | Teegi vorming |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
Kirjutage igasse faili teekide absoluutsed teed, üks rea kohta. Näiteks /etc/mudfish-dns/modules.d/10-policy.conf sisu on järgmine.
/usr/lib/mudfish-dns/modules/policy.so
Faile loetakse failinimede järjekorras ja iga faili sees ridade järjekorras. Tühje ridu ja # märgiga algavaid ridu eiratakse. Ärge pange teid jutumärkidesse ega kasutage keskkonnamuutujaid või realõpukommentaare, sest neid ei tõlgendata. Ka Windowsis kirjutage faili täielik absoluutne tee, sealhulgas tühikud.
Pärast mooduli lisamist, muutmist või eemaldamist taaskäivitage teenus. Linuxis kasutage järgmist käsku.
sudo systemctl restart mudfish-dns.service
Windowsis taaskäivitage teenusehalduris teenus Mudfish DNS. Rakenduse valikud Käivita DNS, Peata DNS ja Rakenda seaded ei laadi mooduleid uuesti. Kui seadistusfaili ei saa lugeda, tee on vale või laadimisel ja lähtestamisel tekib viga, teenus ei käivitu. Moodulikataloogi puudumine või tühjus on lubatud.
Arendamise ajal saate anda korduvalt argumendi --module, et laadida teegid argumentide järjekorras. See asendab modules.d automaatse laadimise. --config FILE muudab ka seadistusfaili kõrval oleva moodulikataloogi asukohta. --restore-dns teeb taastamise mooduleid laadimata.
Haakide rakendamine
Lugege päist mudfish_dns_module.h või laadige mudfish_dns_module.h alla. Päis määratleb mooduli struktuurid, haagid, toimingud ja andmete eluea reeglid. Juhend kasutab C ABI v2. Eksportige mudfish_dns_module_init_v2() ning kontrollige enne haakide täitmist väärtust MUDFISH_DNS_MODULE_ABI_V2 ja edastatud struktuuri suurust. Edukal lähtestamisel tagastage 0.
| Haak | Kutsumise aeg |
|---|---|
on_dns_query | Pärast parsitud päringu vastuvõtmist, enne vahemälu kontrolli või edastamist. |
on_dns_response | Pärast vastuse valimist, enne vahemällu salvestamist või kliendile tagastamist. Ka vahemälust võetud vastused läbivad selle haagi. |
on_web_hello | Pärast esialgset HTTP Host/TLS SNI kontrolli, enne ühendamist või algandmete töötlemist. |
on_web_data | Pärast järgnevate kliendi- või serveriandmete lugemist, enne edastamist. |
DNS-toimingud
v2 DNS-haagid tagastavad õnnestumisel 0 ja määravad välja result->action.
| Toiming | Mõju |
|---|---|
MUDFISH_DNS_CONTINUE | Jätkab järgmise mooduli ja tavapärase töötlusega. |
MUDFISH_DNS_ALLOW | Lõpetab praeguse haagiahela ja jätkab tavalist DNS-päringut või tagastab valitud vastuse. |
MUDFISH_DNS_BLOCK | Tagastab REFUSED. |
MUDFISH_DNS_DROP | Hülgab päringu DNS-vastust saatmata. |
MUDFISH_DNS_ANSWER | Loob vastuse antud IPv4/IPv6 aadressi ja TTL-iga. |
MUDFISH_DNS_REPLACE | Kasutab mooduli antud täielikku DNS-i võrguprotokolli vormingus vastust. |
Ärge tagastage v2 DNS-haagist otse toimingukonstanti. Kui funktsioon tagastab nullist erineva väärtuse või tulemus pole kehtiv, tekib SERVFAIL. ALLOW lõpetab ainult praeguse haagiahela ega lähe mööda domeenireeglitest, ühendusviisi lubade kontrollist või sertifikaadi kontrollist. Kõik päringutulemused peale DROP läbivad ka vastusehaagid.
Veebihaagid tagastavad otse MUDFISH_DNS_CONTINUE või MUDFISH_DNS_REJECT. Veebipäringu tagasilükkamine sulgeb ühenduse. Veebihaakide kasutamiseks peab veebikaitse olema lubatud; dekrüptitud HTTPS-sisu ei pakuta.
Puhvrid, lõimed ja vahemälu
Sisendsündmused ja puhvrid on kirjutuskaitstud ning kehtivad ainult tagasikutse ajal. Asendusvastus peab kasutama mooduli omandis olevat mälu, mis säilib selle mooduli järgmise tagasikutse või lõpetamiseni. Ärge tagastage pinumälu ega sündmuselt laenatud viita. Asendusvastuse DNS ID, opcode ja küsimus peavad algse päringuga ühtima. Ühe eksemplari tagasikutsed töötavad järjestikku, kuid neid võidakse kutsuda eri lõimedest. Lõpetage tagasikutsed kiiresti ning ärge levitage erandeid üle ABI piiri.
Loodud, asendatud, blokeeritud ja hüljatud tulemusi hosti vahemällu ei salvestata. Vahemälust võetud vastuse asendamine ei muuda algset vahemälukirjet. Host eemaldab asendusvastuselt AD-lipu ega kontrolli või allkirjasta DNSSEC-i uuesti. Allkirjastatud andmeid muutev moodul peab kehtetuks muutunud allkirju ise käsitlema.
Näide ja päis
Järgmised lehed sisaldavad täielikku näidislähtekoodi ja vajalikku päist. Mudfish DNS-i lähtekoodipuud pole vaja eraldi alla laadida.
| Fail | Sisu |
|---|---|
| policy.c — DNS-poliitika näide | DNS-päringute lubamine, blokeerimine, hülgamine, IP-vastuste loomine ning vastuse aadressi ja TTL-i muutmine. Sisaldab Linuxi ehitus- ja testimiskäske. |
| mudfish_dns_module.h — mooduli päis | ABI deklaratsioonid, haakide signatuurid, toimingukonstandid ja puhvri omandi reeglid. |
Enne ehitamist laadige policy.c ja mudfish_dns_module.h samasse kataloogi. Näite ehituskäsk loob Linuxi .so teegi.