Wildcard DNS Kaydı Nedir? *.alanadi Gerçekte Nasıl Çalışır
Wildcard (joker) DNS kaydı nedir, neyi eşleştirir, neyi eşleştirmez? Var olan adlar, boş ara düğümler, MX ve TXT tuzakları, dig ile test ve sık hatalar.
Yayınlanma: · 6 dk okuma
Wildcard (joker) DNS kaydı, adı * etiketiyle başlayan kayıttır: *.example.com gibi. Yetkili sunucu bu kaydı, zone'da var olmayan adlar için yanıt üretmekte kullanır: herhangibirsey.example.com adını sorarsınız, zone'da herhangibirsey diye bir ad yoksa joker kaydın verisini, sorduğunuz adla birlikte alırsınız. İşin özü bu koşuldadır. Wildcard, var olan adları ezen ya da eksiklerini tamamlayan bir kalıp değildir; aksi halde NXDOMAIN dönecek adlar için bir varsayılandır. Wildcard ile yaşanan sürprizlerin çoğu bunu unutmaktan çıkar.
Kurallar RFC 1034'te tanımlanmış, RFC 4592 ile ayrıntılı biçimde netleştirilmiştir.
Üzerinde düşünmek için bir zone
$ORIGIN example.com.
@ 3600 IN A 192.0.2.10
www 3600 IN A 192.0.2.10
shop 3600 IN TXT "site-verification=abc123"
api.eu 3600 IN A 192.0.2.30
dev 3600 IN NS ns1.dev-dns.example.
* 3600 IN A 192.0.2.20
Farklı sorgulara dönen yanıtlar:
| Sorgu | Yanıt | Neden |
|---|---|---|
blog.example.com A |
192.0.2.20 |
blog yok, wildcard devreye girer |
a.b.example.com A |
192.0.2.20 |
ne b ne a.b var; DNS wildcard'ı birden çok etiketi kapsar |
blog.example.com MX |
NODATA (boş yanıt, NOERROR) | wildcard adı eşleştirir ama MX verisi yoktur |
shop.example.com A |
NODATA | shop var (TXT kaydı var), wildcard uygulanmaz |
eu.example.com A |
NODATA | api.eu var olduğu için eu boş ara düğüm olarak vardır |
x.eu.example.com A |
NXDOMAIN | var olan en yakın üst ad eu.example.com, *.eu.example.com ise yok |
test.dev.example.com A |
dev nameserver'larına yönlendirme |
devredilmiş alt zone bu zone'un wildcard'ının dışındadır |
example.com MX |
NODATA | kök alan adı wildcard'ın "altında" değildir |
Tablonun arkasındaki kurallar
Yalnızca en soldaki etiket, yalnızca tam etiket
*.example.com bir wildcard'dır. www.*.example.com ve foo*.example.com değildir: oradaki yıldız, adın içindeki tuhaf bir karakterden ibarettir. DNS'te kısmi eşleşme ya da düzenli ifade yoktur.
Var olan adlar asla eşleşmez
Bir alt alan adı herhangi bir kayıt türüyle varsa, o ad için bütün türlerde wildcard devre dışıdır. Yukarıdaki zone'da shop.example.com adının yalnızca TXT kaydı var; bu yüzden A kaydı sorgusu wildcard adresini değil, boş yanıt döndürür. Wildcard hakkında en sık gelen soru tam olarak budur: "Alt alan adına doğrulama için TXT ekledim, alt alan adı açılmaz oldu."
Boş ara düğümler de vardır
Bir adın altında bir şey varsa o ad da var sayılır. api.eu.example.com zone'da olduğu için eu.example.com, hiçbir kaydı olmasa da "boş ara düğüm" (empty non-terminal) olarak vardır. Bu yüzden *.example.com ne eu.example.com ne de x.eu.example.com için yanıt verir: ikincisinde sunucu var olan en yakın üst adı (closest encloser; burada eu.example.com) bulur ve wildcard'ı doğrudan onun altında, *.eu.example.com adında arar. Öyle bir kayıt yoktur, yanıt NXDOMAIN olur.
E-posta ve sertifika kurulumlarında can yakan pratik sonucu: _dmarc.news.example.com ya da _acme-challenge.news.example.com oluşturmak, news.example.com adını boş ara düğüme çevirir. news o ana kadar wildcard sayesinde çözümleniyorsa, alt çizgili kaydı eklediğiniz anda çözümlenmez olur. Çözüm, news için açık kayıtlar yazmaktır.
Birden çok etiket: sertifikalardan farklı
DNS wildcard'ı bir ya da daha fazla etiketi eşleştirir: y.example.com var olmadığı sürece x.y.example.com sorgusunu *.example.com yanıtlar. Wildcard sertifika ise farklıdır: sertifikadaki *.example.com tam olarak tek bir etiketi karşılar; y.example.com için geçerlidir, x.y.example.com ve example.com için geçerli değildir. İkisi, yalnızca yıldız işaretini paylaşan ayrı mekanizmalardır. Wildcard sertifikaya ihtiyacınız varsa şunu bilin: Let's Encrypt bunları yalnızca DNS-01 doğrulamasıyla verir ve CAA kayıtlarında onlar için ayrı bir issuewild etiketi vardır.
Devredilmiş alt zone'lar kapsanmaz
NS kesiminin altında üst zone'un yetkisi yoktur; wildcard'ı da orada geçmez. Alt zone wildcard istiyorsa kendi kaydını yazmalıdır.
Her kayıt türüyle çalışır
Wildcard yalnızca adres kayıtlarıyla sınırlı değildir. * IN CNAME tenants.saas.example., * IN MX 10 mail.example.com. ve * IN TXT "…" kayıtlarının hepsi geçerlidir. Kural önce ad düzeyinde değerlendirilir, sonra wildcard üzerinde istenen tür aranır; yukarıda blog.example.com MX sorgusunun NXDOMAIN değil NODATA olmasının nedeni budur.
Wildcard ne zaman doğru araçtır?
- Çok kiracılı SaaS: her müşteriye
musteri.app.example.com, her kayıtta DNS değişikliği yapmadan. - Geliştirme ve önizleme ortamları: CI'ın oluşturduğu
feature-123.preview.example.comgibi adlar. - Açılış sayfasına ya da yönlendirmeye giden genel karşılayıcı: yanlış yazılan alt alan adları da işe yarar bir yere varsın diye.
Üçünde de web sunucusu (ve sertifika) rastgele sunucu adlarını karşılamaya hazır olmalıdır; DNS ziyaretçiyi yalnızca kapıya kadar getirir.
Tuzaklar
Wildcard MX. * IN MX ile var olmayan her alt alan adı posta kabul eden bir alan adına dönüşür. kisi@yanlisyazim.example.com adresine gönderilen posta gönderende geri dönmek yerine sizin sunucunuza gelir; spam gönderenler de uydurma herhangi bir alt alan adını "posta hizmeti olan" gönderen alan adı olarak kullanabilir. Yalnızca alt alan adları için gerçekten genel posta karşılıyorsanız kullanın. Ayrıca wildcard MX kaydı, başka kayıtlarla var olan alt alan adlarına uygulanmaz.
Wildcard TXT. TXT wildcard'ı, zone altındaki var olmayan adlara yapılan her TXT sorgusunu yanıtlar: _dmarc.sub.example.com, selector._domainkey.sub.example.com, _acme-challenge.sub.example.com hepsi aynı metni alır. Düzgün yazılmış istemciler beklenen etiketle başlamayan veriyi yok sayar, ama hata ayıklamak karışır. Açıkça yazılmış alt çizgili kayıtlar wildcard'ın önüne geçer, çünkü var olan adlar asla eşleşmez.
Var olmayan alt alan adları için SPF. Wildcard TXT kaydının meşru bir kullanımı * IN TXT "v=spf1 -all" yazmaktır: uydurma alt alan adları posta göndermez demektir. Sınırı yine aynıdır: başka kayıtlarla var olan alt alan adları (www, shop) kapsanmaz; aynı beyanı orada da istiyorsanız kendi SPF kayıtlarını yazmanız gerekir.
Yazım hataları çözümlenir. Wildcard yokken wwww.example.com NXDOMAIN döner ve hata hemen görülür. Wildcard varken ad çözümlenir, yanlış yazılmış bir ada bakan izleme kontrolü yeşil kalır, kaldırılan bir alt alan adı hata vermek yerine sessizce wildcard hedefine düşer.
Envanter ve tarama. Aday adları deneyerek alt alan adı bulan araçlar her adayı "var" görür. Ciddi araçlar bunu önce rastgele bir etiket sorgulayarak anlar; kendi envanter betikleriniz de aynısını yapmalıdır.
Üçüncü tarafa wildcard CNAME. * kaydını bir hosting platformuna yöneltmek, olası bütün alt alan adlarınızı o platforma göndermek demektir. Platform, kendisine yönelen herhangi bir sunucu adını herhangi bir müşterisinin sahiplenmesine izin veriyorsa başka biri sizin alan adınız altında içerik yayınlayabilir. Bu, subdomain takeover yazısında anlatılan riski büyütür; sunucu adı başına açık kayıt yazmayı ya da sunucu adı sahipliğini doğrulayan bir platformu tercih edin.
Wildcard ve DNSSEC
İmzalı zone'larda wildcard için sizin yapmanız gereken bir şey yoktur. Genişletilmiş yanıtın DNSSEC imzası, etiket sayısı alanıyla genişletmeyi belli eder (RRSIG, kayıt sahibinin sorduğunuz addan daha az etiketi olduğunu söyler); yanıta eşlik eden NSEC ya da NSEC3 kaydı da tam adın var olmadığını kanıtlar. Böylece doğrulayıcı, wildcard'ın meşru biçimde uygulandığını teyit edebilir.
Wildcard kaydı nasıl test edilir?
Var olması imkânsız bir ad sorgulayın:
$ dig +short anything-random-123.example.com
192.0.2.20
Yanıt geliyorsa wildcard vardır. Başka türlerle var olan bir adla karşılaştırın:
$ dig shop.example.com MX
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4711
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
Boş yanıtlı NOERROR, NODATA demektir: ad var, tür yok, wildcard'a hiç bakılmadı.
Wildcard kaydının kendisini de sorgulayabilirsiniz. Kabuğun genişletmemesi için tırnak içine aldığınızda yıldız, düz bir etiket olarak sorgulanır:
$ dig +short '*.example.com'
192.0.2.20
Son olarak derin bir adı ve var olan bir alt alan adının altındaki bir adı deneyin (a.b.example.com, x.www.example.com). İlki eşleşmeli; ikincisi NXDOMAIN dönmelidir, çünkü www vardır ve kendi wildcard'ı yoktur.
Sık yapılan hatalar
- Zaten TXT, MX ya da başka bir kaydı olan alt alan adına wildcard'ın A kaydı sağlamasını beklemek.
_dmarc.subya da_acme-challenge.subekleyipsubadının artık çözümlenmemesine şaşırmak.*.example.comkaydınınexample.comadını kapsadığını sanmak. Ne DNS'te ne sertifikada kapsar.- DNS wildcard'ı karşılıyor diye wildcard sertifikanın
a.b.example.comadını da karşıladığını varsaymak. - Zone adını kendisi ekleyen bir panele
*.example.com.yazıp*.example.com.example.comüretmek. - Nameserver taşırken wildcard'ı unutmak; tek satırdır ve dışa aktarımda kolayca gözden kaçar.
- Alt alan adı envanteri tutmamak için wildcard kullanmak. Envantere yine ihtiyacınız vardır; yalnızca çıkarmasını zorlaştırmış olursunuz.
OrbitProbe ile kontrol edin
OrbitProbe DNS sorgulama aracına alan adınızın uydurma bir alt alan adını yazın: herkese açık çözümleyiciler kayıt döndürüyorsa yanıtı bir wildcard veriyordur; araç hangi türleri hangi TTL ile sunduğunu gösterir. Ardından gerçekten kullandığınız bir alt alan adını sorgulayıp karşılaştırın. Uydurma adlar adres döndürürken gerçek bir alt alan adının döndürmemesi, "var olan ad" kuralının iş başında olduğunu gösterir. Kayıt türlerinin kendisi için DNS kayıt türleri yazısına bakın.