DNS yanıtlarında parçalanma, UDP ile taşınan tek bir DNS mesajının birden fazla IP parçasına ayrılmasıdır. DNS mesajını taşıyan IP paketi, ağ yolundaki bağlantıların tek parçada taşıyabildiği boyutu aşarsa ve kullanılan IP sürümü ile ayarlar izin verirse parçalanabilir.

Alan adları için sorgu yapan recursive resolver (özyinelemeli DNS çözümleyicisi) hizmeti, bağlantı kurmadan mesaj taşıyan UDP üzerinden yanıt alabilir. Büyük bir yanıt gerektiğinde ise bağlantı kurup veriyi güvenilir biçimde taşıyan TCP kullanılabilir. IP parçalanması ile DNS mesajını kısaltıp sorguyu TCP üzerinden yeniden denemek farklı işlemlerdir.

Parçalanmış yanıtta parçalardan biri kaybolur veya engellenirse alıcı tam DNS mesajını yeniden oluşturamaz. Bu durumda küçük yanıtlar sorunsuz iletilirken büyük yanıtlar zaman aşımına uğrayabilir. Sorun tek başına DNS kaydının yanlış olduğunu göstermez; yanıt boyutu, ağ yolu ve güvenlik duvarları birlikte incelenir.

DNS Yanıtlarında Parçalanma Nasıl Oluşur?

Ağda taşınan IP paketinin boyutu yalnız DNS mesajından ibaret değildir. UDP ve IP başlıkları da toplam boyuta eklenir. Ortaya çıkan paket, trafiğin geçtiği bağlantılardan birinin MTU değerini (en büyük IP paketi boyutunu) aşarsa ağ yolu paketi tek parça halinde taşıyamayabilir.

Yanıt Boyutu, EDNS ve MTU İlişkisi

Bir bağlantının parçalamadan taşıyabildiği en büyük IP paketi boyutu MTU olarak adlandırılır. Uçtan uca ağ yolunda farklı bağlantılar bulunabileceği için belirleyici olan, yol üzerindeki en düşük taşıma sınırıdır.

DNS mesajlarına ek özellikler sağlayan EDNS, istemcinin kabul ettiği en büyük UDP yükünü sorguda bildirmesine olanak verir. Bu yük DNS mesajıdır; UDP ve IP başlıkları bildirilen sayıya dahil değildir. EDNS kullanılmadığında geleneksel DNS/UDP mesaj sınırı 512 bayttır. EDNS ile daha büyük bir değer bildirmek, alıcının yeniden birleştirip işleyebileceği boyutu anlatır; ağ yolunun bu boyutu tek parçada taşıyabildiğini kanıtlamaz.

Recursive resolver hizmetinin yüksek bir EDNS UDP boyutu bildirmesi, sunucunun tek yanıtta daha fazla veri göndermesine izin verebilir; bu da parçalanma riskini artırabilir. Daha küçük bir sınır ise sunucunun yanıtı daha erken kısaltmasına ve recursive resolver hizmetinin TCP üzerinden yeniden denemesine yol açabilir. Tek bir EDNS değeri bütün ağlar için evrensel çözüm değildir.

Örneğin 1280 baytlık IPv6 MTU değerinden 40 baytlık temel IPv6 başlığı ve 8 baytlık UDP başlığı çıkarıldığında DNS mesajı için 1232 bayt kalır. Ek başlık veya tünel yükü varsa hesabın bunları da kapsaması gerekir. Bilgilendirici RFC 9715, internetin büyük bölümündeki 1500 baytlık MTU değerini esas alarak 1400 baytlık DNS/UDP üst boyutunu önerir; daha küçük değerler de kullanılabilir. 1232 ve 1400 sayıları DNS mesajının boyutunu anlatır, IP paketinin toplam boyutunu değil. Seçilen değer, istemcinin kabul ettiği boyutu ve ağın taşıma kapasitesini aşmamalıdır.

IPv4 ve IPv6'da Paket Parçalanması

IPv4'te parçalamayı yasaklayan DF (Don't Fragment) bayrağı kapalıysa gönderici veya yol üzerindeki bir yönlendirici paketi parçalara ayırabilir. DF açıksa yolun taşıyamadığı paket parçalanmak yerine düşürülür; yönlendirici gerekli MTU bilgisini bir ICMP hata mesajıyla göndericiye bildirebilir.

IPv6'da ara yönlendiriciler paketleri parçalamaz. Fazla büyük paketi düşürüp göndericiye ICMPv6 Packet Too Big mesajı gönderirler; bu mesaj paketin ilgili bağlantıya sığmadığını bildirir. IPv6'da parçalamayı yalnız gönderici yapabilir, ancak DNS/UDP yanıtlarında parçalanmadan kaçınmak tercih edilir. Bu ayrım, aynı DNS yanıtının IPv4 ve IPv6 yollarında farklı sonuç vermesine neden olabilir.

IP sürümü ne olursa olsun, parçalanmış yanıtı kabul eden alıcı DNS mesajını işleyebilmek için parçaların tamamını yeniden birleştirmelidir. Bir parça ulaşmazsa kalan parçalar tek başına geçerli bir DNS yanıtı oluşturmaz.

DNS Yanıtları Neden Büyür?

Yanıt boyutu, istenen kayıt türüne ve alan adının yapılandırmasına göre değişir. IPv4 adresi bildiren A, IPv6 adresi bildiren AAAA, yetkili sunucuları bildiren NS ve posta sunucularını bildiren MX kayıtları yanıtta birden fazla olabilir. Bu kayıtların ve gerekli ek verilerin sayısı arttıkça mesaj büyür.

DNSSEC, DNS verilerinin kaynağını ve bütünlüğünü doğrulamak için dijital imzalar ve ilgili kayıtlar kullanır. DNSSEC verisi istendiğinde doğrulama anahtarını taşıyan DNSKEY veya imzaları taşıyan RRSIG gibi kayıtlar yanıtı büyütebilir. Özellikle anahtar veya imza verisi içeren yanıtlar, aynı alan adının imzasız yanıtından belirgin biçimde daha büyük olabilir. Bu, DNSSEC'in hatalı olduğu anlamına gelmez; daha büyük yanıtın ağ üzerinden güvenilir biçimde iletilmesi gerektiğini gösterir.

Yük dengeleme amacıyla birden fazla adres döndüren hizmetler, çok sayıda yetkili sunucu kullanan alan adları veya metin verisi taşıyan büyük TXT kayıtları da büyük yanıtlar oluşturabilir. Sunucunun yanıtın ek bölümüne koyduğu ilişkili adres kayıtları da toplam boyutu büyütebilir.

Her büyük yanıt mutlaka parçalanmaz. Ağ yolu yeterli boyutu taşıyabilir, sunucu daha küçük bir UDP yanıtı seçebilir, kısaltmayı bildiren TC bitini ayarlayabilir veya recursive resolver TCP üzerinden tam yanıtı alabilir.

EDNS, TC Biti ve TCP Geçişi Nasıl Birlikte Çalışır?

Recursive resolver, EDNS kullanırken kabul edebileceği UDP yanıt boyutunu sorguda bildirir. Yetkili sunucu bu değeri bir üst sınır olarak değerlendirir; kendi yapılandırmasına ve taşıma politikasına göre daha küçük yanıt gönderebilir.

Yanıt için gerekli bir kayıt kümesi seçilen UDP boyutuna bütünüyle sığmıyorsa sunucu, DNS başlığındaki TC bitini ayarlayarak mesajın kısaltıldığını bildirir. Yalnız isteğe bağlı ek verilerin sığmaması her zaman TC gerektirmez; sunucu bu verileri yanıttan çıkarabilir. TC yanıtını alan uyumlu recursive resolver, eksik veriyi tam kabul etmek yerine sorguyu TCP gibi daha büyük yanıt taşıyabilen bir yöntemle yeniden dener. Genel amaçlı DNS yazılımlarının hem UDP hem TCP desteği bulunmalıdır.

Bu geçişin çalışması için yalnız DNS yazılımının değil, ağ yolundaki güvenlik duvarı, yük dengeleyici ve erişim kurallarının da TCP üzerinden DNS trafiğine izin vermesi gerekir. Sunucu UDP yanıtını parçalanmış halde gönderir ve ağ cihazlarından biri parçalardan birini düşürürse recursive resolver TC bitini içeren kullanılabilir bir DNS mesajı alamayabilir; sorgu zaman aşımına uğrayabilir. Bazı recursive resolver yazılımları bu durumda da TCP ile yeniden dener; TC gelmemesi bütün uygulamalarda TCP denemesinin imkansız olduğu anlamına gelmez.

TCP, DNS mesajını bağlantı üzerinde uygun büyüklükte parçalara bölerek iletebilir ve kaybolan veriyi yeniden gönderir. Bu, UDP yanıtının IP katmanında parçalanmasından farklıdır; TCP desteği yine de ağdaki erişim engellerini kendiliğinden kaldırmaz.

DNS Parçalanmasının Erişime Etkisi

Parçalanmış paketler, tek parça UDP paketlerinden daha kırılgandır. Her parça ayrı ayrı kaybolabilir ve herhangi bir parçanın eksik kalması tüm yanıtın yeniden birleştirilmesini engeller.

Bazı güvenlik duvarları ve ara cihazlar ilk parça dışındaki parçaları oturumla eşleştiremeyebilir veya politika gereği engelleyebilir. Adres çevirisi yapan NAT cihazları, tüneller ve farklı MTU değerlerine sahip bağlantılar da yalnız belirli ağ yollarında görülen aralıklı sorunlara katkıda bulunabilir.

Örnek bir senaryoda küçük bir A yanıtı normal iletilirken DNSKEY ya da çok sayıda kayıt içeren bir yanıt zaman aşımına uğrayabilir. Farklı bir recursive resolver hizmeti, erişim ağı veya IPv4/IPv6 yolu kullanıldığında sonucun değişmesi de sorunun kaydın içeriğinden çok taşıma yoluyla ilişkili olabileceğini gösterir.

Belirti her zaman açık bir “parçalanma hatası” değildir. Ziyaretçi bazen sayfayı açamaz veya yalnız belirli alan adlarına erişemez. DNS yöneticisi ise DNSSEC doğrulaması için gereken kayıtların alınamadığını veya küçük UDP yanıtları sorunsuz iletilirken TCP yeniden denemelerinin engellendiğini görebilir. Bu belirtiler tek başına parçalanmayı kanıtlamaz; paket kaydıyla taşıma sorunu ile DNS verisi hatası ayrılır.

DNS Yanıtlarında Parçalanma Riski Nasıl Azaltılır?

Parçalanma riski, yanıt boyutu yönetilerek ve gerektiğinde TCP'ye geçiş sağlanarak azaltılır. Parçalarla sahte veri kabul ettirme girişimleri de mümkün olduğundan, güvenlik duvarında parçaları koşulsuz açmak çözüm değildir; öncelik parçalanmayı önlemektir. Uygun değerler kullanılan DNS yazılımına, ağ topolojisine ve istemci kitlesine göre değişir.

  • Yetkili sunucuda UDP yanıt üst boyutunu, recursive resolver tarafında ise bildirilen alım boyutunu kullanılan yazılımın güncel belgelerine göre ayarlayın.
  • EDNS değerini IP paketinin tamamı sanmayın; UDP/IP başlıklarını ve varsa tünel yükünü ağın taşıma kapasitesiyle birlikte değerlendirin.
  • DNS sunucuları TCP sorgularını desteklemeli; güvenlik duvarları ve yük dengeleyiciler gerekli TCP/53 trafiğini engellememelidir.
  • Yanıta gereksiz ek kayıtlar koymamak boyutu azaltabilir; ancak DNSSEC gibi güvenlik verileri sırf yanıt küçülsün diye kaldırılmamalıdır.
  • UDP zaman aşımını, TC bitli yanıtı ve TCP yeniden deneme davranışını birlikte izleyin; yalnız küçük yanıt üreten sorgularla yapılan kontrol yeterli olmayabilir.

MTU ölçümü ve gerekli noktalarda paket yakalama, parçalanmanın nerede oluştuğunu veya parçaların nerede kaybolduğunu araştırmaya yardımcı olur; tek uçtaki kayıt her zaman sorunlu cihazı belirlemez.