Pāriet uz galveno saturu

Natīvie moduļi izstrādātājiem

Parastai lietošanai moduļi nav vajadzīgi. Šī instrukcija paredzēta izstrādātājiem un administratoriem, kuri vēlas paplašināt Windows vai Linux pakalpojumu ar natīvu bibliotēku. Modulis darbojas pakalpojuma procesā ar pakalpojuma tiesībām. Instalējiet tikai uzticamu kodu un nodrošiniet, lai moduļa faili, atkarības un konfigurācija piederētu administratoram.

Moduļa ielāde​

Pakalpojums lasa *.conf failus direktorijā modules.d blakus konfigurācijas failam. Noklusējuma vietas:

OperētājsistēmaModuļu konfigurācijaBibliotēkas formāts
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Katrā failā norādiet bibliotēkas absolūto ceļu, vienu katrā rindā. Piemēram, /etc/mudfish-dns/modules.d/10-policy.conf saturs:

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

Failus lasa nosaukumu secībā, katra faila saturu — rindu secībā. Tukšas rindas un rindas, kas sākas ar #, ignorē. Nelieciet ceļu pēdiņās un neizmantojiet vides mainīgos vai komentārus rindas beigās: tie netiek interpretēti. Arī Windows failā rakstiet pilnu absolūto ceļu, tostarp ceļiem ar atstarpēm.

Pēc moduļa pievienošanas, maiņas vai noņemšanas pārstartējiet pakalpojumu. Linux komanda:

sudo systemctl restart mudfish-dns.service

Windows pakalpojumu pārvaldniekā pārstartējiet Mudfish DNS pakalpojumu. Lietotnes Sākt DNS, Apturēt DNS un Piemērot iestatījumus nepārlādē moduļus. Ja konfigurāciju nevar nolasīt, ceļš ir nepareizs vai rodas ielādes vai inicializācijas kļūda, pakalpojums nesāk darboties. Moduļu direktorija drīkst nebūt vai būt tukša.

Izstrādes laikā --module var norādīt vairākkārt, lai bibliotēkas ielādētu argumentu secībā. Tas aizstāj automātisko modules.d ielādi. --config FILE maina arī blakus konfigurācijai esošās moduļu direktorijas vietu. --restore-dns veic atjaunošanu bez moduļu ielādes.

Āķu ieviešana​

Lasiet mudfish_dns_module.h galveni vai lejupielādējiet mudfish_dns_module.h. Galvene nosaka struktūras, āķus, darbības un datu dzīves cikla noteikumus. Šī instrukcija izmanto C ABI v2. Eksportējiet mudfish_dns_module_init_v2() un pirms āķu aizpildīšanas pārbaudiet MUDFISH_DNS_MODULE_ABI_V2 un nodotās struktūras lielumu. Veiksmīgas inicializācijas gadījumā atgrieziet 0.

ĀķisIzsaukšanas brīdis
on_dns_queryPēc parsēta vaicājuma pieņemšanas, pirms kešatmiņas pārbaudes vai pārsūtīšanas.
on_dns_responsePēc atbildes izvēles, pirms saglabāšanas kešatmiņā vai atgriešanas klientam. Arī kešotas atbildes iziet šo āķi.
on_web_helloPēc sākotnējās HTTP Host/TLS SNI pārbaudes, pirms savienošanās vai sākotnējo datu apstrādes.
on_web_dataPēc turpmāko klienta vai servera datu nolasīšanas, pirms pārsūtīšanas.

DNS darbības​

v2 DNS āķi veiksmes gadījumā atgriež 0 un iestata result->action.

DarbībaRezultāts
MUDFISH_DNS_CONTINUETurpina ar nākamo moduli un parasto apstrādi.
MUDFISH_DNS_ALLOWBeidz pašreizējo āķu ķēdi un turpina parastu DNS vaicājumu vai atgriež izvēlēto atbildi.
MUDFISH_DNS_BLOCKAtgriež REFUSED.
MUDFISH_DNS_DROPAtmet bez DNS atbildes nosūtīšanas.
MUDFISH_DNS_ANSWERIzveido atbildi ar norādīto IPv4/IPv6 adresi un TTL.
MUDFISH_DNS_REPLACEIzmanto moduļa nodoto pilno DNS tīkla formāta atbildi.

Neatgrieziet darbības konstanti tieši no v2 DNS āķa. Ja funkcija atgriež nenulles vērtību vai rezultāts nav derīgs, rodas SERVFAIL. ALLOW beidz tikai pašreizējo āķu ķēdi, neapejot domēnu noteikumus, saziņas veidu atļaujas vai sertifikātu pārbaudi. Visi vaicājuma rezultāti, izņemot DROP, iziet arī atbildes āķi.

Tīmekļa āķi tieši atgriež MUDFISH_DNS_CONTINUE vai MUDFISH_DNS_REJECT. Noraidot tīmekļa pieprasījumu, savienojums tiek slēgts. Tīmekļa āķiem jābūt ieslēgtai tīmekļa aizsardzībai; atšifrēts HTTPS saturs netiek dots.

Buferi, pavedieni un kešatmiņa​

Ievades notikumi un buferi ir tikai lasāmi un derīgi tikai atzvanfunkcijas izpildes laikā. Aizvietojošajai atbildei jāizmanto modulim piederoša atmiņa, kas paliek derīga līdz šī moduļa nākamajai atzvanfunkcijai vai iznīcināšanai. Neatgrieziet steka atmiņu vai no notikuma aizņemtu rādītāju. Aizvietojošās atbildes DNS ID, opcode un jautājumam jāsakrīt ar sākotnējo vaicājumu. Vienas instances atzvanfunkcijas izpilda secīgi, bet tās var izsaukt dažādi pavedieni. Pabeidziet ātri un neizplatiet izņēmumus pāri ABI robežai.

Ģenerētie, aizvietotie, bloķētie un atmestie rezultāti netiek glabāti resursdatora kešatmiņā. Kešotas atbildes aizvietošana nemaina sākotnējo kešatmiņas ierakstu. Resursdators notīra aizvietojošās atbildes AD karogu un neveic DNSSEC pārbaudi vai atkārtotu parakstīšanu. Modulim, kas maina parakstītus datus, pašam jāapstrādā nederīgie paraksti.

Piemērs un galvene​

Tālāk pieejams pilns piemēra pirmkods un nepieciešamā galvene. Mudfish DNS pirmkoda koks nav atsevišķi jālejupielādē.

FailsSaturs
policy.c — DNS politikas piemērsVaicājumu atļaušana, bloķēšana, atmešana, IP atbilžu izveide, atbilžu adrešu un TTL maiņa. Iekļautas Linux būvēšanas un pārbaudes komandas.
mudfish_dns_module.h — moduļa galveneABI deklarācijas, āķu paraksti, darbību konstantes un buferu īpašumtiesību noteikumi.

Pirms būvēšanas lejupielādējiet policy.c un mudfish_dns_module.h vienā direktorijā. Piemēra būvēšanas komanda izveido Linux .so bibliotēku.