Ana içeriğe atla

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 sistemiModül ayar konumuKü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_queryAyrıştırılmış sorgu kabul edildikten sonra, önbelleğe bakılmadan veya iletilmeden önce.
on_dns_responseYanı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_dataSonraki 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.

EylemEtki
MUDFISH_DNS_CONTINUESonraki modüle ve normal işlemeye devam eder.
MUDFISH_DNS_ALLOWMevcut kanca zincirini bitirir; normal DNS sorgusuna devam eder veya seçilen yanıtı döndürür.
MUDFISH_DNS_BLOCKREFUSED döndürür.
MUDFISH_DNS_DROPDNS yanıtı göndermeden atar.
MUDFISH_DNS_ANSWERVerilen IPv4/IPv6 adresi ve TTL ile yanıt oluşturur.
MUDFISH_DNS_REPLACEModü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ğiDNS 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.