Ga naar hoofdinhoud

Native modules voor ontwikkelaars

Voor normaal gebruik zijn geen modules nodig. Deze handleiding is bedoeld voor ontwikkelaars en beheerders die de Windows- of Linux-service met native bibliotheken willen uitbreiden. Modules draaien binnen de service met de rechten van die service. Installeer alleen vertrouwde code en zorg dat modulebestanden, afhankelijkheden en configuratiebestanden eigendom van de beheerder blijven.

Een module laden​

De service leest *.conf-bestanden uit de map modules.d naast het configuratiebestand. Standaardlocaties:

SysteemModuleconfiguratieBibliotheekformaat
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Schrijf in elk bestand één absoluut bibliotheekpad per regel. Bijvoorbeeld in /etc/mudfish-dns/modules.d/10-policy.conf:

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

Bestanden worden op bestandsnaam gelezen en regels binnen elk bestand op volgorde. Lege regels en regels die met # beginnen worden genegeerd. Gebruik geen aanhalingstekens rond paden, omgevingsvariabelen of commentaar aan het einde van regels: deze worden niet geïnterpreteerd. Schrijf ook op Windows het volledige absolute pad in het bestand, inclusief eventuele spaties.

Herstart de service na het toevoegen, wijzigen of verwijderen van modules. Op Linux:

sudo systemctl restart mudfish-dns.service

Herstart op Windows de service Mudfish DNS via servicebeheer. DNS starten, DNS stoppen en Instellingen toepassen laden modules niet opnieuw. Bij een onleesbaar configuratiebestand, ongeldig pad of fout tijdens laden of initialiseren start de service niet. Een ontbrekende of lege modulemap is wel toegestaan.

Tijdens ontwikkeling kun je --module herhaald opgeven om bibliotheken in argumentvolgorde te laden. Dit vervangt het automatisch laden uit modules.d. --config FILE verandert ook de locatie van de modulemap naast het configuratiebestand. --restore-dns voert herstel uit zonder modules te laden.

Hooks implementeren​

Lees de header mudfish_dns_module.h of download mudfish_dns_module.h. De header definieert structuren, hooks, acties en levensduurregels voor gegevens. Deze handleiding gebruikt C ABI v2. Exporteer mudfish_dns_module_init_v2() en controleer MUDFISH_DNS_MODULE_ABI_V2 en de doorgegeven structuurgrootte voordat je hooks invult. Geef bij succesvolle initialisatie 0 terug.

HookMoment van aanroep
on_dns_queryNa het accepteren van een geparseerd verzoek, vóór cachecontrole of doorsturen.
on_dns_responseNa het kiezen van een antwoord, vóór opslaan in de cache of terugsturen naar de client. Ook antwoorden uit de cache passeren deze hook.
on_web_helloNa de eerste HTTP Host/TLS SNI-inspectie, vóór verbinden of verwerken van de eerste gegevens.
on_web_dataNa het lezen van verdere client- of servergegevens, vóór doorsturen.

DNS-acties​

DNS-hooks van v2 geven bij succes 0 terug en stellen result->action in.

ActieEffect
MUDFISH_DNS_CONTINUEGa door naar de volgende module en normale verwerking.
MUDFISH_DNS_ALLOWBeëindig de huidige hookketen en vervolg de normale DNS-opzoeking of geef het gekozen antwoord terug.
MUDFISH_DNS_BLOCKGeef REFUSED terug.
MUDFISH_DNS_DROPVerwerp het verzoek zonder DNS-antwoord.
MUDFISH_DNS_ANSWERMaak een antwoord met het opgegeven IPv4/IPv6-adres en de TTL.
MUDFISH_DNS_REPLACEGebruik het volledige door de module aangeleverde DNS-antwoord in wireformaat.

Geef in een v2-DNS-hook niet rechtstreeks een actieconstante terug. Een niet-nulretourwaarde of ongeldig resultaat veroorzaakt SERVFAIL. ALLOW beëindigt alleen de huidige hookketen en omzeilt geen domeinregels, toegestane transportmethoden of certificaatcontroles. Alle verzoekresultaten behalve DROP passeren ook de antwoordhooks.

Webhooks geven rechtstreeks MUDFISH_DNS_CONTINUE of MUDFISH_DNS_REJECT terug. Afwijzen sluit de verbinding. Webbescherming moet aanstaan om webhooks te gebruiken; ontsleutelde HTTPS-inhoud is niet beschikbaar.

Buffers, threads en cache​

Invoerevents en buffers zijn alleen-lezen en uitsluitend geldig tijdens de callback. Vervangende antwoorden moeten geheugen van de module gebruiken dat geldig blijft tot de volgende callback van die module of het afsluiten. Geef geen stackgeheugen of geleende eventpointers terug. DNS-ID, opcode en vraag van een vervangend antwoord moeten overeenkomen met het oorspronkelijke verzoek. Callbacks van één instantie worden opeenvolgend uitgevoerd, maar kunnen op verschillende threads worden aangeroepen. Houd callbacks kort en laat geen uitzonderingen de ABI-grens passeren.

Gegenereerde, vervangen, geblokkeerde en verworpen resultaten worden niet in de hostcache opgeslagen. Een gecachet antwoord vervangen wijzigt het oorspronkelijke cache-item niet. De host wist de AD-vlag van vervangende antwoorden en voert geen DNSSEC-validatie of herondertekening uit. Modules die ondertekende gegevens wijzigen moeten zelf ongeldige handtekeningen afhandelen.

Voorbeeld en header​

Deze pagina’s bevatten de volledige voorbeeldbron en header. Je hoeft de Mudfish DNS-bronboom niet apart te downloaden.

BestandInhoud
policy.c — DNS-beleidsvoorbeeldVerzoeken toestaan, blokkeren of verwerpen, IP-antwoorden genereren en antwoordadressen en TTL wijzigen. Inclusief Linux-bouw- en testopdrachten.
mudfish_dns_module.h — moduleheaderABI-declaraties, hooksignaturen, actieconstanten en regels voor buffereigendom.

Download policy.c en mudfish_dns_module.h naar dezelfde map voordat je bouwt. De voorbeeldopdracht maakt een Linux-.so-bibliotheek.