DNS nasıl çalışır?

Bu flood’da kısaca DNS’in çalışma prensibini, isim kaydı türlerini ve DNS sorgusu yapmaya yarayan bazı araçları anlatacağım.

DNS (Domain Name System) kısaca internet’in telefon defteri olarak tanımlanabilir. Erişilmek istenen sunucunun bilinen isminden, ki bu bilinen isim FQDN (Fully Qualified Domain Name) olarak adlandırılır, örneğin yahoo․com, IP adresini öğrenebilmek için DNS protokolünü kullanırız. Bir web sitesinin adresini tarayıcımızın adres çubuğuna girdiğimizde tarayıcı öncelikle kendi lokal cache’inde ilgili adres için IP’nin bulunup bulunmadığına bakar. Lokal olarak istenen tazelikte (ilgili kaydın belirleyeceği süre, 1 saat, 1 gün vb) istenen bilgi bulunamazsa bilgisayarda tanımlı olan DNS sunucuya (bu sunucu genellikle internet sağlayıcınızın -ISP- DNS adresi olur) recursive olarak istek atılır. İlgili sunucu, istenen bilgi kendisinde istenen tazelikte varsa isteği direkt cevaplar kendisinde yoksa bir üst sunucuya istekte bulunur. İstenen cevap zincirdeki sunucularda bulunamazsa kaydı tutan asıl sunucuya kadar gidiler, cevap bulunur ve dönülür.

Birçok tarayıcı kendi lokal cache’ini tutmaktadır. Chrome için chrome://net-internals/#dns adresinden lokal cache'e ulaşabilirsiniz.

Yukarıda bahsedilen tazelik, DNS isteğine verilen cevapta TTL (time-to-live) olarak bulunur. TTL süresi DNS kaydının sahibi tarafından belirlenir. DNS süresini kısa (5 dakika gibi) vermek, sunucu adresini değiştirdiğinizde kullanıcıların hızlı bir şekilde yeni adrese gelebilmelerini sağlar fakat DNS sunucularına daha fazla yük binmesine ve genel DNS problemlerinden daha fazla etkilenmenize neden olur.

DNS kayıtları için TTL süresi DNS sağlayıcısının verdiği ekrandan düzenlenir. Benim sitem için GoDaddy ekranının görüntüsü aşağıdaki gibi.

Aşağıda en önemli DNS sorgu çeşitleri verilmiştir. En çok kullanılanı ve bilineni IP versiyon 4 adresi dönen A kaydı sorgusudur.

NS kayıt tipini bir alt domaini başka bir DNS sunucusunun yönetmesini istediğimizde kullanırız. Örneğin DNS kaydımızı GoDaddy, uygulama sunucularını da Amazon'da tuttuğumuzda GoDaddy'ye bir NS kaydı girerek buradan Amazon DNS sunucusunu gösteririz. İsim kaydı sorgulanırken güncel IP adresi Amazon DNS'ten kolaylıkla bulunur. Bu sayede Amazon'daki sunucu adresini sürekli olarak GoDaddy'de güncellememiz gerekmez.

CNAME kayıt tipini farklı domain'leri tek bir domain'de birleştirmek istediğimizde kullanabiliriz. Örneğin sitemizde example․com ve www․example․com gibi iki farklı adresi CNAME ile tek example․com'da birleştirebiliriz. CNAME'i aynı zamanda farklı bir domain'e yönlendirme amacı ile de kullanabiliriz. Örneğin benim blogum GitHub tarafından gokhansengun․github․com'da sunuluyor. Ben GoDaddy'de gokhansengun․com'un www subdomain'i için bir CNAME kaydı ekledim ve bunu gokhansengun․github․com'a yönlendirdim.

SRV kayıt tipi sunucu tarafından sunulan bir servisin adres, protokol ve port bilgisini döner. Bu kayıt tipi güncel olarak özellikle mikroservis tipi sistemlerde Service Discovery yapan modüller tarafından kullanılmaktadır.

DNS kayıtlarını sorgulamak için nslookup veya dig adlı program kullanılabilir. Bu iki program da macOS, Linux ve Windows'ta bulunur.

Yukarıda milliyet․com․tr A tipi kayıtlar için nslookup ile iki kez sorgulanmış ve DNS sunucusu tarafından üç adet IP iki sorgu için farklı sıralarda dönmüştür. Burada istemci sunucu tarafından dönen ilk adresi kullanacağı için DNS bazında bir yük dağıtımı yapılmış olur.

Şimdi dig aracı ile Amazon DNS'lerine yönlendirilen aws-demo․gokhansengun․com için konulan NS kaydını sorgulayalım.

Yukarıdaki çıktının cevap bölümünden aws-demo subdomain'i için delege edilmiş ns-1100.awsdns-09.org sunucusu görülmektedir.

Son olarak yine dig aracı ile www․gokhansengun․com için A kaydını sorgulayalım.

Çıktıdan görüleceği üzere blog adresim CNAME ile önce GitHub’a yönlendirilmiş. GitHub ise yine CNAME ile Fastly CDN’ine yönlendirmiştir.