DNS ad çözümlemesi prensipte nasıl çalışır?


10

Şu anda Linux sysadmin için çevrimiçi bir kurs alıyorum ve bana genellikle anlamadığım bir soru soruldu. Bir ad sunucusu nasıl aranacağını biliyorum, en azından doğruysam ek bölüm komutunda adreslenen dig komutunu kullanıyor, ancak aşağıdaki soru sorulduğunda biraz kayboldum.

Yapılandırılmış ad sunucunuzun önbelleğe alınmış bir sonucu olmadığı varsayılırsa, maps.google.com'u çözmek için ad sunucusu sorgunuzda kaç ad sunucusu sorulması gerekir? Tüm bu ad sunucularını bulmak için hangi komutları kullanırsınız? Her seviyeden bir tane listeleyin ve bu seviyenin neden gerekli olduğunu açıklayın.

Cevabı istemiyorum, tam olarak ne yapmam istendiğini bilmek istiyorum.


Düşünüyordum dig +trace, ama seviyelerle neyin kastedildiğinden emin değilim. Bu Sunucu Hatası için bir soru olabilir.
Büyük McLargeHuge

Merhaba linux8807. Sorunuzu, umarım daha açık hale getirmek için düzenledim; özellikle de daha iyi bir başlık koymaya çalıştım. Niyetinizi değiştirdiğimi düşünüyorsanız, düzenlemeyi geri almaktan çekinmeyin ("düzenlenmiş" bağlantısını ve ardından orijinal düzeltmenin üzerindeki "geri al" ı tıklayın).
CVn

Sanırım bu video bunu açıklıyor: youtube.com/watch?v=2ZUxoi7YNgs

Yanıtlar:


13

Yapılandırılmış ad sunucunuzun önbelleğe alınmış bir sonucu olmadığı varsayılırsa, maps.google.com'u çözmek için ad sunucusu sorgunuzda kaç ad sunucusu sorulması gerekir? Tüm bu ad sunucularını bulmak için hangi komutları kullanırsınız? Her seviyeden bir tane listeleyin ve bu seviyenin neden gerekli olduğunu açıklayın.

Bunu bir araya getirelim.

"Yapılandırılmış ad sunucunuzun elinde herhangi bir önbellek sonucu olmadığı varsayılarak" - önce kapalı, hiç önbelleğe alınmış veri yoksa, hiçbir şeyi çözemez. Çözümleyicinin önbelleğini hazırlamak için, .(AKA kök) bölgesi için NS ve adres (A, AAAA) kayıtlarına sahip olmanız gerekir . Bu, root-servers.net.bölgede bulunan kök ad sunucularıdır . O bölge veya bu DNS sunucuları hakkında büyülü bir şey yok. Ancak, bu veriler genellikle çözümleyicinin önbelleğini hazırlamak için DNS çözümleyicisine "bant dışı" olarak sağlanır. Yalnızca yetkili ad sunucularının bu verilere ihtiyacı yoktur, ancak ad sunucularının çözümlenmesi gerekir.

Ayrıca, ne "çözmek"? Bu isimde herhangi bir RRtype var mı? Bir ARR? Veya başka bir şey? Hangi sınıf ( CH/ Chaosnet, IN/ Internet, ...)? Kesin süreç farklı olacaktır, ancak genel fikir aynı kalır.

Kök adı sunucularını nasıl bulacağımızı bildiğimizi varsayabiliriz, ancak başka bir şey değildir ve "çözmek" IN Aile adla ilişkili herhangi bir RR'nin içeriğini almak anlamına gelirsek, çok daha pratik hale gelir.

Bir DNS adını çözümlemek için, adı temel olarak etiketlere böler ve sağdan sola doğru ilerlersiniz. .Sonunda unutma ; gerçekten çözümlemek maps.google.com.yerine maps.google.com. Bu, bizi çözme gereği bırakıyor (bunu biliyoruz, ancak bir DNS çözümleyici uygulaması muhtemelen olmayacak):

  • .
  • com.
  • google.com.
  • maps.google.com.

Nereden içerik isteyeceğinizi bulmakla başlayın .. Bu kolay; bu bilgilere zaten sahibiz: kök adı sunucu adları ve IP adresleri . Yani bir kök isim sunucumuz var. Diyelim ki a.root-servers.netisim çözümüne devam etmek için 198.41.0.4 ( , ayrıca 2001: 503: ba3e :: 2: 30) kullanmaya karar verdik . Uygulamada, çözümleyici tarafından yapılan ilk şeylerden biri, muhtemelen kök bölge sunucularından birinden kök bölge için ad sunucularının doğru bir listesini istemek için sağlanan kök sunucu verilerini kullanmak olacaktır. adlar ve IP adresleri geçerli ve erişilebilir, çözünürlük başladığında kök bölge için tam ve eksiksiz bir veri kümesine sahip olacaktır.

maps.google.com. IN A198.41.0.4 için bir DNS sorgusu çekin. Size cevap olarak "hayır, yapmayacaksınız, ama işte bilen biri" diyecektir; bu bir tavsiye. Söz NSkonusu sunucunun bildiği en yakın bölge için kayıtların yanı sıra sunucunun sahip olduğu tutkal kayıtları da içerir. Tutkal verisi yoksa, önce seçtiğiniz NS kaydında adı geçen ana bilgisayarı çözümlemeniz gerekir, bu nedenle IP adresini almak için ayrı bir ad çözümlemesi oluşturun; tutkal verisi mevcutsa, cevaba en azından "daha yakın" bir ad sunucusunun IP adresine sahip olursunuz. Bu durumda, bu com.bölge için sunucu kümesi olacaktır ve tutkal verileri de sağlanır.

com.Ad sunucularından birine aynı soruyu sorarak işlemi tekrarlayın . Onlar da bilmiyorlar, ancak sizi Google'ın yetkili ad sunucularına yönlendirecekler. Genel durumda bu noktada tutkal verilerinin sağlanmış olup olmadığı vurulur ya da özlenir; bir comalan adının yalnızca ad sunucularına sahip olmasını engelleyen hiçbir şey yoktur nl, örneğin bu durumda tutkal verilerinin gTLD sunucularından elde edilmesi olası değildir. Sağlanan tutkal verileri de eksik olabilir veya gerçekten şanssızsanız, yanlış bile olabilir! Yukarıda bahsettiğim ayrı isim çözümünü her zaman ortaya çıkarmaya hazır olmalısınız .

Temel olarak, aa(yetkili cevap) bayrak ayarıyla bir cevap alana kadar devam edersiniz . Bu cevap size ne istediğinizi ya da istediğiniz RR'nin mevcut olmadığını (ya NXDOMAINda NOERRORsıfır yanıt veri kayıtlarıyla) söyleyecektir . Gibi yanıtları aramaya devam edin SERVFAIL(ve bir adım SERVFAILgeri SERVFAILçekin ve bir tane alırsanız başka bir sunucuyu deneyin; tüm adlandırılmış sunucular geri dönerse, ad çözümleme işleminde başarısız olun ve kendinizi istemciye geri döndürün).

Her sunucudan tam RR adı istemenin alternatifi (kötü uygulama olarak kabul edilebilir), daha önce belirlediğimiz bölünmüş etiket listesini kullanmak, sunucu tarafından verilen ad sunucularından IN NSve IN A/ IN AAAARR'lerin köküne doğru sormaktır. etiketini kullanın ve ad çözümleme sürecini ilerletmek için bunları kullanın. Bu sadece pratikte marjinal olarak farklıdır ve aynı süreç hala geçerlidir.

BIND'in bir parçası olarak gelen veya içindeki yardımcı program +traceseçeneğini kullanarak bu işlemin tamamını simüle edebilirsiniz .digset debugnslookup

(Özellikle bazı RRtypes olması da hatırlatmakta fayda var NS, MXaynı zamanda, ve birkaç başka A6makul bir süre iyi kullanıldı ama kullanımdan kaldırıldı) ve referans diğer RR'lerini yapmak. Bu durumda, müşterinize eksiksiz ve faydalı bir yanıt vermek için başka bir ad çözümleme işlemi başlatmanız gerekebilir .


1
Bu cevabın OP'nin sadece prosedürden ziyade kavramları anlama isteği ile oldukça yerinde olduğunu düşünüyorum.
111 -

Yani ne yaptığımı kazmak maps.google.com IN A, o zaman aynı şekilde kazarım ama eğer doğruysa ns1.google.com ile, eğer öyleyse, öğretmen hangi seviyelerden bahsediyor ve neden onlar gerekli mi?
linux8807

@ linux8807 Sağlanan digtutkal kayıtlarına IP adresi içermeyen bir başvuru aldığınızda ns1.google.com adını kullanırsınız. Ardından, önceki ad çözümleme işlemine devam edersiniz.
CVn

@ MichaelKjörling Tüm ns1-4.google.com kayıtlarının tutkal kayıtlarında bir ip adresi vardır. i.imgur.com/o79aIGB.png
linux8807

@ linux8807 Tutkal kayıtları sorgulanan alan adıyla aynı TLD'nin altında olduğunda bu genellikle olur. Sen olamaz güvenmek üzerine genel durumda ancak.
CVn

7

dnstracerAd çözümlemesini izleyecek bir komut var (en azından Debian'a yüklemeniz gerekebilir, bu da paket adıdır). Ayrıca (bir açıklamada Koveras'ın işaret ettiği gibi) kullanabilirsiniz dig.

İşte dnstracer ile. -s .kök ile başlamak anlamına gelir; -4IPv4 kullanmak anlamına gelir (v6 burada kırılmıştır ...); -oaslında sonunda çözülmüş IP adreslerini göstermek için anlamına gelir (Ben çıktı o kısmını atladım, bir sürü var).

anthony@Zia:~$ dnstracer -s . -4 -o maps.google.com
Tracing to maps.google.com[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 |\___ m.gtld-servers.net [com] (192.55.83.30) 
 |     |\___ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer 
 |     |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer 
 |     |\___ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer 
 |      \___ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer 
⋮

Bu çıktı, dnstracer tüm yolları izledikçe devam eder (böylece ad sunucularının bazılarının eski bir bölgeye sahip olup olmadığını görebilirsiniz).

Yani, kök ad sunucusuna bir sorgu, ardından gtld sunucularına (.com bölgesi sunucusu), son olarak da bir Google ad sunucusuna götürdüğünü görebilirsiniz.

İle dig, çıktı çok daha ayrıntılı (bu yüzden çok fazla kesme yapacağım):

dig -4 maps.google.com. +norecurse +trace
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> maps.google.com. +norecurse +trace
;; global options: +cmd
.                       425379  IN      NS      b.root-servers.net.
⋮
com.                    172800  IN      NS      f.gtld-servers.net.
⋮
google.com.             172800  IN      NS      ns2.google.com.
⋮
maps.google.com.        300     IN      A       74.125.228.70
⋮

digayrıca, kök ad sunucularının geçerli listesini almak için bir sorgu yaptığını gösterir. Bu bir DNS sunucusunun genellikle çok seyrek yapacağı bir şeydir. Soğuk önbellek durumunuzda saydığınızdan emin değilim.

Elbette, tel üzerindeki gerçek sorguları, örneğin wireshark.


Hiçbir şey yükleyemem çünkü bir terminalde kuruldu, ancak işten eve döndüğümde dnstracer'ı deneyeceğim ve işe yarayıp yaramadığını göreceğim ve * (216.239.38.10) (216.239.36.10) ( 216.239.32.10) (216.239.34.10) * bu mu? Öyleyse, zaten bir anlamda buna erişebiliyorum, ancak yetkili bir cevapla değil. Ayrıca, seviyelerden bahsettiği şey bu mu?
linux8807

@ linux8807 Sahip digdeğilseniz dnstracer(veya digbiçimlendirmesini isterseniz ) kullanabilirsiniz. Dnstracer'ın çıkardığı IP adresleri, ad sunucularının IP adresleridir; isimleri solda. a.root-servers.net 198.41.0.4, vb. Bunlar sorgulanan sunuculardır ve köşeli parantez içinde hangi bölgeyi de belirtir. İlk seviyenin * .root-servers.net (for .), ikincisi * .gtld-servers.net (for .com), vb.
Olduğundan şüpheleniyorum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.