DNS SOA kaydı nedir?

Bir domainin DNS kayıtlarını dig veya çevrimiçi bir araçla incelediyseniz, muhtemelen ne işe yaradığını tam bilmeden bir SOA kaydıyla karşılaşmışsınızdır. Oysa her DNS bölgesinin en önemli kayıtlarından biridir: bölge üzerinde kimin otorite olduğunu, ikincil DNS sunucularının nasıl senkronize olması gerektiğini ve birincil sunucu çökerse verilerin ne kadar süre geçerli kalacağını belirler.

SOA kaydı neleri içerir

SOA, Start of Authority yani Otorite Başlangıcı anlamına gelir. Her DNS bölgesi tam olarak bir SOA kaydı içermelidir. Her zaman bölgenin en üstünde yer alır ve yedi ayrı alan içerir. Tipik bir SOA kaydı şöyle görünür:

example.com.  3600  IN  SOA  ns1.example.com. admin.example.com. (
                          2025052901  ; Serial
                          7200        ; Refresh
                          3600        ; Retry
                          1209600     ; Expire
                          86400 )     ; Minimum TTL

Her alanı inceleyelim:

  • MNAME (ns1.example.com.): bölgenin birincil yetkili DNS sunucusu. İkincil sunucuların güncelleme almak için bağlandığı sunucudur
  • RNAME (admin.example.com.): bölge yöneticisinin e-posta adresi, ancak @ yerine nokta kullanılır. Burada [email protected]'a karşılık gelir. Yerel kısım nokta içeriyorsa, ters eğik çizgiyle escape edilmelidir (ad\.soyad.example.com.)
  • Serial (2025052901): bölgenin sürüm numarası. Her değişiklik bu numarayı artırmalıdır, aksi takdirde ikincil sunucular güncellemeyi algılamaz. Yaygın format YYYYMMDDNN'dir (tarih artı günlük sayaç)
  • Refresh (7200): ikincil sunucuların kontrol aralığı, saniye cinsinden. Burada her 2 saatte bir
  • Retry (3600): Refresh kontrolü başarısız olursa yeniden denemeden önceki bekleme süresi. Burada 1 saat
  • Expire (1209600): ikincil sunucunun birinciye ulaşamadığı takdirde bölge için yanıt vermeyi bırakacağı süre. Burada 14 gün. Bu süre aşılınca ikincil, verilerini eski sayar ve bölgeyi servis etmeyi tamamen durdurur
  • Minimum TTL (86400): RFC 2308'den bu yana, bu alan negatif yanıtların (NXDOMAIN) ne kadar süre önbellekte tutulacağını belirler. Burada 24 saat. Birisi var olmayan bir alt alan adını sorgularsa, çözümleyici bu "mevcut değil" yanıtını 24 saat önbellekte tutar

Seri numarası neden bu kadar önemli

Serial, pratikte muhtemelen en çok sorun çıkaran alandır. İkincil sunucu bir Refresh döngüsünde birincil sunucuyla iletişim kurduğunda, kendi yerel seri numarasını birincilinkiyle karşılaştırır. Birincilinkisi daha yüksekse, ikincil kendini güncellemek için bir bölge transferi (AXFR veya IXFR) başlatır. Değişmemişse hiçbir şey yapmaz.

Klasik hata: birincil sunucuda bir DNS kaydını değiştirip serial'i artırmamak. Sonuç olarak birincil doğru sürüme sahip olur ama ikinciller saatlerce hatta günlerce eski sürümü sunar. Kullanıcılar hangi sunucuyu sorgularlarsa farklı yanıtlar alır ve kimse SOA'yı kontrol etmeyi düşünmezse sorun teşhis edilmesi güçtür.

YYYYMMDDNN formatı bir konvansiyondur, zorunluluk değil. Serial 32 bitlik bir tamsayıdır, yani 0 ile 4.294.967.295 arasında her değer çalışır. Ancak tarih formatı önerilir çünkü hataları görünür kılar: 2025052901 serialı açıkça 29 Mayıs 2025'in ilk değişikliğidir.

Refresh, Retry ve Expire nasıl birlikte çalışır

Bu üç değer DNS bölgeleri için bir dayanıklılık sistemi oluşturur. Refresh normal senkronizasyon ritmini belirler. Retry, Refresh başarısız olduğunda devreye girer. Expire son güvence ağıdır: birincil sunucuyla bu süre boyunca bağlantı kurulamazsa, ikincil potansiyel olarak eski veri sunmaktansa hiç yanıt vermemeyi tercih eder.

Standart bir domain için RFC 1912 şunları önerir:

  • Refresh: 3.600 ile 86.400 saniye (1 saat ile 24 saat)
  • Retry: 600 ile 3.600 saniye (10 dakika ile 1 saat)
  • Expire: 1.209.600 ile 2.419.200 saniye (2 ile 4 hafta)
  • Minimum TTL: 3.600 ile 86.400 saniye (1 saat ile 24 saat)

Bölgeniz sık değişiyorsa (örneğin bir CDN veya dinamik yük dengeleme altyapısı), Refresh'i 300 veya 600 saniyeye düşürün. Stabilse 86.400 gayet iyi çalışır ve birincil sunucu üzerindeki yükü azaltır.

Bir domainin SOA kaydı nasıl kontrol edilir

Linux ve macOS'ta dig komutu en pratik olanıdır:

dig SOA example.com

Windows'ta nslookup kullanın:

nslookup -type=SOA example.com

Yanıt yedi SOA alanının tümünü gösterir. Özellikle serial'e dikkat edin: eski veya donmuş görünüyorsa, DNS değişikliklerinin düzgün yayılmamasının nedeni çoğu zaman budur.

Yaygın SOA hataları

Pratikte düzenli olarak karşılaşılan bazı sorunlar:

  • RNAME nokta yerine @ kullanır, bu da sözdizimini bozar. [email protected], SOA'da admin.example.com. olarak yazılmalıdır
  • Yedek geri yüklendikten sonra serial yanlışlıkla düşürülür. İkinciller, birincil sunucunun serialı kendi yerel değerlerinin üstüne çıkana kadar senkronizasyonu reddeder
  • Expire çok kısa ayarlanmıştır (birkaç saat). Birincil hafta sonu çökerse, ikinciller birisi müdahale edebilmeden yanıt vermeyi durdurur
  • Minimum TTL 0'a ayarlanmıştır, yani çözümleyiciler negatif yanıtları önbelleğe almaz. Var olmayan bir alt alan adına yapılan her sorgu tam bir gidiş dönüş üretir, bu da bir tarama veya saldırı sırasında DNS sunucularınızı aşırı yükleyebilir
SOA kaydı bir domain yapılandırılırken nadiren ilk düzenlenen kayıttır, ancak "DNS neden yayılmıyor" sorusunu genellikle o açıklar. Karmaşık nedenler aramadan önce serial'in düzgün artırılıp artırılmadığını ve Refresh ile Expire değerlerinin kullanımınıza uygun olup olmadığını kontrol edin.