Liigu põhisisu juurde

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üsteemMooduli seadistuse asukohtTeegi 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.

HaakKutsumise aeg
on_dns_queryPärast parsitud päringu vastuvõtmist, enne vahemälu kontrolli või edastamist.
on_dns_responsePärast vastuse valimist, enne vahemällu salvestamist või kliendile tagastamist. Ka vahemälust võetud vastused läbivad selle haagi.
on_web_helloPärast esialgset HTTP Host/TLS SNI kontrolli, enne ühendamist või algandmete töötlemist.
on_web_dataPä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.

ToimingMõju
MUDFISH_DNS_CONTINUEJätkab järgmise mooduli ja tavapärase töötlusega.
MUDFISH_DNS_ALLOWLõpetab praeguse haagiahela ja jätkab tavalist DNS-päringut või tagastab valitud vastuse.
MUDFISH_DNS_BLOCKTagastab REFUSED.
MUDFISH_DNS_DROPHülgab päringu DNS-vastust saatmata.
MUDFISH_DNS_ANSWERLoob vastuse antud IPv4/IPv6 aadressi ja TTL-iga.
MUDFISH_DNS_REPLACEKasutab 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.

FailSisu
policy.c — DNS-poliitika näideDNS-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äisABI 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.