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ēma | Moduļu konfigurācija | Bibliotē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.
| Āķis | Izsaukšanas brīdis |
|---|---|
on_dns_query | Pēc parsēta vaicājuma pieņemšanas, pirms kešatmiņas pārbaudes vai pārsūtīšanas. |
on_dns_response | Pēc atbildes izvēles, pirms saglabāšanas kešatmiņā vai atgriešanas klientam. Arī kešotas atbildes iziet šo āķi. |
on_web_hello | Pēc sākotnējās HTTP Host/TLS SNI pārbaudes, pirms savienošanās vai sākotnējo datu apstrādes. |
on_web_data | Pē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ība | Rezultāts |
|---|---|
MUDFISH_DNS_CONTINUE | Turpina ar nākamo moduli un parasto apstrādi. |
MUDFISH_DNS_ALLOW | Beidz pašreizējo āķu ķēdi un turpina parastu DNS vaicājumu vai atgriež izvēlēto atbildi. |
MUDFISH_DNS_BLOCK | Atgriež REFUSED. |
MUDFISH_DNS_DROP | Atmet bez DNS atbildes nosūtīšanas. |
MUDFISH_DNS_ANSWER | Izveido atbildi ar norādīto IPv4/IPv6 adresi un TTL. |
MUDFISH_DNS_REPLACE | Izmanto 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ē.
| Fails | Saturs |
|---|---|
| policy.c — DNS politikas piemērs | Vaicā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 galvene | ABI 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.