Əsas məzmuna keç

Nativ modullar (tərtibatçılar üçün)

Adi istifadə üçün modul lazım deyil. Bu təlimat nativ kitabxana ilə Windows və ya Linux xidmətinin funksiyalarını genişləndirmək istəyən tərtibatçılar və inzibatçılar üçündür. Modullar xidmətin daxilində, onun səlahiyyətləri ilə işləyir. Yalnız etibar etdiyiniz kodu quraşdırın; modul faylları, asılılıq faylları və sazlama fayllarının sahibi inzibatçı olmalıdır.

Modul yükləmək​

Xidmət sazlama faylının yanındakı modules.d qovluğundan *.conf fayllarını oxuyur. Standart yerlər aşağıdakılardır.

Əməliyyat sistemiModul sazlamalarının yeriKitabxana formatı
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

Hər faylda hər sətirə kitabxananın bir mütləq yolunu yazın. Məsələn, /etc/mudfish-dns/modules.d/10-policy.conf faylının məzmunu belədir.

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

Fayllar ad sırası ilə, hər faylın daxilində isə sətir sırası ilə oxunur. Boş sətirlər və # ilə başlayan sətirlər nəzərə alınmır. Yolu dırnaqlara almayın, mühit dəyişənlərindən və ya sətir sonu şərhlərdən istifadə etməyin. Belə ifadələr şərh olunmur. Windows-da da boşluq olan yollar daxil olmaqla tam mütləq yolu fayla yazın.

Modul əlavə etdikdən, dəyişdikdən və ya sildikdən sonra xidməti yenidən başladın. Linux-da aşağıdakı əmri istifadə edin.

sudo systemctl restart mudfish-dns.service

Windows-da xidmətlərin idarə olunması bölməsindən Mudfish DNS xidmətini yenidən başladın. Tətbiqin DNS-i başlat, DNS-i dayandır və Sazlamaları tətbiq et əmrləri modulları yenidən yükləmir. Sazlama faylı oxunmursa, yol yanlışdırsa və ya yükləmə və başlanğıc sazlanması xətası baş verirsə, xidmət başlamır. Modul qovluğunun olmamasına və ya boş olmasına icazə verilir.

Hazırlama zamanı --module arqumentini təkrar göstərməklə kitabxanaları arqumentlərin sırası ilə yükləyə bilərsiniz. Bu halda modules.d avtomatik yükləməsi əvəz olunur. --config FILE sazlama faylının yanındakı modul qovluğunun yerini də dəyişir. --restore-dns modulları yükləmədən bərpanı yerinə yetirir.

Hook funksiyalarının hazırlanması​

mudfish_dns_module.h başlıq faylını oxuyun və ya mudfish_dns_module.h faylını endirin. Bu başlıq faylı modulun istifadə etdiyi strukturları, hook funksiyalarını, əməliyyatları və məlumatların etibarlılıq müddəti qaydalarını müəyyən edir. Bu təlimatda C ABI v2 istifadə olunur. mudfish_dns_module_init_v2() funksiyasını xaricə təqdim edin; hook sahələrini doldurmazdan əvvəl MUDFISH_DNS_MODULE_ABI_V2 və ötürülmüş strukturun ölçüsünü yoxlayın. Başlanğıc sazlanması uğurlu olduqda 0 qaytarın.

HookÇağırılma vaxtı
on_dns_queryTəhlil edilmiş sorğu qəbul edildikdən sonra, keşdə axtarışdan və ya ötürmədən əvvəl.
on_dns_responseCavab seçildikdən sonra, keşə yazılmadan və ya müştəriyə qaytarılmadan əvvəl. Keşdəki cavablar da bu hook-dan keçir.
on_web_helloİlkin HTTP Host/TLS SNI yoxlaması bitdikdən sonra, qoşulmadan və ya ilkin məlumatlar emal edilmədən əvvəl.
on_web_dataSonrakı müştəri və ya server məlumatları oxunduqdan sonra, ötürülmədən əvvəl.

DNS əməliyyatları​

v2 DNS hook funksiyaları uğur zamanı 0 qaytarır və result->action sahəsini təyin edir.

ƏməliyyatTəsiri
MUDFISH_DNS_CONTINUENövbəti modulla və adi emalla davam edir.
MUDFISH_DNS_ALLOWCari hook zəncirini bitirir və adi DNS sorğusunu davam etdirir və ya seçilmiş cavabı qaytarır.
MUDFISH_DNS_BLOCKREFUSED qaytarır.
MUDFISH_DNS_DROPDNS cavabı göndərmədən atır.
MUDFISH_DNS_ANSWERVerilmiş IPv4/IPv6 ünvanı və TTL ilə cavab yaradır.
MUDFISH_DNS_REPLACEModulun təqdim etdiyi tam DNS ötürmə formatlı cavabdan istifadə edir.

v2 DNS hook funksiyalarından əməliyyat sabitlərini birbaşa qaytarmayın. Funksiya sıfırdan fərqli dəyər qaytararsa və ya nəticə etibarsız olarsa, SERVFAIL yaranır. ALLOW yalnız cari hook zəncirini bitirir; domen qaydalarını, rabitə üsulu icazələrini və ya sertifikat yoxlamasını keçmir. DROP istisna olmaqla sorğu nəticələri cavab hook funksiyalarından da keçir.

Veb hook funksiyaları birbaşa MUDFISH_DNS_CONTINUE və ya MUDFISH_DNS_REJECT qaytarır. Veb sorğusu rədd edilərsə, bağlantı bağlanır. Veb hook funksiyalarından istifadə üçün veb qorunması aktiv olmalıdır; deşifrə edilmiş HTTPS məzmunu təqdim edilmir.

Buferlər, axınlar və keşləmə​

Giriş hadisələri və buferləri yalnız oxuma üçündür və yalnız geri çağırış funksiyası icra olunarkən etibarlıdır. Əvəzləyici cavab modulun sahib olduğu yaddaşdan istifadə etməli və həmin modulun növbəti geri çağırışına və ya bağlanmasına qədər etibarlı qalmalıdır. Stek yaddaşını və ya hadisədən götürülmüş göstəricini qaytarmayın. Əvəzləyici cavabın DNS ID-si, opcode-u və sualı ilkin sorğu ilə uyğun gəlməlidir. Bir instansiyanın geri çağırışları ardıcıl icra olunur, lakin fərqli axınlardan çağırıla bilər. Geri çağırışları tez tamamlayın və istisnaları ABI sərhədindən kənara ötürməyin.

Yaradılmış, əvəzlənmiş, bloklanmış və atılmış nəticələr hostun keşində saxlanmır. Keşdəki cavabı əvəzləmək ilkin keş qeydini dəyişmir. Host əvəzləyici cavabın AD bayrağını təmizləyir, DNSSEC yoxlaması və ya yenidən imzalama aparmır. İmzalanmış məlumatı dəyişən modul etibarsız olmuş imzaları özü emal etməlidir.

Nümunə və başlıq faylı​

Aşağıdakı səhifələrdə tam nümunə mənbə kodu və lazım olan başlıq faylı var. Mudfish DNS mənbə ağacını ayrıca endirməyə ehtiyac yoxdur.

FaylMəzmun
policy.c — DNS siyasəti nümunəsiDNS sorğularına icazə vermək, onları bloklamaq və atmaq, IP cavabları yaratmaq, cavab ünvanını və TTL-i dəyişmək. Linux üçün yığma və sınaq əmrləri də daxildir.
mudfish_dns_module.h — Modulun başlıq faylıABI elanları, hook imzaları, əməliyyat sabitləri və bufer sahibliyi qaydaları.

Yığmadan əvvəl policy.c və mudfish_dns_module.h fayllarını eyni qovluğa endirin. Nümunədəki yığma əmri Linux üçün .so kitabxanası yaradır.