Preskoči na glavno vsebino

Izvorni moduli (za razvijalce)

Za običajno uporabo moduli niso potrebni. Ta vodnik je namenjen razvijalcem in skrbnikom, ki želijo z izvornimi knjižnicami razširiti storitev v Windows ali Linuxu. Moduli se izvajajo znotraj storitve z njenimi dovoljenji. Nameščajte samo zaupanja vredno kodo in poskrbite, da so datoteke modulov, odvisnosti in nastavitev v lasti skrbnika.

Nalaganje modula​

Storitev bere datoteke *.conf iz imenika modules.d ob nastavitveni datoteki. Privzete lokacije so naslednje.

Operacijski sistemLokacija nastavitev modulovOblika knjižnice
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

V vsako datoteko vpišite absolutne poti knjižnic, po eno v vrstico. Na primer vsebina /etc/mudfish-dns/modules.d/10-policy.conf je:

/usr/lib/mudfish-dns/modules/policy.so

Datoteke se berejo po imenih, znotraj vsake pa po vrstnem redu vrstic. Prazne vrstice in vrstice, ki se začnejo z #, se prezrejo. Poti ne obdajte z narekovaji in ne uporabljajte okoljskih spremenljivk ali komentarjev na koncu vrstice, saj se ti zapisi ne razlagajo. Tudi v Windows v datoteko vnesite celotno absolutno pot, vključno s presledki.

Po dodajanju, spremembi ali odstranitvi modula znova zaženite storitev. V Linuxu uporabite:

sudo systemctl restart mudfish-dns.service

V Windows v upravljanju storitev znova zaženite storitev Mudfish DNS. Zaženi DNS, Ustavi DNS in Uporabi nastavitve v aplikaciji modulov ne naložijo znova. Če nastavitvene datoteke ni mogoče prebrati, je pot napačna ali pride do napake nalaganja oziroma inicializacije, se storitev ne zažene. Manjkajoč ali prazen imenik modulov je dovoljen.

Med razvojem lahko večkrat navedete argument --module, da knjižnice naložite po vrstnem redu argumentov. To nadomesti samodejno nalaganje modules.d. --config FILE spremeni tudi lokacijo imenika modulov ob nastavitveni datoteki. --restore-dns izvede obnovitev brez nalaganja modulov.

Implementacija kavljev​

Preberite glavo mudfish_dns_module.h ali prenesite mudfish_dns_module.h. Glava določa strukture, kavlje, dejanja in pravila življenjske dobe podatkov. Ta vodnik uporablja C ABI v2. Izvozite mudfish_dns_module_init_v2() in pred vnosom kavljev preverite MUDFISH_DNS_MODULE_ABI_V2 ter posredovano velikost strukture. Ob uspešni inicializaciji vrnite 0.

KaveljTrenutek klica
on_dns_queryPo sprejemu razčlenjene poizvedbe, pred iskanjem v predpomnilniku ali posredovanjem.
on_dns_responsePo izbiri odgovora, pred shranjevanjem v predpomnilnik ali vračanjem odjemalcu. Skozi ta kavelj gredo tudi predpomnjeni odgovori.
on_web_helloPo začetnem preverjanju HTTP Host/TLS SNI, pred povezavo ali obdelavo začetnih podatkov.
on_web_dataPo branju nadaljnjih podatkov odjemalca ali podatkov strežnika, pred posredovanjem.

Dejanja DNS​

Kavlji DNS v2 ob uspehu vrnejo 0 in nastavijo result->action.

DejanjeUčinek
MUDFISH_DNS_CONTINUENadaljuje naslednji modul in običajno obdelavo.
MUDFISH_DNS_ALLOWKonča trenutno verigo kavljev in nadaljuje običajno poizvedbo DNS ali vrne izbrani odgovor.
MUDFISH_DNS_BLOCKVrne REFUSED.
MUDFISH_DNS_DROPZavrže brez pošiljanja odgovora DNS.
MUDFISH_DNS_ANSWERUstvari odgovor s podanim naslovom IPv4/IPv6 in TTL.
MUDFISH_DNS_REPLACEUporabi celoten odgovor DNS v žični obliki, ki ga poda modul.

Iz kavljev DNS v2 ne vračajte neposredno konstant dejanj. Če funkcija vrne neničelno vrednost ali rezultat ni veljaven, nastane SERVFAIL. ALLOW konča samo trenutno verigo kavljev in ne obide pravil domen, dovoljenj načinov prenosa ali preverjanja potrdil. Rezultati poizvedb razen DROP gredo tudi skozi odzivne kavlje.

Spletni kavlji neposredno vrnejo MUDFISH_DNS_CONTINUE ali MUDFISH_DNS_REJECT. Zavrnitev spletne zahteve prekine povezavo. Za uporabo spletnih kavljev mora biti spletna zaščita vklopljena; dešifrirana vsebina HTTPS ni na voljo.

Medpomnilniki, niti in predpomnjenje​

Vhodni dogodki in medpomnilniki so samo za branje in veljajo samo med izvajanjem povratnega klica. Nadomestni odgovor mora uporabljati pomnilnik v lasti modula ter ostati veljaven do naslednjega povratnega klica tega modula ali njegovega uničenja. Ne vračajte pomnilnika na skladu ali kazalcev, izposojenih iz dogodka. DNS ID, opcode in vprašanje nadomestnega odgovora se morajo ujemati z izvirno poizvedbo. Povratni klici ene instance se izvajajo zaporedno, vendar so lahko klicani iz različnih niti. Končajo naj se hitro in ne smejo širiti izjem prek meje ABI.

Ustvarjeni, zamenjani, blokirani ali zavrženi rezultati se ne shranijo v predpomnilnik gostitelja. Zamenjava predpomnjenega odgovora ne spremeni izvirnega vnosa v predpomnilniku. Gostitelj počisti zastavico AD nadomestnih odgovorov ter ne preverja DNSSEC in ne podpisuje znova. Modul, ki spremeni podpisane podatke, mora sam obravnavati neveljavne podpise.

Primer in glava​

Spodnji strani vsebujeta celotno izvorno kodo primera in potrebno glavo. Izvornega drevesa Mudfish DNS ni treba posebej prenesti.

DatotekaVsebina
policy.c — primer pravil DNSDovoljevanje, blokiranje in zavračanje poizvedb DNS, ustvarjanje odgovorov IP ter spreminjanje naslovov in TTL v odgovorih. Vključuje ukaze za gradnjo in preizkus v Linuxu.
mudfish_dns_module.h — glava modulaDeklaracije ABI, podpisi kavljev, konstante dejanj in pravila lastništva medpomnilnikov.

Pred gradnjo prenesite policy.c in mudfish_dns_module.h v isti imenik. Ukaz za gradnjo primera ustvari knjižnico .so za Linux.