Alan Adı DNS Kancaları

1.7k görüntülenme Markdown

Alan adının nereyi gösterdiğini kuran on kanca: ad sunucuları, DNS kayıtları, DNSSEC ve alt ad sunucuları.

Genel Bakış

Bu dört alanın ortak yanı şu: hepsi canlı çalışır. Okuma da yazma da sağlayıcıya gerçek bir istek gönderir, bizim tarafımızdaki kayıt yalnız aynadır.

Deseni bir kez öğrenin, dördü de aynı: yazma işleminin önünde bir kapı, ardında bir olay; okuma tarafında ise listeyi referansla veren bir filtre.

Referans

Ad sunucusu yazımını durdurma

gatedomain.nameservers_save
AdminServices::save_nameservers() ClientDomains:197 iki yoldan da

Ad sunucusu listesi sağlayıcıya yazılmadan önce çalışır; girdiler doğrulanmıştır. Panelden ve müşteri panelinden gelen yolların ikisi de buradan geçer.

Parametreler 2
$servicearrayAlan adı hizmet kaydı.
$dnsarrayYazılacak ad sunucusu listesi. Boş olmayan ns1..ns4 değerleri, sırayla.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin hata olarak fırlatılır ve sağlayıcı çağrılmaz. null ya da boş string akışı sürdürür.
Dinleyici
Hook::add('gate:domain.nameservers_save', 10, function ($service, $dns) {
    // Transfer surerken NS degistirmek transferi bozar.
    if (($service['status'] ?? '') === 'transfer')
        return 'Transfer surerken ad sunucusu degistirilemez.';

    return null;
});

Ad sunucusu değişikliğini izleme

actiondomain.nameservers_saved
AdminServices::save_nameservers() yalnız başarıda

Sağlayıcı çağrısı başarılı döndükten, değerler hizmete işlendikten ve etkinlik kaydı yazıldıktan sonra çalışır.

Parametreler 2
$servicearrayAlan adı hizmet kaydı.
$dnsarraySağlayıcıya yazılan liste.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:domain.nameservers_saved', 10, function ($service, $dns) {
    DnsMonitor::resync($service['name'] ?? '', $dns);
});

DNS kaydı değişikliğini durdurma

gatedomain.dns_record_save
AdminServices::save_dns_record() AdminServices::delete_dns_record() üç işlem tek kanca

Bir DNS kaydı sağlayıcıda değişmeden önce çalışır. Ekleme, güncelleme ve silmenin üçü de aynı kancadan geçer; hangisi olduğunu üçüncü parametre söyler.

Parametreler 3
$servicearrayAlan adı hizmet kaydı.
$recordarrayİşlenecek kayıt: type, name, value, identity. Güncellemede ayrıca ttl ve priority.
$taskstringİşlem: create, update ya da delete.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin hata olarak fırlatılır ve sağlayıcı çağrılmaz. null ya da boş string akışı sürdürür.
Dinleyici
Hook::add('gate:domain.dns_record_save', 10, function ($service, $record, $task) {
    $type = strtoupper((string) ($record['type'] ?? ''));

    // Posta akisini kesen silmeyi durdur; ekleme ve guncelleme serbest.
    if ($task === 'delete' && $type === 'MX')
        return 'MX kaydi silinemez; once posta ayarlarini degistirin.';

    return null;
});

DNS kaydı değişikliğini izleme

actiondomain.dns_record_saved
AdminServices::save_dns_record() yalnız başarıda

Sağlayıcıdaki değişiklik başarıyla tamamlandıktan sonra çalışır.

Parametreler 3
$servicearrayAlan adı hizmet kaydı.
$recordarrayİşlenen kayıt.
$taskstringYapılan işlem.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:domain.dns_record_saved', 10, function ($service, $record, $task) {
    Audit::dns($service['name'] ?? '', $task, $record);
});

DNSSEC kaydı işlemini durdurma

gatedomain.dnssec_save
AdminServices ekleme ve silme

Bir DS kaydı sağlayıcıda eklenmeden ya da silinmeden önce çalışır.

Parametreler 3
$servicearrayAlan adı hizmet kaydı.
$recordarrayDS kaydı: digest, key_tag, digest_type, algorithm. Silmede ayrıca identity.
$verbstringcreate ya da delete.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin hata olarak fırlatılır ve sağlayıcı çağrılmaz. null ya da boş string akışı sürdürür.
Dinleyici
Hook::add('gate:domain.dnssec_save', 10, function ($service, $record, $verb) {
    // Son DS kaydini silmek dogrulamayi komple kapatir.
    if ($verb === 'delete' && Acme::dsCount((int) ($service['id'] ?? 0)) <= 1)
        return 'Son DNSSEC kaydi silinemez.';

    return null;
});

DNSSEC değişikliğini izleme

actiondomain.dnssec_saved
AdminServices yalnız başarıda

DS kaydı sağlayıcıda işlendikten sonra çalışır.

Parametreler 3
$servicearrayAlan adı hizmet kaydı.
$recordarrayİşlenen DS kaydı.
$verbstringYapılan işlem.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:domain.dnssec_saved', 10, function ($service, $record, $verb) {
    Audit::dnssec($service['name'] ?? '', $verb, $record['key_tag'] ?? '');
});

Alt ad sunucusu işlemini durdurma

gatedomain.child_ns_save
ClientDomains ekleme ve silme

Bir alt ad sunucusu sağlayıcıya eklenmeden ya da silinmeden önce çalışır.

Parametreler 4
$servicearrayAlan adı hizmet kaydı.
$hoststringTam nitelikli ad, örneğin ns1.example.com.
$ipstringAda bağlı adres. Silme işleminde boş gelebilir.
$verbstringcreate ya da delete.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin hata olarak fırlatılır ve sağlayıcı çağrılmaz. null ya da boş string akışı sürdürür.
Dinleyici
Hook::add('gate:domain.child_ns_save', 10, function ($service, $host, $ip, $verb) {
    if ($verb === 'delete') return null;

    // Kendi ag blogunuz disindaki adrese glue vermeyin.
    if (!Acme::ownsIp($ip)) return 'Bu IP adresi bize ait degil.';

    return null;
});

Alt ad sunucusu değişikliğini izleme

actiondomain.child_ns_saved
ClientDomains yalnız başarıda

Alt ad sunucusu sağlayıcıda işlendikten sonra çalışır.

Parametreler 4
$servicearrayAlan adı hizmet kaydı.
$hoststringİşlenen ad.
$ipstringAda bağlı adres.
$verbstringYapılan işlem.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:domain.child_ns_saved', 10, function ($service, $host, $ip, $verb) {
    Ipam::glue($verb, $host, $ip);
});

Alt ad sunucusu listesini değiştirme

filterdomain.child_ns_list
Hook::runRefs referansla

Sağlayıcıdan okunan liste normalleştirildikten sonra, ekrana gitmeden önce çalışır.

Parametreler 2
$listarrayrefNormalleştirilmiş liste: her satır ns ve ip anahtarlarını taşır. Şekli koruyun; ekran tarafı bu sözleşmeye göre gösterir.
$servicearrayAlan adı hizmet kaydı.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.child_ns_list', 10, function (&$list, $service) {
    // Sekli bozmadan sirala: ekran ns + ip anahtarlarini bekler.
    usort($list, fn ($a, $b) => strcmp($a['ns'] ?? '', $b['ns'] ?? ''));
});

DNSSEC listesini değiştirme

filterdomain.dnssec_records
Hook::runRefs referansla

Sağlayıcıdan okunan DS kayıtları normalleştirildikten sonra çalışır.

Parametreler 2
$recordsarrayrefNormalleştirilmiş kayıtlar: identity, digest, key_tag, digest_type, algorithm. Silme çağrısı identity alanını geri gönderir; onu düşürmeyin.
$servicearrayAlan adı hizmet kaydı.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.dnssec_records', 10, function (&$records, $service) {
    // identity alanini KORU: silme cagrisi kaydi onunla hedefler.
    $records = array_values(array_filter($records,
        fn ($r) => (int) ($r['algorithm'] ?? 0) !== 5));   // eski algoritmayi gizle
});

Tuzaklar

Tek kapı üç işlemi birden taşır

DNS kaydı kapısı ekleme, güncelleme ve silme için aynı kancadır. Üçüncü parametreyi okumazsanız "silmeyi engelle" diye yazdığınız kural eklemeyi de engeller. Aynı durum DNSSEC ve alt ad sunucusu kapıları için de geçerlidir: orada işlem türü dördüncü parametrededir.

Liste filtrelerinde şekli koruyun

Okuma filtreleri ekranın doğrudan gösterdiği diziyi verir. Anahtar adını değiştirmek ya da identity alanını düşürmek listeyi bozmakla kalmaz, silme çağrısını da hedefsiz bırakır: kayıt o alanla bulunur.

Kapı iki yoldan da geçilir

Ad sunucusu kapısı hem yönetim panelinden hem müşteri panelinden geçer. Kuralınızı "müşteri yapmasın" diye yazarsanız operatör de yapamaz. Hangi yoldan gelindiğini ayırmak istiyorsanız hizmet kaydına değil, çağıran bağlama bakın.

Yayılma anında değildir

Olay kancası sağlayıcının kabul ettiğini söyler, dünyanın o kaydı gördüğünü değil. Değişikliğin yayılması dakikalar sürer. Yeni değere göre iş yapan bir dinleyici, doğrulamayı hemen yaparsa eski cevabı alır.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.