Hop til hovedindhold

Native moduler (til udviklere)

Moduler er ikke nødvendige til almindelig brug. Denne vejledning er til udviklere og administratorer, som vil udvide Windows- eller Linux-tjenesten med native biblioteker. Moduler kører inde i tjenesten med dens rettigheder. Installer kun kode, du stoler på, og sørg for, at modulfiler, afhængigheder og konfigurationsfiler ejes af administratoren.

Indlæs et modul​

Tjenesten læser *.conf-filer fra mappen modules.d ved siden af konfigurationsfilen. Standardplaceringerne er følgende.

OperativsystemModulkonfigurationBiblioteksformat
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Skriv én absolut bibliotekssti pr. linje i hver fil. For eksempel kan /etc/mudfish-dns/modules.d/10-policy.conf indeholde følgende.

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

Filer læses i filnavnsrækkefølge, og linjer læses i rækkefølge inden for filen. Tomme linjer og linjer, der starter med #, ignoreres. Brug ikke anførselstegn omkring stier, miljøvariabler eller kommentarer sidst på linjen; de fortolkes ikke. På Windows skal hele den absolutte sti også skrives direkte i filen, inklusive eventuelle mellemrum.

Genstart tjenesten efter tilføjelse, ændring eller fjernelse af moduler. Brug følgende kommando på Linux.

sudo systemctl restart mudfish-dns.service

På Windows skal du genstarte tjenesten Mudfish DNS i tjenesteadministrationen. Appens Start DNS, Stop DNS og Anvend indstillinger genindlæser ikke moduler. Tjenesten starter ikke, hvis konfigurationsfiler ikke kan læses, stier er forkerte, eller indlæsning eller initialisering fejler. En manglende eller tom modulmappe er tilladt.

Under udvikling kan du gentage argumentet --module for at indlæse biblioteker i argumentrækkefølge. Dette erstatter automatisk indlæsning fra modules.d. --config FILE ændrer også placeringen af modulmappen ved siden af konfigurationsfilen. --restore-dns udfører gendannelse uden at indlæse moduler.

Implementér hooks​

Læs headeren mudfish_dns_module.h, eller download mudfish_dns_module.h. Headeren definerer strukturer, hooks, handlinger og regler for datalevetid. Denne vejledning bruger C ABI v2. Eksportér mudfish_dns_module_init_v2(), og kontrollér MUDFISH_DNS_MODULE_ABI_V2 samt den overførte strukturstørrelse, før du udfylder hooks. Returnér 0 ved vellykket initialisering.

HookTidspunkt
on_dns_queryEfter at den parsede forespørgsel er accepteret, før cacheopslag eller videresendelse.
on_dns_responseEfter valg af svar, før lagring i cache eller returnering til klienten. Cachede svar passerer også denne hook.
on_web_helloEfter indledende kontrol af HTTP Host/TLS SNI, før forbindelse eller behandling af de indledende data.
on_web_dataEfter læsning af efterfølgende klient- eller serverdata, før videresendelse.

DNS-handlinger​

DNS-hooks i v2 returnerer 0 ved succes og sætter result->action.

HandlingVirkning
MUDFISH_DNS_CONTINUEFortsætter til næste modul og normal behandling.
MUDFISH_DNS_ALLOWAfslutter den aktuelle hook-kæde og fortsætter normalt DNS-opslag eller returnerer det valgte svar.
MUDFISH_DNS_BLOCKReturnerer REFUSED.
MUDFISH_DNS_DROPKasserer uden at sende et DNS-svar.
MUDFISH_DNS_ANSWERDanner et svar med den angivne IPv4/IPv6-adresse og TTL.
MUDFISH_DNS_REPLACEBruger modulets komplette DNS-svar i wire-format.

Returnér ikke handlingskonstanter direkte fra DNS-hooks i v2. En returværdi forskellig fra 0 eller et ugyldigt resultat giver SERVFAIL. ALLOW afslutter kun den aktuelle hook-kæde og omgår ikke domæneregler, tilladelser til transportmetoder eller certifikatkontrol. Alle forespørgselsresultater undtagen DROP passerer også svarhooks.

Webhooks returnerer MUDFISH_DNS_CONTINUE eller MUDFISH_DNS_REJECT direkte. Afvisning af en webanmodning lukker forbindelsen. Webbeskyttelse skal være aktiveret for at bruge webhooks, og dekrypteret HTTPS-indhold stilles ikke til rådighed.

Buffere, tråde og cache​

Inputhændelser og buffere er skrivebeskyttede og kun gyldige under callbacken. Erstatningssvar skal bruge hukommelse, som modulet ejer, og være gyldige indtil næste callback på samme modul eller dets afslutning. Returnér ikke stakhukommelse eller lånte pointere fra hændelsen. DNS-id, opcode og spørgsmål i erstatningssvaret skal svare til den oprindelige forespørgsel. Callbacks for én instans udføres sekventielt, men kan blive kaldt fra forskellige tråde. Afslut callbacks hurtigt, og lad ikke undtagelser krydse ABI-grænsen.

Genererede, erstattede, blokerede og kasserede resultater gemmes ikke i værtens cache. Erstatning af et cachet svar ændrer ikke den oprindelige cachepost. Værten rydder AD-flaget i erstatningssvar og udfører hverken DNSSEC-validering eller ny signering. Moduler, der ændrer signerede data, skal selv håndtere ugyldiggjorte signaturer.

Eksempel og header​

De følgende sider indeholder den komplette eksempelkode og den nødvendige header. Du behøver ikke hente Mudfish DNS-kildetræet separat.

FilIndhold
policy.c – eksempel på DNS-politikTillad, blokér eller kassér DNS-forespørgsler, generér IP-svar, og ændr svaradresser og TTL. Indeholder også Linux-kommandoer til bygning og test.
mudfish_dns_module.h – modulheaderABI-deklarationer, hook-signaturer, handlingskonstanter og regler for bufferejerskab.

Download policy.c og mudfish_dns_module.h til samme mappe før bygning. Eksemplets byggekommando genererer et Linux-bibliotek i .so-format.