Moduli asilia (kwa wasanidi)
Moduli hazihitajiki kwa matumizi ya kawaida. Mwongozo huu ni wa wasanidi na wasimamizi wanaotaka kupanua huduma ya Windows/Linux kwa maktaba asilia. Moduli huendeshwa ndani ya huduma kwa ruhusa zake. Sakinisha msimbo unaoaminika pekee; faili za moduli, vitegemezi na usanidi ziendelee kumilikiwa na msimamizi.
Kupakia moduli
Huduma husoma faili za *.conf katika saraka ya modules.d iliyo karibu na faili ya usanidi.
Maeneo ya msingi ni:
| Mfumo | Eneo la usanidi wa moduli | Umbizo la maktaba |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
Katika kila faili, andika njia kamili ya maktaba moja kila mstari.
Kwa mfano, /etc/mudfish-dns/modules.d/10-policy.conf inaweza kuwa:
/usr/lib/mudfish-dns/modules/policy.so
Faili husomwa kwa mpangilio wa majina, na mistari kwa mpangilio ndani ya faili.
Mistari tupu na inayoanza na # hupuuzwa. Usizungushie njia kwa nukuu, kutumia vigezo vya mazingira
au maoni mwishoni mwa mstari; havitafasiriwi. Katika Windows pia, andika njia kamili ndani ya faili,
ikiwemo njia zilizo na nafasi.
Baada ya kuongeza, kubadilisha au kuondoa moduli, anzisha huduma upya. Katika Linux:
sudo systemctl restart mudfish-dns.service
Katika Windows, anzisha upya huduma ya Mudfish DNS kupitia usimamizi wa huduma. Anzisha DNS, Simamisha DNS na Tumia mipangilio havipakii moduli upya. Huduma haitaanza ikiwa faili ya usanidi haiwezi kusomwa, njia si sahihi au upakiaji/uanzishaji wa awali unashindwa. Saraka ya moduli ikikosekana au ikiwa tupu inaruhusiwa.
Wakati wa ukuzaji, unaweza kurudia hoja ya --module kupakia maktaba kwa mpangilio wa hoja.
Hii huchukua nafasi ya upakiaji wa kiotomatiki wa modules.d.
--config FILE pia hubadilisha eneo la saraka ya moduli karibu na faili ya usanidi.
--restore-dns hurejesha DNS bila kupakia moduli.
Kutekeleza hook
Soma header ya mudfish_dns_module.h au
pakua mudfish_dns_module.h.
Header hufafanua miundo, hook, vitendo na kanuni za muda wa matumizi ya data.
Mwongozo huu unatumia C ABI v2. Toa alama ya mudfish_dns_module_init_v2() nje,
na uhakikishe MUDFISH_DNS_MODULE_ABI_V2 na ukubwa wa muundo uliotumwa kabla ya kujaza hook.
Rudisha 0 uanzishaji ukifanikiwa.
| Hook | Wakati wa kuitwa |
|---|---|
on_dns_query | Baada ya kukubali swali lililochanganuliwa, kabla ya kutafuta akiba au kulipeleka. |
on_dns_response | Baada ya kuchagua jibu, kabla ya kuhifadhi kwenye akiba au kurudisha kwa mteja. Majibu ya akiba pia hupitia hook hii. |
on_web_hello | Baada ya ukaguzi wa awali wa HTTP Host/TLS SNI, kabla ya kuunganisha au kushughulikia data ya awali. |
on_web_data | Baada ya kusoma data inayofuata ya mteja au seva, kabla ya kuipitisha. |
Vitendo vya DNS
Hook za DNS za v2 hurudisha 0 zikifanikiwa na kuweka result->action.
| Kitendo | Athari |
|---|---|
MUDFISH_DNS_CONTINUE | Endelea kwa moduli inayofuata na uchakataji wa kawaida. |
MUDFISH_DNS_ALLOW | Maliza mnyororo huu wa hook na uendelee na utafutaji wa kawaida au urudishe jibu lililochaguliwa. |
MUDFISH_DNS_BLOCK | Rudisha REFUSED. |
MUDFISH_DNS_DROP | Tupa bila kutuma jibu la DNS. |
MUDFISH_DNS_ANSWER | Tengeneza jibu kwa IPv4/IPv6 na TTL iliyotolewa. |
MUDFISH_DNS_REPLACE | Tumia jibu kamili la DNS katika umbizo la waya lililotolewa na moduli. |
Usirudishe konstanti za vitendo moja kwa moja katika hook za DNS za v2.
Kazi ikirudisha kisicho 0 au matokeo si halali, husababisha SERVFAIL.
ALLOW humaliza mnyororo wa sasa tu; haikwepi kanuni za vikoa, ruhusa za njia za mawasiliano au ukaguzi wa vyeti.
Matokeo ya swali isipokuwa DROP hupitia pia hook za majibu.
Hook za wavuti hurudisha MUDFISH_DNS_CONTINUE au MUDFISH_DNS_REJECT moja kwa moja.
Kukataa ombi hufunga muunganisho. Hook za wavuti zinahitaji ulinzi wa wavuti uwe umewashwa;
maudhui ya HTTPS yaliyosimbuliwa hayatolewi.
Bafa, nyuzi na akiba
Matukio na bafa za ingizo ni za kusoma pekee na ni halali wakati callback inaendeshwa tu. Jibu mbadala lazima litumie kumbukumbu inayomilikiwa na moduli na ibaki halali hadi callback inayofuata ya moduli hiyo au kuharibiwa kwake. Usirudishe kumbukumbu ya stack au pointer iliyoazimwa kutoka tukio. DNS ID, opcode na swali la jibu mbadala lazima zilingane na swali la awali. Callback za instansi moja huendeshwa kwa mfululizo lakini zinaweza kuitwa kutoka nyuzi tofauti. Zimalize haraka na usipitishe exceptions kuvuka mpaka wa ABI.
Matokeo yaliyotengenezwa, kubadilishwa, kuzuiwa au kutupwa hayahifadhiwi kwenye akiba ya host. Kubadilisha jibu la akiba hakubadilishi kipengee cha awali cha akiba. Host huondoa bendera ya AD ya majibu mbadala na haithibitishi wala kusaini upya DNSSEC. Moduli inayobadilisha data iliyosainiwa lazima ishughulikie sahihi zilizobatilika yenyewe.
Mfano na header
Kurasa zifuatazo zina msimbo kamili wa mfano na header inayohitajika. Huhitaji kupakua mti wa chanzo wa Mudfish DNS kando.
| Faili | Maudhui |
|---|---|
| policy.c — mfano wa sera ya DNS | Kuruhusu, kuzuia au kutupa maswali, kutengeneza majibu ya IP, kubadilisha anwani na TTL. Pia amri za kujenga na kujaribu katika Linux. |
| mudfish_dns_module.h — header ya moduli | Matamko ya ABI, saini za hook, konstanti za vitendo na kanuni za umiliki wa bafa. |
Pakua policy.c na mudfish_dns_module.h katika saraka moja kabla ya kujenga.
Amri ya mfano hutengeneza maktaba ya Linux ya .so.