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 rendszer | Modulkonfiguráció helye | Kö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.
| Hook | Hívás időpontja |
|---|---|
on_dns_query | A feldolgozott kérdés elfogadása után, gyorsítótár-keresés vagy továbbítás előtt. |
on_dns_response | A 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_hello | A kezdeti HTTP Host/TLS SNI vizsgálat után, kapcsolódás vagy kezdeti adatfeldolgozás előtt. |
on_web_data | Tová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űvelet | Hatás |
|---|---|
MUDFISH_DNS_CONTINUE | Folytatja a következő modullal és a normál feldolgozással. |
MUDFISH_DNS_ALLOW | Befejezi az aktuális hookláncot, és folytatja a normál DNS-feloldást vagy visszaadja a kiválasztott választ. |
MUDFISH_DNS_BLOCK | REFUSED választ ad. |
MUDFISH_DNS_DROP | DNS-válasz nélkül eldobja a kérést. |
MUDFISH_DNS_ANSWER | A megadott IPv4/IPv6-címmel és TTL-lel választ készít. |
MUDFISH_DNS_REPLACE | A 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ájl | Tartalom |
|---|---|
| policy.c — DNS-házirend példa | DNS-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éc | ABI-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.