Siirry pääsisältöön

Natiivimoduulit kehittäjille

Tavallinen käyttö ei edellytä moduuleja. Tämä ohje on kehittäjille ja ylläpitäjille, jotka haluavat laajentaa Windows- tai Linux-palvelua natiivikirjastolla. Moduulit suoritetaan palvelun sisällä sen oikeuksilla. Asenna vain luotettavaa koodia ja pidä moduulit, riippuvuustiedostot sekä asetustiedostot ylläpitäjän omistuksessa.

Moduulin lataaminen​

Palvelu lukee *.conf-tiedostot asetustiedoston vieressä olevasta modules.d-hakemistosta. Oletussijainnit ovat:

KäyttöjärjestelmäModuuliasetusten sijaintiKirjastomuoto
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Kirjoita kuhunkin tiedostoon kirjaston absoluuttinen polku, yksi riville. Esimerkiksi /etc/mudfish-dns/modules.d/10-policy.conf sisältää:

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

Tiedostot luetaan nimijärjestyksessä ja niiden sisällä rivijärjestyksessä. Tyhjät rivit ja #-merkillä alkavat rivit ohitetaan. Älä ympäröi polkuja lainausmerkeillä äläkä käytä ympäristömuuttujia tai rivin loppuun lisättyjä kommentteja, sillä niitä ei tulkita. Kirjoita myös Windowsissa koko absoluuttinen polku tiedostoon, vaikka siinä olisi välilyöntejä.

Käynnistä palvelu uudelleen moduulin lisäämisen, muuttamisen tai poistamisen jälkeen. Linuxissa käytä komentoa:

sudo systemctl restart mudfish-dns.service

Windowsissa käynnistä Mudfish DNS uudelleen palveluiden hallinnasta. Sovelluksen Käynnistä DNS, Pysäytä DNS ja Ota asetukset käyttöön eivät lataa moduuleja uudelleen. Jos asetustiedostoa ei voida lukea, polku on väärä tai lataus tai alustus epäonnistuu, palvelu ei käynnisty. Puuttuva tai tyhjä moduulihakemisto on sallittu.

Kehityksen aikana voit toistaa --module-argumentin ladataksesi kirjastot argumenttijärjestyksessä. Tällöin se korvaa modules.d-hakemiston automaattisen lataamisen. --config FILE muuttaa myös asetustiedoston vieressä olevan moduulihakemiston sijaintia. --restore-dns tekee palautuksen lataamatta moduuleja.

Koukkujen toteutus​

Lue mudfish_dns_module.h-otsake tai lataa mudfish_dns_module.h. Se määrittää rakenteet, koukut, toiminnot ja datan elinkaarisäännöt. Tämä ohje käyttää C ABI v2:ta. Vie symboli mudfish_dns_module_init_v2() ja tarkista MUDFISH_DNS_MODULE_ABI_V2 sekä välitetty rakenteen koko ennen koukkujen täyttämistä. Palauta onnistuneesta alustuksesta 0.

KoukkuKutsumisajankohta
on_dns_queryJäsennetyn kyselyn hyväksymisen jälkeen, ennen välimuistihakua tai välittämistä.
on_dns_responseVastauksen valinnan jälkeen, ennen välimuistiin tallentamista tai asiakkaalle palauttamista. Myös välimuistivastaukset kulkevat tämän koukun kautta.
on_web_helloAlustavan HTTP Host/TLS SNI -tarkistuksen jälkeen, ennen yhteyden muodostamista tai alkudatan käsittelyä.
on_web_dataMyöhemmän asiakas- tai palvelindatan lukemisen jälkeen, ennen välittämistä.

DNS-toiminnot​

v2:n DNS-koukut palauttavat onnistuessaan 0 ja asettavat result->action-arvon.

ToimintoVaikutus
MUDFISH_DNS_CONTINUEJatkaa seuraavaan moduuliin ja tavalliseen käsittelyyn.
MUDFISH_DNS_ALLOWLopettaa nykyisen koukkuketjun ja jatkaa tavallista DNS-kyselyä tai palauttaa valitun vastauksen.
MUDFISH_DNS_BLOCKPalauttaa REFUSED.
MUDFISH_DNS_DROPHylkää lähettämättä DNS-vastausta.
MUDFISH_DNS_ANSWERLuo vastauksen annetusta IPv4/IPv6-osoitteesta ja TTL:stä.
MUDFISH_DNS_REPLACEKäyttää moduulin toimittamaa täydellistä DNS-vastausta siirtomuodossa.

Älä palauta toimintovakiota suoraan v2:n DNS-koukusta. Muu palautusarvo kuin 0 tai virheellinen tulos aiheuttaa SERVFAIL-vastauksen. ALLOW päättää vain nykyisen koukkuketjun eikä ohita verkkotunnussääntöjä, yhteystavan lupia tai varmenteen tarkistusta. Muut kyselytulokset kuin DROP kulkevat myös vastauskoukun kautta.

Verkkokoukut palauttavat suoraan MUDFISH_DNS_CONTINUE tai MUDFISH_DNS_REJECT. Verkkopyynnön hylkääminen sulkee yhteyden. Verkkokoukut edellyttävät verkkosuojauksen käyttöönottoa, eikä purettua HTTPS-sisältöä tarjota.

Puskurit, säikeet ja välimuisti​

Syötetapahtumat ja puskurit ovat vain luettavia ja voimassa vain callback-kutsun ajan. Korvaavan vastauksen täytyy käyttää moduulin omistamaa muistia, joka pysyy voimassa moduulin seuraavaan callback-kutsuun tai tuhoamiseen asti. Älä palauta pinomuistia tai tapahtumalta lainattua osoitinta. Korvaavan vastauksen DNS ID:n, opcoden ja kysymyksen täytyy vastata alkuperäistä kyselyä. Yhden instanssin callbackit suoritetaan peräkkäin, mutta niitä voidaan kutsua eri säikeistä. Suorita ne nopeasti äläkä välitä poikkeuksia ABI-rajan yli.

Luotuja, korvattuja, estettyjä tai hylättyjä tuloksia ei tallenneta isännän välimuistiin. Välimuistivastauksen korvaaminen ei muuta alkuperäistä välimuistimerkintää. Isäntä poistaa korvaavan vastauksen AD-lipun eikä tarkista tai allekirjoita DNSSEC:iä uudelleen. Allekirjoitettua dataa muuttavan moduulin täytyy käsitellä vanhentuneet allekirjoitukset itse.

Esimerkki ja otsake​

Seuraavilla sivuilla ovat koko esimerkkikoodi ja tarvittava otsake. Mudfish DNS:n lähdekoodipuuta ei tarvitse ladata erikseen.

TiedostoSisältö
policy.c — DNS-käytäntöesimerkkiDNS-kyselyn salliminen, estäminen ja hylkääminen, IP-vastauksen luonti sekä vastausosoitteen ja TTL:n muuttaminen. Mukana Linuxin käännös- ja testikomennot.
mudfish_dns_module.h — moduulin otsakeABI-määrittelyt, koukkujen allekirjoitukset, toimintovakiot ja puskurien omistussäännöt.

Lataa policy.c ja mudfish_dns_module.h samaan hakemistoon ennen kääntämistä. Esimerkin käännöskomento tuottaa Linuxin .so-kirjaston.