Salta al contingut principal

Mòduls natius (per a desenvolupadors)

L'ús habitual no requereix mòduls. Aquesta guia s'adreça a desenvolupadors i administradors que volen ampliar el servei de Windows o Linux amb biblioteques natives. Els mòduls s'executen dins del servei i amb els seus privilegis. Instal·leu només codi de confiança i manteniu els fitxers dels mòduls, les dependències i la configuració sota propietat de l'administrador.

Carregar un mòdul​

El servei llegeix els fitxers *.conf del directori modules.d situat al costat del fitxer de configuració. Les ubicacions predeterminades són:

Sistema operatiuConfiguració dels mòdulsFormat de biblioteca
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Escriviu un camí absolut de biblioteca per línia. Per exemple, /etc/mudfish-dns/modules.d/10-policy.conf pot contenir:

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

Els fitxers es llegeixen en ordre de nom i les línies en el seu ordre dins de cada fitxer. S'ignoren les línies buides i les que comencen amb #. No utilitzeu cometes al voltant dels camins, variables d'entorn ni comentaris al final de línia: no s'interpreten. A Windows també cal escriure el camí absolut complet, encara que contingui espais.

Reinicieu el servei després d'afegir, modificar o eliminar un mòdul. A Linux:

sudo systemctl restart mudfish-dns.service

A Windows, reinicieu Mudfish DNS des de la gestió de serveis. Les opcions Inicia el DNS, Atura el DNS i Aplica la configuració de l'aplicació no recarreguen els mòduls. Si un fitxer de configuració no es pot llegir, un camí és incorrecte o falla la càrrega o la inicialització, el servei no s'inicia. Es permet que el directori de mòduls no existeixi o estigui buit.

Durant el desenvolupament podeu repetir l'argument --module per carregar biblioteques en l'ordre dels arguments. Això substitueix la càrrega automàtica de modules.d. --config FILE també modifica la ubicació del directori de mòduls al costat de la configuració. --restore-dns fa la recuperació sense carregar mòduls.

Implementar hooks​

Llegiu la capçalera mudfish_dns_module.h o descarregueu mudfish_dns_module.h. La capçalera defineix les estructures, els hooks, les accions i les regles de vida útil de les dades. Aquesta guia utilitza C ABI v2. Exporteu mudfish_dns_module_init_v2() i comproveu MUDFISH_DNS_MODULE_ABI_V2 i la mida de l'estructura rebuda abans d'emplenar els hooks. Retorneu 0 si la inicialització té èxit.

HookMoment de la crida
on_dns_queryDesprés d'acceptar la consulta analitzada, abans de consultar la memòria cau o transmetre-la.
on_dns_responseDesprés de seleccionar la resposta, abans de desar-la a la memòria cau o retornar-la al client. Les respostes de la memòria cau també hi passen.
on_web_helloDesprés de la inspecció inicial d'HTTP Host/TLS SNI, abans de connectar-se o processar les dades inicials.
on_web_dataDesprés de llegir dades posteriors del client o del servidor, abans de transmetre-les.

Accions DNS​

Els hooks DNS v2 retornen 0 si tenen èxit i estableixen result->action.

AccióEfecte
MUDFISH_DNS_CONTINUEContinua amb el mòdul següent i el processament habitual.
MUDFISH_DNS_ALLOWAcaba la cadena actual de hooks i continua la consulta DNS habitual o retorna la resposta seleccionada.
MUDFISH_DNS_BLOCKRetorna REFUSED.
MUDFISH_DNS_DROPDescarta la consulta sense enviar cap resposta DNS.
MUDFISH_DNS_ANSWERGenera una resposta amb l'adreça IPv4/IPv6 i el TTL proporcionats.
MUDFISH_DNS_REPLACEUtilitza la resposta DNS completa en format de xarxa proporcionada pel mòdul.

No retorneu directament una constant d'acció des d'un hook DNS v2. Si la funció retorna un valor diferent de 0 o el resultat no és vàlid, es produeix SERVFAIL. ALLOW només acaba la cadena actual: no evita les regles de domini, els permisos de transport ni la verificació de certificats. Tots els resultats de consulta excepte DROP també passen pels hooks de resposta.

Els hooks web retornen directament MUDFISH_DNS_CONTINUE o MUDFISH_DNS_REJECT. Rebutjar una petició web tanca la connexió. Per utilitzar-los, cal activar la protecció web; no reben contingut HTTPS desxifrat.

Memòria intermèdia, fils i memòria cau​

Els esdeveniments i les memòries intermèdies d'entrada són de només lectura i només són vàlids durant la crida de retorn. Una resposta substitutiva ha d'utilitzar memòria propietat del mòdul i continuar sent vàlida fins a la següent crida de retorn del mòdul o fins que es destrueixi. No retorneu memòria de la pila ni punters prestats de l'esdeveniment. L'ID DNS, l'opcode i la pregunta de la resposta han de coincidir amb la consulta original. Les crides d'una instància s'executen seqüencialment, però poden arribar des de fils diferents. Acabeu-les ràpidament i no propagueu excepcions a través del límit de l'ABI.

Els resultats generats, substituïts, bloquejats o descartats no es desen a la memòria cau de l'amfitrió. Substituir una resposta de la memòria cau no modifica l'entrada original. L'amfitrió esborra el senyalador AD de les respostes substitutives i no valida ni torna a signar DNSSEC. Un mòdul que modifiqui dades signades ha de gestionar les signatures que deixen de ser vàlides.

Exemple i capçalera​

Les pàgines següents inclouen el codi complet de l'exemple i la capçalera necessària. No cal descarregar l'arbre de codi font de Mudfish DNS.

FitxerContingut
policy.c — Exemple de política DNSPermetre, bloquejar o descartar consultes, generar respostes IP i modificar adreces i TTL. Inclou ordres de compilació i prova per a Linux.
mudfish_dns_module.h — Capçalera del mòdulDeclaracions ABI, signatures dels hooks, constants d'acció i regles de propietat de la memòria intermèdia.

Descarregueu policy.c i mudfish_dns_module.h al mateix directori abans de compilar. Les ordres de l'exemple generen una biblioteca .so de Linux.