Ugrás a fő tartalomhoz

Natív modulok fejlesztőknek

Normál használathoz nincs szükség modulokra. Ez az útmutató azoknak a fejlesztőknek és rendszergazdáknak szól, akik natív könyvtárakkal bővítenék a Windows- vagy Linux-szolgáltatást. A modulok a szolgáltatáson belül, annak jogosultságaival futnak. Csak megbízható kódot telepítsen; a modulfájlok, függőségek és konfigurációk maradjanak rendszergazdai tulajdonban.

Modul betöltése​

A szolgáltatás a konfigurációs fájl melletti modules.d könyvtárból olvassa a *.conf fájlokat. Alapértelmezett helyek:

Operációs rendszerModulkonfiguráció helyeKönyvtárformátum
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Fájlonként soronként egy könyvtár abszolút útvonalát adja meg. Például a /etc/mudfish-dns/modules.d/10-policy.conf tartalma:

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

Fájlnévsorrendben, fájlon belül sorsorrendben olvassa őket. Az üres és #-tel kezdődő sorokat kihagyja. Ne tegyen idézőjelet az útvonal köré, és ne használjon környezeti változókat vagy sorvégi megjegyzéseket: ezeket nem értelmezi. Windowson is a teljes abszolút útvonalat írja be, szóközökkel együtt.

Modul hozzáadása, módosítása vagy eltávolítása után indítsa újra a szolgáltatást. Linuxon:

sudo systemctl restart mudfish-dns.service

Windowson a szolgáltatáskezelőben indítsa újra a Mudfish DNS szolgáltatást. Az alkalmazás DNS indítása, DNS leállítása és Beállítások alkalmazása gombja nem tölti újra a modulokat. Ha a konfiguráció nem olvasható, az útvonal hibás, vagy betöltési/inicializálási hiba történik, a szolgáltatás nem indul el. A hiányzó vagy üres modulkönyvtár megengedett.

Fejlesztéskor a --module argumentum többszöri megadásával, az argumentumok sorrendjében tölthet be könyvtárakat. Ez kiváltja a modules.d automatikus betöltését. A --config FILE a konfiguráció melletti modulkönyvtár helyét is megváltoztatja. A --restore-dns modulbetöltés nélkül végzi a helyreállítást.

Hookok megvalósítása​

Olvassa el a mudfish_dns_module.h fejlécet, vagy töltse le a mudfish_dns_module.h fájlt. A fejléc meghatározza a struktúrákat, hookokat, műveleteket és adat-élettartamokat. Ez az útmutató C ABI v2-t használ. Exportálja a mudfish_dns_module_init_v2() függvényt, és a hookok kitöltése előtt ellenőrizze a MUDFISH_DNS_MODULE_ABI_V2 értéket és az átadott struktúraméretet. Sikeres inicializáláskor 0-t adjon vissza.

HookHívás időpontja
on_dns_queryA feldolgozott kérdés elfogadása után, gyorsítótár-keresés vagy továbbítás előtt.
on_dns_responseA válasz kiválasztása után, gyorsítótárba írás vagy kliensnek visszaadás előtt. A gyorsítótárból származó válaszok is áthaladnak rajta.
on_web_helloA kezdeti HTTP Host/TLS SNI vizsgálat után, kapcsolódás vagy kezdeti adatfeldolgozás előtt.
on_web_dataTovábbi kliens- vagy szerveradatok olvasása után, továbbítás előtt.

DNS-műveletek​

A v2 DNS-hookok siker esetén 0-t adnak vissza, és beállítják a result->action értékét.

MűveletHatás
MUDFISH_DNS_CONTINUEFolytatja a következő modullal és a normál feldolgozással.
MUDFISH_DNS_ALLOWBefejezi az aktuális hookláncot, és folytatja a normál DNS-feloldást vagy visszaadja a kiválasztott választ.
MUDFISH_DNS_BLOCKREFUSED választ ad.
MUDFISH_DNS_DROPDNS-válasz nélkül eldobja a kérést.
MUDFISH_DNS_ANSWERA megadott IPv4/IPv6-címmel és TTL-lel választ készít.
MUDFISH_DNS_REPLACEA modul által adott teljes DNS wire formátumú választ használja.

Ne közvetlenül a műveleti konstanst adja vissza a v2 DNS-hookból. Nem nulla visszatérés vagy érvénytelen eredmény SERVFAIL-t okoz. Az ALLOW csak az aktuális hookláncot fejezi be; nem kerüli meg a domainszabályokat, átviteli engedélyeket vagy tanúsítvány-ellenőrzést. A DROP kivételével a lekérdezések eredménye a válaszhookon is áthalad.

A webes hookok közvetlenül MUDFISH_DNS_CONTINUE vagy MUDFISH_DNS_REJECT értéket adnak vissza. Elutasításkor a kapcsolat lezárul. Használatukhoz aktív webvédelem szükséges; visszafejtett HTTPS-tartalom nem áll rendelkezésre.

Pufferek, szálak és gyorsítótár​

A bemeneti események és pufferek csak olvashatók, és csak a callback futása alatt érvényesek. A helyettesítő válasz memóriája a modul tulajdona legyen, és a modul következő callbackjéig vagy leállításáig maradjon érvényes. Ne adjon vissza veremmemóriát vagy az eseményből kölcsönzött mutatót. A helyettesítő válasz DNS ID-ja, opcode-ja és kérdése egyezzen az eredeti lekérdezéssel. Egy példány callbackjei sorban futnak, de eltérő szálakról is hívhatók. Röviden fussanak le, és ne terjesszenek kivételt az ABI-határon túl.

A generált, helyettesített, blokkolt vagy eldobott eredmények nem kerülnek a gazda gyorsítótárába. Egy gyorsítótáras válasz helyettesítése nem módosítja az eredeti bejegyzést. A gazda törli a helyettesítő válasz AD jelzőjét; DNSSEC-ellenőrzést vagy újraaláírást nem végez. Aláírt adatok módosításakor a modulnak kell kezelnie az érvénytelenné vált aláírásokat.

Példa és fejléc​

Az alábbi oldalakon a teljes példaforrás és a szükséges fejléc megtalálható; nem kell külön letöltenie a Mudfish DNS forrásfáját.

FájlTartalom
policy.c — DNS-házirend példaDNS-kérések engedélyezése, blokkolása, eldobása, IP-válasz generálása, válaszcím és TTL módosítása; Linux-fordítási és tesztparancsokkal.
mudfish_dns_module.h — modulfejlécABI-deklarációk, hookszignatúrák, műveleti konstansok és puffertulajdonlási szabályok.

Fordítás előtt töltse le a policy.c és mudfish_dns_module.h fájlokat ugyanabba a könyvtárba. A példa fordítóparancsa Linux .so könyvtárat készít.