Langkau ke kandungan utama

Modul natif (untuk pembangun)

Modul tidak diperlukan untuk penggunaan biasa. Panduan ini untuk pembangun dan pentadbir yang ingin memperluas fungsi perkhidmatan Windows atau Linux menggunakan pustaka natif. Modul berjalan dalam perkhidmatan dengan keizinan perkhidmatan tersebut. Pasang hanya kod yang dipercayai dan pastikan fail modul, fail kebergantungan serta fail tetapan dimiliki oleh pentadbir.

Memuatkan modul​

Perkhidmatan membaca fail *.conf daripada direktori modules.d di sebelah fail tetapan. Lokasi lalai adalah seperti berikut.

Sistem pengendalianLokasi tetapan modulFormat pustaka
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Dalam setiap fail, tulis satu laluan mutlak pustaka pada setiap baris. Contohnya, kandungan /etc/mudfish-dns/modules.d/10-policy.conf adalah seperti berikut.

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

Fail dibaca mengikut urutan nama fail, dan setiap fail dibaca mengikut urutan baris. Baris kosong dan baris yang bermula dengan # diabaikan. Jangan apit laluan dengan tanda petikan atau gunakan pemboleh ubah persekitaran atau komen di hujung baris; bentuk ini tidak ditafsirkan. Pada Windows juga, tulis laluan mutlak penuh dalam fail, termasuk laluan yang mengandungi ruang.

Selepas menambah, mengubah atau membuang modul, mulakan semula perkhidmatan. Pada Linux, gunakan arahan berikut.

sudo systemctl restart mudfish-dns.service

Pada Windows, mulakan semula perkhidmatan Mudfish DNS melalui pengurusan perkhidmatan. Mula DNS, Henti DNS dan Gunakan Tetapan dalam aplikasi tidak memuatkan semula modul. Perkhidmatan tidak akan bermula jika fail tetapan tidak dapat dibaca, laluan tidak sah atau ralat pemuatan dan inisialisasi berlaku. Direktori modul boleh tiada atau kosong.

Semasa pembangunan, anda boleh mengulang argumen --module untuk memuatkan pustaka mengikut urutan argumen. Ini menggantikan pemuatan automatik modules.d. --config FILE turut mengubah lokasi direktori modul di sebelah fail tetapan. --restore-dns menjalankan pemulihan tanpa memuatkan modul.

Melaksanakan hook​

Baca Pengepala mudfish_dns_module.h atau muat turun mudfish_dns_module.h. Pengepala ini mentakrifkan struktur, hook, tindakan dan peraturan jangka hayat data yang digunakan oleh modul. Panduan ini menggunakan C ABI v2. Eksport mudfish_dns_module_init_v2() dan semak MUDFISH_DNS_MODULE_ABI_V2 serta saiz struktur yang diberikan sebelum mengisi hook. Kembalikan 0 apabila inisialisasi berjaya.

HookMasa panggilan
on_dns_querySelepas menerima pertanyaan yang telah dihuraikan, sebelum carian cache atau penghantaran.
on_dns_responseSelepas respons dipilih, sebelum disimpan dalam cache atau dikembalikan kepada klien. Respons daripada cache juga melalui hook ini.
on_web_helloSelepas pemeriksaan awal HTTP Host/TLS SNI selesai, sebelum menyambung atau memproses data awal.
on_web_dataSelepas membaca data klien susulan atau data pelayan, sebelum menghantarnya.

Tindakan DNS​

Hook DNS v2 mengembalikan 0 apabila berjaya dan menetapkan result->action.

TindakanKesan
MUDFISH_DNS_CONTINUEMeneruskan modul seterusnya dan pemprosesan biasa.
MUDFISH_DNS_ALLOWMenamatkan rantaian hook semasa dan meneruskan carian DNS biasa atau mengembalikan respons yang dipilih.
MUDFISH_DNS_BLOCKMengembalikan REFUSED.
MUDFISH_DNS_DROPMembuang permintaan tanpa menghantar respons DNS.
MUDFISH_DNS_ANSWERMenjana respons menggunakan alamat IPv4/IPv6 dan TTL yang diberikan.
MUDFISH_DNS_REPLACEMenggunakan respons lengkap dalam format wayar DNS yang disediakan oleh modul.

Jangan kembalikan pemalar tindakan secara langsung daripada hook DNS v2. Jika fungsi mengembalikan nilai bukan sifar atau hasil tidak sah, SERVFAIL berlaku. ALLOW hanya menamatkan rantaian hook semasa; ia tidak memintas peraturan domain, kebenaran kaedah komunikasi atau pemeriksaan sijil. Semua hasil pertanyaan kecuali DROP juga melalui hook respons.

Hook web mengembalikan MUDFISH_DNS_CONTINUE atau MUDFISH_DNS_REJECT secara langsung. Menolak permintaan web menamatkan sambungan. Perlindungan web mesti dihidupkan untuk menggunakan hook web, dan kandungan HTTPS yang dinyahsulit tidak disediakan.

Penimbal, bebenang dan cache​

Peristiwa input dan penimbal bersifat baca sahaja serta hanya sah semasa panggil balik berjalan. Respons gantian mesti menggunakan memori milik modul dan kekal sah sehingga panggil balik seterusnya atau penamatan modul tersebut. Jangan kembalikan memori tindanan atau penuding yang dipinjam daripada peristiwa. ID DNS, opcode dan soalan respons gantian mesti sepadan dengan pertanyaan asal. Panggil balik bagi satu tika dijalankan secara berurutan, tetapi boleh dipanggil daripada bebenang yang berbeza. Pastikan panggil balik singkat dan jangan sebarkan pengecualian merentasi sempadan ABI.

Hasil yang dijana, diganti, disekat atau dibuang tidak disimpan dalam cache hos. Menggantikan respons daripada cache tidak mengubah entri cache asal. Hos mengosongkan bendera AD pada respons gantian dan tidak melakukan pengesahan DNSSEC atau penandatanganan semula. Modul yang mengubah data bertandatangan mesti mengendalikan sendiri tandatangan yang menjadi tidak sah.

Contoh dan pengepala​

Halaman di bawah menyediakan kod sumber contoh lengkap dan pengepala yang diperlukan. Anda tidak perlu memuat turun pepohon sumber Mudfish DNS secara berasingan.

FailKandungan
policy.c — contoh dasar DNSMembenarkan, menyekat dan membuang pertanyaan DNS, menjana respons IP serta mengubah alamat respons dan TTL. Turut merangkumi arahan binaan dan ujian Linux.
mudfish_dns_module.h — pengepala modulPengisytiharan ABI, tandatangan hook, pemalar tindakan dan peraturan pemilikan penimbal.

Sebelum membina, muat turun policy.c dan mudfish_dns_module.h ke direktori yang sama. Arahan binaan contoh menghasilkan pustaka Linux .so.