DNS servisinin ilk tasarımında UDP üzerinden gönderilen DNS yanıtları 512 bayt ile sınırlıydı. İnternetin büyümesi, DNSSEC kayıtları ve daha karmaşık DNS yanıtları bu sınırı yetersiz hâle getirdi. EDNS0 (Extension Mechanisms for DNS), mevcut DNS mesaj biçimini tamamen değiştirmeden daha büyük UDP yanıtlarını ve yeni protokol seçeneklerini kullanabilmemizi sağlar.
Bu makalede EDNS0'ın nasıl çalıştığını, Windows DNS Server tarafındaki davranışı ve özellikle güvenlik duvarı veya ağ cihazları nedeniyle ortaya çıkan DNS çözümleme problemlerini ele alacağım. Güncelleme notu: Eski makalede RFC 2671 esas alınıyordu. Güncel temel standart RFC 6891'dir.
EDNS0 nedir ve neden kullanılır?
RFC 1035 kapsamında klasik DNS/UDP yanıt boyutu 512 bayttır. EDNS0, DNS sorgusunun ek bölümüne eklenen OPT pseudo-resource record sayesinde istemcinin alabileceği UDP yükü boyutunu bildirmesine ve yeni seçenekler taşımasına imkân verir. EDNS0 kendi başına şifreleme sağlamaz; DNSSEC ise EDNS0 sayesinde daha büyük doğrulama verilerini daha rahat taşıyabilir.
OPT kaydı ve UDP yanıt boyutu
OPT kaydı normal bir alan adı kaydı değildir; zone dosyasına A veya MX kaydı gibi eklenmez. DNS mesajının Additional bölümünde bulunur. TYPE değeri 41, CLASS alanı ise istemcinin duyurduğu UDP payload boyutudur. EXTENDED RCODE, sürüm ve bayraklar da OPT yapısında taşınır. OPT pseudo-RR önbelleğe alınmaz.
| Alan | Anlamı |
|---|---|
| NAME | Kök ad (.) |
| TYPE | OPT / 41 |
| CLASS | İlan edilen en büyük UDP payload boyutu |
| TTL | Extended RCODE, EDNS sürümü ve bayraklar |
| RDATA | İsteğe bağlı EDNS seçenekleri |
İstemcinin 1232 bayt ilan etmesi, sunucunun her zaman bu büyüklükte yanıt göndereceği anlamına gelmez. Yanıtın gerçek boyutu hem sorgu sonucuna hem de sunucunun sınırlarına bağlıdır. UDP yanıtı uygun boyuta sığmazsa DNS mesajında TC (Truncated) biti kullanılarak TCP üzerinden yeniden sorgulama gerekebilir.
EDNS0 olmayan sorgular ve TCP üzerinden devam
EDNS0 kullanmayan bir sorguda alıcının klasik 512 baytlık DNS/UDP sınırını dikkate alması gerekir. Bazı istemciler EDNS0 kullanımı başarısız olduğunda EDNS olmadan yeniden deneyebilir. Ancak DNSSEC gibi EDNS seçeneklerine bağımlı senaryolarda bu davranış güvenli bir genel çözüm kabul edilmemelidir. DNS iletişiminde yalnızca UDP/53 değil, TCP/53 bağlantısının da çalışması önemlidir.
Büyük UDP paketleri neden sorun çıkarabilir?
EDNS0 ile 512 bayttan büyük DNS yanıtları taşınabilse de UDP paketlerinin IP seviyesinde parçalanması (fragmentation) ağ cihazları, güvenlik duvarları, NAT veya tüneller nedeniyle kayba yol açabilir. İstemcinin beyan ettiği boyut ile gerçek yolun MTU değeri aynı şey değildir. Bu nedenle amaç mümkün olan en yüksek EDNS0 boyutunu kullanmak değil, gereksiz IP parçalanmasını önlemektir.
DNS Flag Day 2020 sırasında 1232 bayt önerisi yaygınlaştı. Daha yeni RFC 9715 ise farklı ağ koşullarını değerlendirerek 1400 baytı önerilen üst sınır olarak ele alır ve daha küçük değerlerin de uygun olabileceğini belirtir. Bunlar bütün Windows Server sürümleri için tek bir varsayılan yapılandırma değeri olduğu anlamına gelmez.
Windows DNS Server tarafında EDNS0 ayarları
Windows DNS Server'ın EDNS destek bilgisini önbelleğe alma ve diğer DNS sunucularına EDNS probe gönderme davranışları sürüme ve yapılandırmaya göre değişebilir. Microsoft'un dnscmd belgesinde /ednscachetimeout için 3600–15724800 saniye aralığı ve 604800 saniye varsayılanı belirtilmektedir. Eski yazıda geçen 86400 saniyeyi güncel tüm sunucular için varsayılan kabul etmemeliyiz.
dnscmd /info /ednscachetimeout
dnscmd /info /enableednsprobes
Bu komutlar kullanılan DNS Server sürümünde destekleniyorsa mevcut yapılandırmayı incelemek için değerlendirilebilir. Üretim ortamında davranışı değiştirmeden önce işletim sistemi sürümünü, DNS sunucu rolünü ve değişikliklerin olası etkilerini doğrulamak gerekir.
EDNS0 problemi nasıl teşhis edilir?
- Sorunun yalnızca belirli alan adlarında veya büyük DNS yanıtlarında mı oluştuğunu belirleyin.
- İstemci, kurum DNS sunucusu, forwarder ve authoritative DNS sunucusu arasındaki bağlantı yolunu ayrı ayrı inceleyin.
- Wireshark veya eşdeğer paket yakalama aracıyla sorgudaki OPT kaydını, bildirilen UDP payload boyutunu, yanıtı ve TC bitini kontrol edin.
- UDP/53 yanında TCP/53 erişiminin de iki yönde doğru çalıştığını doğrulayın.
- Firewall, IPS, proxy, VPN ve NAT cihazlarının EDNS0 paketlerini veya parçalı UDP trafiğini engelleyip engellemediğini kontrol edin.
- DNSSEC kullanılıyorsa büyük cevapların ve doğrulama kayıtlarının etkisini ayrıca test edin.
Windows üzerinde hızlı kontrol örnekleri
Aşağıdaki sorgular ilgili DNS sunucusunu hedefleyerek isim çözümlemenin temel durumunu incelemek içindir. Resolve-DnsName çıktısı EDNS0 OPT ayrıntılarını tek başına göstermez; bu bilgi için paket yakalama veya EDNS destekleyen bir DNS tanılama istemcisi gerekir.
Resolve-DnsName www.example.com -Server 192.0.2.53
Resolve-DnsName example.com -Type DNSKEY -Server 192.0.2.53
Resolve-DnsName www.example.com -Server 192.0.2.53 -TcpOnly
Örnek IP adresi 192.0.2.53 dokümantasyon amaçlıdır; kendi DNS sunucunuzla değiştirilmelidir. DNSKEY sorgusu ancak ilgili zone DNSSEC kaydı yayımlıyorsa anlamlıdır. TCP testi, UDP'de sorun yaşanırken TCP ile yanıt alınıp alınamadığını karşılaştırmaya yardımcı olur.
EDNS0 desteği kapatılmalı mı?
Genel olarak hayır. Microsoft'un eski uyumluluk senaryolarına yönelik makalelerinde dnscmd /config /enableednsprobes 0 geçici bir çözüm olarak yer alır. Ancak bu ayar EDNS probe davranışıyla ilgilidir; tüm ağlarda EDNS0 sorunlarını kökten çözdüğü veya bütün EDNS özelliklerini kaldırdığı varsayılmamalıdır. İlk tercih hatalı firewall yapılandırmasını düzeltmek, uygun UDP boyutlarını değerlendirmek ve TCP fallback yolunu sağlıklı hâle getirmek olmalıdır.
EDNS0 ile DNSSEC arasındaki ilişki
DNSSEC yanıtları RRSIG, DNSKEY ve ilgili kayıtlar nedeniyle daha büyük olabilir. EDNS0 bu yanıtların UDP üzerinden iletimini kolaylaştırırken DNSSEC'in kriptografik doğrulamasını kendisi yapmaz. EDNS0, DNSSEC ve DNS over HTTPS (DoH) birbirinin alternatifi olan teknolojiler değildir; farklı ihtiyaçları karşılar.
Kurum ortamlarında DNS çözümleme problemlerine yaklaşırken yalnızca DNS sunucusunun yanıt üretmesini değil, yanıtın istemciye kadar ulaşıp ulaşmadığını da incelemek gerekir. EDNS0 yapılandırmasını değiştirmeden önce OPT kaydı, UDP payload boyutu, TCP/53 erişimi ve ağ üzerindeki parçalanma davranışı birlikte analiz edilmelidir.
