DNS Kayıtlar

CNAME, A ve ALIAS: Kök Alan Adınıza Neden CNAME Ekleyemezsiniz

Er ya da geç herkes bu duvara çarpar. CDN'iniz veya platformunuz size bir ana bilgisayar adı verir — your-app.platform.example gibi bir şey — ve "alan adınızı buraya bir CNAME ile yönlendirin" der. Siz de yourdomain.com için bir CNAME eklemeye gidersiniz ve DNS sağlayıcınız reddeder. Ya da kabul eder ve e-postanız çalışmayı durdurur. Ya da kimsenin size hiç açıklamadığı ALIAS kaydı adında bir şey sunar.

Bu sağlayıcınızın zorluk çıkarması değil. 1987'den kalma ve hâlâ her şeyi yöneten bir kural, ve nedenini bir kez gördüğünüzde, bu sorun kategorisinin tamamı gizemli olmaktan çıkar.

Üç kayıt türü, kısaca

A kaydı. Bir adı bir IPv4 adresine eşler. yourdomain.com → 203.0.113.5. Hepsi bu. DNS'in yaptığı en basit şey.

AAAA kaydı. Aynısı, IPv6 için. A kayıtları için doğru olan her şey burada da doğrudur.

CNAME kaydı. Bir adı başka bir ada eşler. www.yourdomain.com → your-app.platform.example. Bu bir takma addır ve gerçekten kullanışlıdır: platform IP adreslerini değiştirdiğinde, hiçbir şey yapmanıza gerek kalmaz. Onların adına işaret ettiniz, arkasındakini onlar yönetir.

Bu dolaylılık, tüm değerin kaynağıdır. Aynı zamanda kısıtlamanın da kaynağıdır.

Her şeyi bozan kural

İşte kural, açıkça ifade edilmiş:

Bir CNAME kaydına sahip bir ad, başka hiçbir kayda sahip olamaz.

"Olmamalı" değil. Olamaz. Bu, orijinal DNS RFC'lerinde belirtilmiş ve daha sonra pekiştirilmiştir. Bir CNAME "aynı zamanda şu isimle de bilinir" anlamına gelmez — "bu ad o addır, gidip orada sor" anlamına gelir. Bir çözümleyici bir CNAME gördüğünde, orijinal adı tamamen terk eder ve aramayı hedefte yeniden başlatır. Orijinal addaki başka herhangi bir kayıt, tanım gereği erişilemezdir, bu yüzden spesifikasyon onun var olmasını tamamen yasaklar.

Şimdi bunu kök alan adınıza uygulayın.

Bölge apex'iniz — önünde hiçbir şey olmayan yourdomain.com — kayıtlara sahip olmak zorundadır. İsteğe bağlı değil. Her bölgenin apex'inde bir SOA kaydı ve NS kayıtları olmalıdır. Onu bir bölge yapan şey budur. Onlar olmadan sunulacak hiçbir şey yoktur.

Yani:

  • Apex'in SOA ve NS kayıtları olmalıdır.
  • Bir CNAME başka kayıtlarla bir arada bulunamaz.
  • Dolayısıyla apex bir CNAME'e sahip olamaz.

Açıklamanın tamamı bu. Bu, sağlayıcınızın bir kısıtlaması ya da düzeltilmeyi bekleyen eski bir tuhaflık değildir. Bu aritmetik. Ve ayrıca, eğer apex'inize bir şekilde bir CNAME zorlasaydınız, bu süreçte MX kayıtlarınızı, SPF TXT kaydınızı ve alan adı doğrulama kayıtlarınızı da yok edecektiniz — bunların hepsi de apex'te yaşıyor.

Bu aynı zamanda www.yourdomain.com'un bir CNAME olarak neden sorunsuz çalıştığının nedenidir. O apex değildir. SOA'sı yoktur, NS'si yoktur ve orada var olmak zorunda olan başka hiçbir şeyi yoktur. Bir takma ad olmakta özgürdür.

Apex'te CNAME çakışması diyagramı

Peki ALIAS kaydı nedir?

Sağlayıcılar bunu açıklamaktan yoruldular, bu yüzden bir çözüm geliştirdiler. Birkaç isim altında göreceksiniz:

  • ALIAS (Route 53, DNSimple ve diğerleri)
  • ANAME (bazı sağlayıcılar)
  • CNAME flattening (Cloudflare)

Hepsi aynı fikir. Hiçbiri gerçek bir DNS kayıt türü değildir. Hiçbir RFC'de ALIAS yoktur ve hiçbir yerde hiçbir çözümleyici bunun ne olduğunu bilmez.

Gerçekte olan şu: apex'inizde bir ana bilgisayar adına işaret eden bir ALIAS yapılandırıyorsunuz. Bir sorgu geldiğinde, DNS sağlayıcınız o ana bilgisayar adını kendisi, gerçek zamanlı olarak çözer ve sonuçtaki IP adreslerini sıradan A kayıtları olarak döndürür. İstemci normal bir A kaydı görür ve hiçbir şeyden haberi olmaz. Dolaylılık, kimse sormadan önce sunucu tarafında gerçekleşmiştir.

Gerçek bir soruna temiz bir çözümdür ve çoğu zaman doğru cevaptır. Ama bedelsiz değildir.

Çözümleme, kullanıcınızın konumundan değil, DNS sağlayıcınızın konumundan gerçekleşir. Kimsenin bahsetmediği ödünleşim budur. Hedef ana bilgisayar adı GeoDNS veya CDN tabanlı yönlendirme kullanıyorsa — ki neredeyse kesinlikle kullanıyordur, genellikle bir IP yerine bir ana bilgisayar adına işaret etmenizin nedeni budur — o zaman kimin sorduğuna bağlı olarak farklı adresler döndürür. Normal bir CNAME ile, kullanıcının çözümleyicisi zinciri takip eder, bu yüzden CDN kullanıcıya yakın bir şey görür ve yakın bir edge düğümü döndürür. ALIAS ile, DNS sağlayıcınız zinciri takip eder, bu yüzden CDN DNS sağlayıcınızı görür ve ona yakın bir edge düğümü döndürür.

Sonuç, çalışan ama bazı kullanıcıları yanlış bölgeye yönlendiren bir site olur. Sağlayıcılar bunu birçok konumdan çözümleyerek ve istemci alt ağ bilgisini ileterek, değişken başarıyla hafifletir. Bu mekanizmanın var olduğunu bilmeye değer, çünkü aksi halde "CDN kullanıcılarımı başka bir kıtaya gönderiyor" ifadesi son derece kafa karıştırıcı kalır.

TTL davranışı sağlayıcının kararıdır, sizin değil. Yanıtı sentezliyorlar, bu yüzden ne kadar süre önbelleğe alacaklarına ve hedefi ne sıklıkla yeniden çözümleyeceklerine kendileri karar veriyor. Hedef IP değiştirirse, ne kadar hızlı takip edeceğiniz onların uygulamasına bağlıdır.

Taşınmaz. ALIAS sağlayıcıya özel bir yapılandırmadır. Bölgenizi başka bir yere taşıyın, sizinle gelmez — yeni sağlayıcının konuştuğu hangi lehçe ise onunla yeniden yapılandırırsınız, ya da hiç desteklemediğini keşfedersiniz.

Sürekli çiğnenen iki CNAME kuralı daha

MX ve NS kayıtları asla bir CNAME'e işaret etmemelidir. Bir MX veya NS kaydının hedefi, bir adres kaydına — A veya AAAA'ya — sahip bir ad olmalıdır. Bir MX'i bir CNAME'e yönlendirmek açıkça yasaktır ve sonuçları temiz değil, tutarsızdır: bazı posta sunucuları yine de takip eder, diğerleri reddeder, böylece bazı gönderenlerden posta teslim edilirken diğerlerinden belirgin bir düzen olmadan başarısız olur.

Bu, çalışıyormuş gibi göründüğü için sert bir şekilde ısırır. Kendi testleriniz geçer. Gönderenlerin bir kısmı size ulaşamaz ve bunu haftalar sonra öğrenirsiniz.

CNAME zincirleri yasaldır ama size mal olur. Bir CNAME, kendisi de bir CNAME olan bir ada işaret edebilir. Her bağlantı, birisi bir adres almadan önce başka bir gidiş-dönüştür ve çözümleyiciler vazgeçmeden önce kaç bağlantı takip edeceklerine bir sınır koyar. İki sıçrama genellikle sorun değildir. Bir satıcıya işaret eden, o da başka bir satıcıya işaret eden, o da bir CDN'e işaret eden zincirler yavaş ve kırılgan hale gelir ve aralıklı DNS sorunları gibi görünen şekillerde başarısız olur.

Bir zincirin gerçekte ne kadar derine indiğinden emin değilseniz, bir DNS Sorgulama her bağlantıyı gösterir — adınızdan nihai adrese kadar olan tam zincir, ki bu genellikle kimsenin fark ettiğinden daha uzundur.

Pratikte seçim yapmak

Durum Kullanın
Sabit bir IP adresiniz var A kaydı
Bir platforma veya CDN'e işaret eden alt alan adı CNAME
Bir platforma veya CDN'e işaret eden apex ALIAS / ANAME / flattening
Apex, ve sağlayıcınızın ALIAS'ı yok Apex'i www'ye yönlendirin, www'yi CNAME yapın
MX veya NS hedefi Sadece A kaydı. Asla CNAME değil

Dördüncü satır eski usul cevaptır ve hâlâ tamamen geçerlidir: apex'te bir yönlendirme sunun, gerçek siteyi www'ye koyun ve www'yi CNAME yapın. Birçok büyük site tam olarak bunu yapar. Bir yönlendirmeye mal olur ve tüm sorunu atlatır.

Zihinsel model

Bir CNAME, başka şeylerin yanına asabileceğiniz bir işaretçi değildir. Bu, tüm ad için bir yönlendirmedir — ve yönlendirilmiş bir ad aynı zamanda bir posta hedefi, bir bölge apex'i veya başka bir şey olamaz.

Geri kalan her şey buradan gelir. Apex bir CNAME olamaz çünkü apex'in başka şeyler olması gerekir. ALIAS var çünkü bu elverişsizdir. ALIAS'ın coğrafi konum tuhaflıkları vardır çünkü başka biri sizin adınıza aramayı yapıyor. MX bir CNAME'e işaret edemez çünkü bir yönlendirme bir adres değildir.

Tek bir kural, birkaç sonuç — ve yeterince zaman geçtikten sonra artık onu her seferinde yeniden türetmenize gerek kalmaz. Bir şey bir CNAME'i reddettiğinde, ilk soru şudur: o adda başka ne var olmak zorunda? Cevap neredeyse her zaman açıklamanın kendisidir.

Bu rehberde kullanılan araçlar

← Rehberler