Kazmayı önbellek kullanmadan çözmek için zorla


91

Bir DNS sunucusunu sorgulamanın ve önbelleğe almayı (ile dig) atlamanın bir yolu olup olmadığını merak ediyorum . Genellikle, DNS sunucusundaki bir bölgeyi değiştiriyorum ve iş istasyonumdan doğru şekilde çözülüp çözülmediğini kontrol etmek istiyorum. Ancak sunucu çözülen istekleri önbelleğe aldığından, genellikle eskilerini alıyorum. Sunucuyu yeniden başlatmak veya yüklemek gerçekten hoş bir şey değil.

Yanıtlar:


121

@Etki alanını belirli bir sunucudan aramak için sözdizimini kullanabilirsiniz . DNS sunucusu bu etki alanı için yetkiliyse, yanıt önbelleğe alınmış bir sonuç olmaz.

dig @ns1.example.com example.com

NSBir etki alanı için kayıtları sorarak yetkili sunucuları bulabilirsiniz :

dig example.com NS

2
Tamam. Evet @ sözdizimini biliyordum, ancak bunun yerine yetkili sunucuyu sorgulama fikrim yoktu. Teşekkürler!
Daniel

3
Yan not: bir önbellek sunucusunun alacağı yanıtları görmeye çalıştığınız durumlarda +norecurseönerilir. +recurseVarsayılan olarak açık durumda, bir DNS sunucusunun sorunuzu tamamen yorumlama biçimini değiştirir.
Andrew B

4
Ya yetkili sunucuların değişmesini bekliyorsanız?
guaka

@KasperSouren Yetkili sunuculardaki NS kayıtlarından mı yoksa üstteki tutkal kayıtlarından mı bahsediyorsunuz? Ebeveynini bulabilirsin, +traceancak önbelleğe almayı önemseme Andrew B, ad sunucularının değişmesini beklerken önbelleğe almanın sizi nasıl kandırabileceğinin iyi bir açıklamasını yazdı.
Ladadadada

3
google dns de kontrol edebilirsiniz dig @8.8.8.8 example.com. orada kayıtlar çok daha hızlı görünüyor.
machineaddict,

26

DNS protokolünde, bir ad sunucuyu önbelleğini kullanmadan yanıt vermeye zorlayacak bir mekanizma yoktur. Kazmak kendisi bir isim sunucusu değil, sadece standart DNS isteklerini kullanarak sorgunuzu yapılandırdığınız isim sunucularına ileten bir araçtır. DNS , sunucuya özyineleme kullanmamasını söylemenin bir yolunu içerir, ancak istediğiniz bu değildir. Bu, yalnızca yetkili bir ad sunucusunu doğrudan sorgulamak istediğinizde kullanışlıdır.

Bir ad sunucusunun önbelleğinden yanıt vermesini durdurmak istiyorsanız, bunu yalnızca ad sunucusundaki yapılandırmayı değiştirerek yapabilirsiniz; ancak ad sunucusunu denetlemezseniz, bu imkansızdır.

Bununla birlikte, yapılandırılmış ad sunucularını atlamak için kazı kazanabilir ve kök sunuculara geri dönen kendi özyinelemeli isteğini gerçekleştirebilirsiniz. Bunu yapmak için +traceseçeneği kullanın.

dig example.com +trace

Uygulamada bu, yerel önbellekleme çözümleyiciniz yerine yalnızca yetkili sunucuları sorgulayacağından, bu sunucular dahili önbellekleme kullanıyor olsa bile sonuç bayat olmaz. Kullanmanın ek yararı +trace, yol boyunca yapılan ayrı isteklerin tümünü görebilmenizdir.


10
+norecurseSadece kullanmak , ad sunucusuna, sahip olduğu bilgileri (varsa önbelleğe alınmış bilgiler dahil olmak üzere) ne olursa olsun geri göndermesini, böylece doğru olmamasını söyler. +traceÇalışacak çünkü özyinelemeyi yetkili bir sunucuya kadar izleyecektir.
Raman

1
Bu cevabı +norecurse, konuyla karıştığı için öneriyi kaldırmak için değiştirdiğimi unutmayın .
thomasrutter

13

Burada dikkat edilmesi gereken pek çok kişinin hiç konuşmadığı bir şey +traceolduğunu fark ettiğim önemli bir şey , kullanmanızın +trace, config istemcinizde belirtilen DNS sunucusunda değil, dig istemcisinin izleme yapacağını ifade etmesidir. Yani, başka bir deyişle, kazı istemciniz, sorsanız bir özyinelemeli DNS sunucusu gibi çalışacaktır. Fakat - önemlisi, önbellekiniz yok.

Daha fazla ayrıntı - öyleyse /etc/resolv.conf'nuzu mxkullanarak bir kayıt istemiştiyseniz dig -t mx example.com8.8.8.8 ise, bölgenin TTL'sinde bir şey yapmak önbelleğe alınmış sonucu döndürür. Bir şekilde, kendi bölgeniz ve Google’ın nasıl gördüğü hakkında bir şey arıyorsanız, DNS sonuçlarınızı Google’la Bölgenizin TTL’si için zehirlediniz. Kısa bir TTL'niz varsa fena değil, 1hr'niz varsa bir miktar çöp.

Öyleyse, +traceGoogle’a FIRST saatini soruyorsanız ve önbelleğe alınmış bir girişi olmadığında ne olacağını görmenize yardımcı olacak olsa da, Google’ın herkese +tracesonucunuzun ne olduğunu söyleyeceği konusunda yanlış bir fikir verebilir. Daha önce sormuş olsaydınız ve uzun bir TTL'ye sahipseniz, TTL'nin süresi doluncaya kadar önbellekten hizmet edeceği gibi olmayacak - sonra açıkladığınızla aynı şekilde hizmet edecek +trace.

IMO çok fazla ayrıntı olamaz.


Dig'in kendi önbelleği var mı veya OS önbelleğini mi kullanıyor?
CMCDragonkai

Dig'in önbelleği yok. Kullandığı memba ad sunucusu bunu yaparsa, bundan yararlanır.
thomasrutter

dig mydomain.com +tracebana sadece resolvdsaplama sonuçlarını verir 127.0.0.53. Bakınız github.com/systemd/systemd/issues/5897
James Bowery

Kullanırken +tracekazı başlar belirtilen ad sunucusu kullanıyorsa iz (örneğin 8.8.8.8 o yapılandırdığınız buysa) ilk arama (kök bölgesi) için, ama bundan sonra daha da sorgular için döndürülen ad sunucularını kullanır. Dolayısıyla, yapılandırılmış ad sunucunuz çalışmıyorsa veya kök ad sunucuları için bir sorguyu düzgün bir şekilde yanıtlamıyorsa, sorun yaşayabilirsiniz (yukarıdaki açıklamadaki gibi).
thomasrutter

2

Bu bash, example.com'un DNS girişlerini ilk listelenen ad sunucusundan çıkaracak:

dig @$(dig @8.8.8.8 example.com ns +short | head -n1) example.com ANY +noall +answer
  • İçteki kazı google’ın DNS’ini (8.8.8.8) example.com ad sunucularını almak için sorgular.
  • Dış kazı example.com'un ilk ad sunucusunu sorgular.

İşte bir .zshrc (ve muhtemelen .bashrc) için bir takma adla aynıdır:

# e.g. `checkdns google.com`
checkdns () { dig @$(dig @8.8.8.8 $1 ns +short | head -n1) $1 ANY +noall +answer; ping -c1 $1; }

İşte / .: için çıktı

☀  checkdns slashdot.org                                                                                                dev
-->Server DNS Query

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @ns1.dnsmadeeasy.com. slashdot.org ANY +noall +answer
; (2 servers found)
;; global options: +cmd
slashdot.org.       21600   IN  SOA ns0.dnsmadeeasy.com. hostmaster.slashdotmedia.com. 2016045603 14400 600 604800 300
slashdot.org.       86400   IN  NS  ns3.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns4.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns0.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns2.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns1.dnsmadeeasy.com.
slashdot.org.       3600    IN  MX  10 mx.sourceforge.net.
slashdot.org.       3600    IN  TXT "google-site-verification=mwj5KfwLNG8eetH4m5w1VEUAzUlHotrNwnprxNQN5Io"
slashdot.org.       3600    IN  TXT "v=spf1 include:servers.mcsv.net ip4:216.34.181.51 ?all"
slashdot.org.       300 IN  A   216.34.181.45
-->Local DNS Query
PING slashdot.org (216.34.181.45) 56(84) bytes of data.
64 bytes from slashdot.org (216.34.181.45): icmp_seq=1 ttl=242 time=33.0 ms

--- slashdot.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 33.026/33.026/33.026/0.000 ms

Bu çözüm hatırlamakta pratik olmayacak kadar karmaşık, ancak sorunun çözülmeyeceği kadar basit. digbenim uzmanlık alanım değil - gelişmeler hoş geldiniz :-)

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.