Hoppa till huvudinnehåll

Inbyggda moduler för utvecklare

Moduler behövs inte för vanlig användning. Denna guide är för utvecklare och administratörer som vill utöka Windows- eller Linux-tjänsten med inbyggda bibliotek. Moduler körs inuti tjänsten med dess behörigheter. Installera endast betrodd kod och låt administratören äga modulfiler, beroenden och konfigurationsfiler.

Ladda en modul​

Tjänsten läser *.conf i katalogen modules.d bredvid konfigurationsfilen. Standardplatserna är:

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

Ange en absolut bibliotekssökväg per rad. Till exempel kan /etc/mudfish-dns/modules.d/10-policy.conf innehålla:

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

Filer läses i filnamnsordning och rader i ordning inom varje fil. Tomma rader och rader som börjar med # ignoreras. Använd inte citattecken runt sökvägar, miljövariabler eller kommentarer efter en sökväg; de tolkas inte. Även på Windows anges hela absoluta sökvägen direkt, inklusive eventuella blanksteg.

Starta om tjänsten efter att en modul lagts till, ändrats eller tagits bort. På Linux:

sudo systemctl restart mudfish-dns.service

På Windows startar du om tjänsten Mudfish DNS i tjänstehanteraren. Appens Starta DNS, Stoppa DNS och Tillämpa inställningar laddar inte om moduler. Tjänsten startar inte om konfigurationsfiler inte kan läsas, sökvägar är felaktiga eller laddning eller initiering misslyckas. En saknad eller tom modulkatalog är tillåten.

Under utveckling kan --module upprepas för att ladda bibliotek i argumentordning. Detta ersätter automatisk laddning från modules.d. --config FILE ändrar även platsen för modulkatalogen bredvid konfigurationsfilen. --restore-dns återställer utan att ladda moduler.

Implementera hookar​

Läs headerfilen mudfish_dns_module.h eller hämta mudfish_dns_module.h. Den definierar strukturer, hookar, åtgärder och regler för datalivslängd. Guiden använder C ABI v2. Exportera mudfish_dns_module_init_v2() och kontrollera MUDFISH_DNS_MODULE_ABI_V2 och den angivna strukturstorleken innan du fyller i hookarna. Returnera 0 vid lyckad initiering.

HookAnropas
on_dns_queryEfter att en parsad fråga accepterats, före cachesökning eller vidarebefordran.
on_dns_responseEfter att ett svar valts, före cachning eller retur till klienten. Även cachade svar går genom denna hook.
on_web_helloEfter den första HTTP Host/TLS SNI-kontrollen, före anslutning eller behandling av inledande data.
on_web_dataEfter läsning av efterföljande klient- eller serverdata, före vidarebefordran.

DNS-åtgärder​

DNS-hookar i v2 returnerar 0 vid framgång och anger åtgärden i result->action.

ÅtgärdEffekt
MUDFISH_DNS_CONTINUEFortsätt med nästa modul och normal behandling.
MUDFISH_DNS_ALLOWAvsluta aktuell hookkedja och fortsätt vanlig DNS-uppslagning eller returnera valt svar.
MUDFISH_DNS_BLOCKReturnera REFUSED.
MUDFISH_DNS_DROPKasta förfrågan utan DNS-svar.
MUDFISH_DNS_ANSWERSkapa ett svar med angiven IPv4/IPv6-adress och TTL.
MUDFISH_DNS_REPLACEAnvänd modulens kompletta DNS-svar i wire-format.

Returnera inte åtgärdskonstanten direkt från en v2 DNS-hook. Ett returvärde som inte är 0 eller ett ogiltigt resultat ger SERVFAIL. ALLOW avslutar endast aktuell hookkedja och kringgår inte domänregler, transporttillstånd eller certifikatkontroller. Alla frågeresultat utom DROP går även genom svarshookarna.

Webbhookar returnerar MUDFISH_DNS_CONTINUE eller MUDFISH_DNS_REJECT direkt. Avvisning avslutar anslutningen. Webbskydd måste vara aktivt för webbhookar, och dekrypterat HTTPS-innehåll tillhandahålls inte.

Buffertar, trådar och cache​

Indatahändelser och buffertar är skrivskyddade och giltiga endast under callback-anropet. Ersättningssvar måste använda minne som modulen äger och vara giltiga till modulens nästa callback eller avslutning. Returnera inte stackminne eller pekare lånade från händelsen. DNS-ID, opcode och fråga i ersättningssvaret måste motsvara originalfrågan. Callback-anrop för en instans körs sekventiellt men kan ske på olika trådar. Avsluta dem snabbt och låt inte undantag passera ABI-gränsen.

Genererade, ersatta, blockerade eller kastade resultat lagras inte i värdens cache. Att ersätta ett cachat svar ändrar inte den ursprungliga cacheposten. Värden rensar AD-flaggan i ersättningssvar och varken validerar eller signerar om DNSSEC. Moduler som ändrar signerade data måste själva hantera ogiltigförklarade signaturer.

Exempel och headerfil​

Följande sidor innehåller hela exemplet och headerfilen. Du behöver inte hämta Mudfish DNS källkod separat.

FilInnehåll
policy.c – DNS-policyexempelTillåt, blockera eller kasta frågor, skapa IP-svar samt ändra svaradresser och TTL. Innehåller bygg- och testkommandon för Linux.
mudfish_dns_module.h – modulheaderABI-deklarationer, hooksignaturer, åtgärdskonstanter och buffertägarskap.

Hämta policy.c och mudfish_dns_module.h till samma katalog före byggning. Exempelkommandot skapar ett Linux-bibliotek i .so-format.