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 pengendalian | Lokasi tetapan modul | Format 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.
| Hook | Masa panggilan |
|---|---|
on_dns_query | Selepas menerima pertanyaan yang telah dihuraikan, sebelum carian cache atau penghantaran. |
on_dns_response | Selepas respons dipilih, sebelum disimpan dalam cache atau dikembalikan kepada klien. Respons daripada cache juga melalui hook ini. |
on_web_hello | Selepas pemeriksaan awal HTTP Host/TLS SNI selesai, sebelum menyambung atau memproses data awal. |
on_web_data | Selepas membaca data klien susulan atau data pelayan, sebelum menghantarnya. |
Tindakan DNS
Hook DNS v2 mengembalikan 0 apabila berjaya dan menetapkan result->action.
| Tindakan | Kesan |
|---|---|
MUDFISH_DNS_CONTINUE | Meneruskan modul seterusnya dan pemprosesan biasa. |
MUDFISH_DNS_ALLOW | Menamatkan rantaian hook semasa dan meneruskan carian DNS biasa atau mengembalikan respons yang dipilih. |
MUDFISH_DNS_BLOCK | Mengembalikan REFUSED. |
MUDFISH_DNS_DROP | Membuang permintaan tanpa menghantar respons DNS. |
MUDFISH_DNS_ANSWER | Menjana respons menggunakan alamat IPv4/IPv6 dan TTL yang diberikan. |
MUDFISH_DNS_REPLACE | Menggunakan 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.
| Fail | Kandungan |
|---|---|
| policy.c — contoh dasar DNS | Membenarkan, 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 modul | Pengisytiharan 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.