Alan Adı DNS Kancaları
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
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.
ns1..ns4 değerleri, sırayla.null ya da boş string akışı sürdürür.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
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.
Hook::add('action:domain.nameservers_saved', 10, function ($service, $dns) {
DnsMonitor::resync($service['name'] ?? '', $dns);
});DNS kaydı değişikliğini durdurma
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.
type, name, value, identity. Güncellemede ayrıca ttl ve priority.create, update ya da delete.null ya da boş string akışı sürdürür.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
Sağlayıcıdaki değişiklik başarıyla tamamlandıktan sonra çalışır.
Hook::add('action:domain.dns_record_saved', 10, function ($service, $record, $task) {
Audit::dns($service['name'] ?? '', $task, $record);
});DNSSEC kaydı işlemini durdurma
Bir DS kaydı sağlayıcıda eklenmeden ya da silinmeden önce çalışır.
digest, key_tag, digest_type, algorithm. Silmede ayrıca identity.create ya da delete.null ya da boş string akışı sürdürür.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
DS kaydı sağlayıcıda işlendikten sonra çalışır.
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
Bir alt ad sunucusu sağlayıcıya eklenmeden ya da silinmeden önce çalışır.
ns1.example.com.create ya da delete.null ya da boş string akışı sürdürür.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
Alt ad sunucusu sağlayıcıda işlendikten sonra çalışır.
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
Sağlayıcıdan okunan liste normalleştirildikten sonra, ekrana gitmeden önce çalışır.
ns ve ip anahtarlarını taşır. Şekli koruyun; ekran tarafı bu sözleşmeye göre gösterir.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
Sağlayıcıdan okunan DS kayıtları normalleştirildikten sonra çalışır.
identity, digest, key_tag, digest_type, algorithm. Silme çağrısı identity alanını geri gönderir; onu düşürmeyin.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
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.
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.
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.
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.
İlgili Makaleler
- Alan Adı Edinme Kancaları
- Alan Adı Kancaları
- Kanca Dinleyicisi Yazma
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.