Terminali açtınız, dig yazdınız ve A kaydı yerine üç harfli bir kod döndü. O anda aklınızı iki soru kaplar: bu kod tam olarak ne anlama geliyor ve sorun benim sunucumda mı yoksa başka bir yerde mi? DNS hata kodu aslında çözümleyicinin resmi yanıtıdır, belirsiz bir mesaj değil. Her kodun hangi katmandan geldiğini bilirseniz, saniyeler içinde kontrol yönünü bulursunuz.
DNS hata kodu nereden gelir
Her DNS yanıtında RCODE adında dört bitlik bir alan vardır. Sıfır değeri NOERROR anlamına gelir, diğer değerler ise yolda bir şeyin doğru gitmediğini gösterir. Bu kodu authoritative server üretebilir, ara çözümleyici üretebilir ve bazı durumlarda yerel çözümleyiciniz üretir. İşin anahtarı tam da bu noktadır: DNS hata kodu her zaman alan adının sahibi olan sunucudan gelmez.
Ham kodu görmek için dig seçeneklerini kullanın:
dig +noall +comments example.com A
dig +short example.com A
dig @1.1.1.1 example.com A +norecurse
comments bölümündeki status: satırı aynı RCODE'dur. +norecurse eklerseniz, çözümleyici yanıtı kendi önbelleğinden vermez ve authoritative davranışı daha yakından görürsünüz. Bir alan adının DNS kayıtlarını birden fazla noktadan kontrol etmek için, çevrimiçi DNS kayıtları kontrolü aracı terminali açıp kapatmaktan daha hızlıdır.
NXDOMAIN: ad mevcut değil
Bu kod, authoritative server'ın bu zone'da böyle bir adın tanımlanmadığını kesin olarak söylediği anlamına gelir. Dikkat edin: NXDOMAIN ad hakkındadır, kayıt türü hakkında değil. Eğer mail.example.com mevcutsa ama AAAA kaydı yoksa, yanıt NXDOMAIN değildir; boş yanıt bölümüyle NOERROR'dur.
Üç yaygın neden:
- Kaydı yanlış zone'da oluşturdunuz, örneğin
wwwyerinewww.example.com.example.comaltında. - Alan adı başka bir nameserver'a işaret ediyor ve siz yanlış panelde düzenleme yapıyorsunuz.
- Kaydı sildiniz ve eski TTL hâlâ çözümleyicilerin önbelleğinde canlı.
Burada hata yapılır: kullanıcı NXDOMAIN görür, hemen yeni bir kayıt oluşturur ve birkaç saat sonra zone'da birbiriyle çelişen iki kaydı olur. Belirtisi şudur: yanıtlar iki farklı IP arasında gidip gelir ve bazı kullanıcılar siteyi görür, bazıları görmez. Herhangi bir değişiklikten önce, önce dig NS example.com ile hangi nameserver'ın yetkili olduğundan emin olun.
SERVFAIL: çözümleyici yanıtı tamamlayamadı
SERVFAIL en belirsiz DNS hata kodudur, çünkü nedeni söylemez. Çözümleyici denemiş ve sonuca ulaşamamıştır. Pratikte dört neden en büyük paya sahiptir:
- DNSSEC bozulmuştur. İmza süresi dolmuş ya da üst öğedeki DS kaydı zone anahtarıyla uyumlu değildir.
- authoritative server 53 numaralı portta sizin IP'nizden yanıt vermiyor ya da timeout yaşıyor.
- zone iki nameserver üzerinde farklı içerikle yüklenmiş ve çözümleyici çelişkili yanıt alıyor.
- Ara çözümleyici yanıt hızı sınırına takılmıştır.
Bu durumları ayırmak için doğrudan authoritative'e sorgu gönderin:
dig @ns1.example.com example.com A +dnssec
dig +trace example.com
Doğrudan yanıt sağlıklıysa ama genel çözümleyiciden SERVFAIL alıyorsanız, sorun neredeyse kesinlikle DNSSEC ya da nameserver uyumsuzluğudur. İkisi de SERVFAIL veriyorsa, 53 numaralı portun erişilebilirliğine bakın. Bu kontrollerin tam sırası pratik DNS sorun giderme kılavuzunda yer alıyor.
REFUSED ve NOTAUTH ve diğer kodlar
REFUSED, sunucunun bilmediği için değil, izni olmadığı için yanıt vermediği anlamına gelir. En yaygın sahne: çözümleyici açıktır ve yönetici ACL ile dış ağlardan gelen sorguları engellemiştir. Kendi sunucunuzda dig @server ile REFUSED alıyorsanız ama ağ içinden yanıt alıyorsanız, sorun DNS değildir; erişim politikasıdır.
NOTAUTH, sorguladığınız sunucunun bu zone'un yetkilisi olmadığı anlamına gelir. Bunu, başka bir sunucunun IP'sini nameserver olarak girdiğinizde görürsünüz. FORMERR, sorgu mesajının yapısal olarak bozuk olduğu anlamına gelir ve neredeyse her zaman yazılım hatasına ya da müdahale eden bir middlebox'a dayanır. NOTIMP ise sunucunun o sorgu türünü uygulamadığı anlamına gelir; eski sunucularda SVCB veya HTTPS türü sorgularla sık görülür.
| Kod | Anlam | Kontrol yolu |
|---|---|---|
| NOERROR | Sağlıklı yanıt, boş olsa bile | Kayıt türünü kontrol edin |
| NXDOMAIN | Ad zone'da mevcut değil | zone ve yetkili nameserver |
| SERVFAIL | Çözümleyici sonuca ulaşamadı | DNSSEC ve 53 numaralı port |
| REFUSED | Sunucunun yanıt izni yok | ACL ve allow-query |
| NOTAUTH | Sunucu bu zone'un yetkilisi değil | NS kaydı |
| FORMERR | Sorgu yapısal olarak bozuk | Yazılım sürümü ve middlebox |
DNS hata kodunu TTL ile karıştırmayın
En büyük yanlış anlama, kullanıcının NXDOMAIN'i "henüz yayılmadı" ile karıştırmasıdır. NXDOMAIN kesin bir yanıttır, gecikme değil. Kaydı şimdi oluşturduysanız ve hâlâ NXDOMAIN görüyorsanız, muhtemelen önceki TTL önbellekte kalmıştır. TTL değerine bakın:
dig example.com A +noall +answer
example.com. 3600 IN A 203.0.113.10
3600 sayısı, çözümleyicilerin bir saate kadar eski yanıtı tutabileceği anlamına gelir. Riskli değişiklikler için TTL'i önceden 300 saniyeye düşürün, değişikliği uygulayın ve oturduktan sonra tekrar yükseltin. Bunun az söylenen bir maliyeti vardır: kısa TTL, authoritative server üzerindeki sorgu yükünü birkaç katına çıkarır ve yüksek trafikli alan adlarında kendisi SERVFAIL kaynağı olabilir. Bu döngünün ayrıntıları TTL ve DNS önbelleği kılavuzunda açıklanmıştır.
Doğru kontrol sırası
DNS hata kodu aldığınızda bu sırayı izleyin ve kestirmelerden kaçının:
dig NSile gerçek nameserver'ların hangileri olduğunu görün.- Doğrudan o nameserver'a sorgu gönderin ve RCODE'u görün.
- Doğrudan sağlıklıysa, DNSSEC ve çözümleyici önbelleğine yönelin.
- Doğrudan hatalıysa, DNS panelindeki zone ve kaydı kontrol edin.
ir alan adları için ekstra bir katman daha vardır: eğer İrnic ya da yerel nameserver'lar aradaysa, yanıt dışarıdan doğru ve içeriden yanlış olabilir. Bu durumu ayrıca kontrol edin, çünkü hata deseni normal durumdan farklıdır.
Alan adını yeni kaydettiyseniz ve henüz hiçbir sunucuya bağlı değilse, önce alan adı arama ve kaydı ile kayıt ayarlarını tamamlayın, sonra sorun gidermeye geçin. DNS ve web sunucusunun aynı makinede toplandığı projeler için, zone dosyasına tam erişimi olan bir Linux hosting işi kolaylaştırır, çünkü dig @127.0.0.1 ile kendi sunucunuzun davranışını doğrudan görebilirsiniz.
Sık sorulan sorular
NXDOMAIN ile SERVFAIL arasındaki fark nedir?
NXDOMAIN kesin bir yanıttır: ad zone'da mevcut değildir. SERVFAIL ise çözümleyicinin yanıta ulaşamadığı ve nedenini bildirmediği anlamına gelir. NXDOMAIN alıyorsanız kaydı ya da zone'u kontrol edin; SERVFAIL alıyorsanız önce DNSSEC ve 53 numaralı portun erişilebilirliğini kontrol edin.
Neden bir çözümleyici yanıt veriyor da başka bir çözümleyici NXDOMAIN veriyor?
Neredeyse her zaman, alan adının nameserver'larının birbiriyle uyumlu olmadığı ya da birinin zone'u yüklemediği anlamına gelir. dig @ns1 ve dig @ns2 ile ikisini ayrı ayrı test edin. Yanıtlar farklıysa, sorun propagation değil, zone uyumsuzluğudur.
REFUSED kodu DNS'im hacklendi mi demek?
Hayır. REFUSED genellikle sunucunun yetkisiz ağlardan gelen sorguları doğru şekilde engellediği anlamına gelir. Açık çözümleyiciniz (open resolver) varsa, bu kod saldırı değil doğru ACL yapılandırmasının işaretidir. Tersi endişe vericidir: herkese yanıt veren ve yansıtmalı saldırıda kullanılan bir çözümleyici.
Kaydı değiştirdikten sonra DNS hata kodunun düzelmesi ne kadar sürer?
Panelin hızına değil, kaydın önceki TTL'ine bağlıdır. TTL 3600 ise, bir saate kadar bazı kullanıcılar eski yanıtı görebilir. Hassas değişiklikler için TTL'i önceden düşürün ve oturduktan sonra geri alın.
Bir kuralı aklınızda tutun: DNS hata kodunu önbellekten değil, asıl kaynaktan okuyun. Doğrudan authoritative server'a sorgu göndermediğiniz sürece, gördüğünüz her sonuç kontrolü sizin elinizde olmayan bir katmanla ilgili olabilir.