Yerel modüller (geliştiriciler için)
Normal kullanım için modül gerekmez. Bu kılavuz, Windows veya Linux hizmetinin işlevlerini yerel kütüphanelerle genişletmek isteyen geliştiriciler ve yöneticiler içindir. Modüller hizmet içinde, hizmet yetkileriyle çalışır. Yalnızca güvenilir kod yükleyin; modül, bağımlılık ve ayar dosyalarının yöneticiye ait olmasını sağlayın.
Modül yükleme
Hizmet, ayar dosyasının yanındaki modules.d dizininden *.conf dosyalarını okur. Varsayılan konumlar:
| İşletim sistemi | Modül ayar konumu | Kütüphane biçimi |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
Her dosyaya satır başına bir kütüphanenin mutlak yolunu yazın. Örneğin /etc/mudfish-dns/modules.d/10-policy.conf:
/usr/lib/mudfish-dns/modules/policy.so
Dosya adı sırasıyla, dosya içinde de satır sırasıyla okunur. Boş satırlar ve # ile başlayan satırlar yok sayılır. Yolu tırnak içine almayın; ortam değişkeni veya satır sonu yorumu kullanmayın. Bunlar yorumlanmaz. Windows'ta boşluk içeren yollar dahil tam mutlak yolu yazın.
Modül ekledikten, değiştirdikten veya kaldırdıktan sonra hizmeti yeniden başlatın. Linux'ta:
sudo systemctl restart mudfish-dns.service
Windows'ta hizmet yönetiminden Mudfish DNS hizmetini yeniden başlatın. Uygulamadaki DNS'i başlat, DNS'i durdur ve Ayarları uygula modülleri yeniden yüklemez. Ayar dosyası okunamıyorsa, yol yanlışsa veya yükleme/başlatma hatası varsa hizmet başlamaz. Modül dizininin olmaması veya boş olması kabul edilir.
Geliştirme sırasında --module argümanını tekrarlayarak kütüphaneleri argüman sırasıyla yükleyebilirsiniz. Bu, otomatik modules.d yüklemesinin yerini alır. --config FILE, ayar dosyasının yanındaki modül dizininin konumunu da değiştirir. --restore-dns, modül yüklemeden kurtarma yapar.
Kancaları uygulama
mudfish_dns_module.h başlığını okuyun veya mudfish_dns_module.h dosyasını indirin. Başlık, modülün yapıları, kancaları, eylemleri ve veri yaşam süresi kurallarını tanımlar. Bu kılavuz C ABI v2 kullanır. mudfish_dns_module_init_v2() simgesini dışa aktarın; kancaları doldurmadan önce MUDFISH_DNS_MODULE_ABI_V2 değerini ve iletilen yapı boyutunu kontrol edin. Başlatma başarılıysa 0 döndürün.
| Kanca | Çağrılma zamanı |
|---|---|
on_dns_query | Ayrıştırılmış sorgu kabul edildikten sonra, önbelleğe bakılmadan veya iletilmeden önce. |
on_dns_response | Yanıt seçildikten sonra, önbelleğe kaydedilmeden veya istemciye dönülmeden önce. Önbellek yanıtları da bu kancadan geçer. |
on_web_hello | İlk HTTP Host/TLS SNI incelemesinden sonra, bağlanmadan veya ilk verileri işlemeden önce. |
on_web_data | Sonraki istemci veya sunucu verileri okunduktan sonra, iletilmeden önce. |
DNS eylemleri
v2 DNS kancaları başarıda 0 döndürür ve result->action alanını ayarlar.
| Eylem | Etki |
|---|---|
MUDFISH_DNS_CONTINUE | Sonraki modüle ve normal işlemeye devam eder. |
MUDFISH_DNS_ALLOW | Mevcut kanca zincirini bitirir; normal DNS sorgusuna devam eder veya seçilen yanıtı döndürür. |
MUDFISH_DNS_BLOCK | REFUSED döndürür. |
MUDFISH_DNS_DROP | DNS yanıtı göndermeden atar. |
MUDFISH_DNS_ANSWER | Verilen IPv4/IPv6 adresi ve TTL ile yanıt oluşturur. |
MUDFISH_DNS_REPLACE | Modülün sağladığı tam DNS wire biçimli yanıtı kullanır. |
v2 DNS kancalarından eylem sabitlerini doğrudan döndürmeyin. İşlev sıfırdan farklı değer döndürürse veya sonuç geçersizse SERVFAIL oluşur. ALLOW yalnızca mevcut kanca zincirini bitirir; alan adı kurallarını, iletişim yöntemi izinlerini veya sertifika kontrollerini atlamaz. DROP dışındaki sorgu sonuçları yanıt kancalarından da geçer.
Web kancaları doğrudan MUDFISH_DNS_CONTINUE veya MUDFISH_DNS_REJECT döndürür. Web isteği reddedilirse bağlantı kapanır. Web kancaları için web koruması açık olmalıdır; şifresi çözülmüş HTTPS içeriği verilmez.
Tamponlar, iş parçacıkları ve önbellek
Girdi olayları ve tamponları salt okunurdur; yalnızca geri çağırım çalışırken geçerlidir. Yedek yanıt, modülün sahip olduğu belleği kullanmalı ve aynı modülün sonraki geri çağırımına veya kapanışına kadar geçerli kalmalıdır. Yığın belleğini veya olaydan ödünç alınmış işaretçileri döndürmeyin. Yedek yanıtın DNS ID, opcode ve sorusu özgün sorguyla eşleşmelidir. Bir örneğin geri çağırımları sıralı çalışır, ancak farklı iş parçacıklarından çağrılabilir. Geri çağırımları kısa tutun ve ABI sınırından istisna geçirmeyin.
Oluşturulan, değiştirilen, engellenen veya atılan sonuçlar ana uygulamanın önbelleğine kaydedilmez. Önbellek yanıtını değiştirmek özgün önbellek kaydını değiştirmez. Ana uygulama yedek yanıtın AD bayrağını temizler; DNSSEC doğrulaması veya yeniden imzalama yapmaz. İmzalı veriyi değiştiren modül geçersizleşen imzaları kendisi ele almalıdır.
Örnek ve başlık
Aşağıdaki sayfalarda tam örnek kaynak ve gerekli başlık bulunur. Mudfish DNS kaynak ağacını ayrıca indirmeniz gerekmez.
| Dosya | İçerik |
|---|---|
| policy.c — DNS politikası örneği | DNS sorgusuna izin verme, engelleme, atma, IP yanıtı üretme, yanıt adresi ve TTL değiştirme. Linux derleme ve test komutları da içerir. |
| mudfish_dns_module.h — modül başlığı | ABI bildirimleri, kanca imzaları, eylem sabitleri ve tampon sahipliği kuralları. |
Derlemeden önce policy.c ve mudfish_dns_module.h dosyalarını aynı dizine indirin. Örneğin derleme komutu Linux .so kütüphanesi üretir.