DNS önbelleğini nasıl temizlerim?


191

Sadece DNS kaydını (güncellenmiş ns1, ns2, ns3.myhostingcompany.comben barındırılan var bıraktığım bir site için), ama yine de etki alanı kayıt park sayfasını olsun.

Sorunun Ubuntu'nun önbelleğe alınmış DNS kayıtları olup olmadığını görmek istiyorum. Ubuntu'nun DNS önbelleğini temizlemenin bir yolu var mı? (eğer böyle bir şey varsa?)


1
Ayrıca, kontrol edin /etc/hosts. Etki alanımın eski IP adresinin önbelleğe alındığından emin oldum, ancak yalnızca DNS yayılımı için sabrım olmadığı için bir süre önce eklediğim kaydı strace ping example.comkaldırmayı unuttuğumu /etc/hostsöğrendim.
ulidtko

2
Bu yanıtların çoğu önbelleğe almanın varsayılan olarak devre dışı bırakıldığını, ancak daha eski sürümlere de işaret ettiğini gösteriyor. Makinemde kesinlikle varsayılan olarak açık görünüyor (18.04) ve aşağıdaki çeşitli cevaplar size nasıl
yıkanacağını gösteriyor

Yanıtlar:


64

18.04 ve üstü için

Mike Shultz'in cevabına bak .

11.10 ve altı için

Ubuntu, varsayılan olarak dns kayıtlarını önbelleğe almaz; bu nedenle, bir dns önbelleği yüklemediğiniz sürece temizlenecek bir şey yoktur.

DNS kayıtları büyük olasılıkla sağlayıcınızın DNS sunucuları tarafından önbelleğe alınır, bu nedenle yaptığınız DNS değişikliklerinin başarılı olup olmadığını kontrol etmek istiyorsanız, etki alanı barındırma hizmetinizden bir DNS sunucusunu dig ile sorgulayabilirsiniz:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Ubuntu’nun önbelleğe alma işlemini başlatmasını istiyorum, pdnsdbirlikte yüklemenizi öneririz resolvconf. nscdadamcağız ve tavsiye edilmez.


14
Ns'nin neden buggy olduğuna dair herhangi bir referans var mı? Bugün hala buggy var mı (2012-10)?
jjmontes

3
Yanıtınızı güncelleyebilir misiniz? ATM, Ubuntu sürüm 11.10+ sürümlerine benziyor ve DNS kayıtlarını önbelleğe alıyor.
Martin Konecny

70

Ubuntu 17.04 ve üstü (18.04)

Ubuntu 17.04 ve sonrasında, DNS için systemd resolve kullanılır. Sistemin önbelleklerini şu şekilde temizleyebilirsiniz:

sudo systemd-resolve --flush-caches

2
OMG, benimle evlenir misin? 18.04 da \ o / ile sorunumu Çözüldü
NiKo

5
Bu benim için 16.04 LTS'de işe yaramadı - ama önbelleğe almanın başka bir yolunu görmek yararlı oldu:sudo systemd-resolve --statistics
Phil

günü kurtardın
Danilo Gomes

1
18.04 tarihinde çalışmıyor
LnxSlck

1
Benim için systemctl restart systemd-resolved.servicede 18.04 tarihinde çalıştı.
Justin Sane

69

12.04

Ubuntu 12.04 dnsmasqyerleşik olanı kullanır network-manager, ancak dns'i önbelleğe almaz , bu nedenle temizlemenize gerek yoktur. İşte syslogbu noktayı ispatlamak için benden bir örnek satır :

dnsmasq[2980]: started, version 2.59 cache disabled

Ayrıca herhangi bir konfigürasyona gerek yoktur dnsmasq. Stok ayarlarıyla çalışıyorsanız, bu Ubuntu makalesinde açıklandığı şekilde açıkça ayarlanmış olmanız gerekir .

Ayarlarınızı yenilemek istiyorsanız, devre dışı bırakıp ardından ağ kurmayı veya çalıştırmayı etkinleştirebilirsiniz.

sudo service network-manager restart

Bu yeniden başlatılır dnsmasqçünkü yerleşiktir network-manager; Bunun syslogiçin kanıtı kontrol edin .

Dhcp ile kablolu bir bağlantı kullanıyorsanız network manager, ayarları doğrudan yönlendiricinizden alacaksınız ve Ubuntu'da oturum açtığınızda bağlantınız otomatik olarak kurulacaktır. Web arayüzü üzerinden erişebiliyorsanız, ayarların doğru olup olmadığını kontrol edebilir ve gerekirse yeniden başlatabilirsiniz. Bu, dns ile ilgili genel bir sorunsa, isp dns'niz yerine Google dns'i kullanmayı deneyebilirsiniz ve bununla ilgili daha fazla bilgiyi burada ayrıntılı olarak bulabilirsiniz .


sudo service network-manager restartbenim için hile
Debian'la yaptı

61

Ubuntu'nun 17.04 ve sonrasında sistemd-çözümünü kullandığını ve bu nedenle bu yanıtın en son Ubuntu sürümleri için geçerli olmadığını unutmayın. " DNS önbelleğini Ubuntu 17.04 ve daha üstü (18.04) temizleme "

Varsayılan olarak, DNS Ubuntu <17.04’te önbelleğe alınmamıştır (ancak ağda veya uygulamada önbelleğe alınmış olabilir)

Bir yolunu veya diğerini dnsmasqönbelleğe alma olup olmadığını onaylamak ps ax | grep dnsmasqiçin, çalıştır komutuna bakın ve bakın. İşte benim varsayılan 13.10 makinemin bir dökümü:

/ usr / sbin / dnsmasq \
  --no-resolv \
  - ön planda tutma \
  --no-hosts \
  --bind-arabirimleri \
  --pid-file = / var / run / NetworkManager / dnsmasq.pid \
  --listen-address = 127.0.1.1 \
  --conf-file = / var / run / Ağ Yöneticisi / dnsmasq.conf \
  --cache-size = 0 \
  - proxy-dnssec \
  --enable-dbus = org.freedesktop.NetworkManager.dnsmasq \
  --conf-dir = / etc / NetworkManagerın / dnsmasq.d

/etc/NetworkManager/dnsmasq.dvarsayılan olarak boştur. Bu yüzden, içeriye giren herhangi bir geçersiz kılma yok ve sadece kontrol --cache-size=0etmek ne demek istediğimizi ( sınırsız önbellek yerine ) man dnsmasqgösteriyor:

-c, --cache-size=<cachesize>
  Set the size of dnsmasq's cache. The default is 150 names. 
  Setting the cache size to zero disables caching.

Bu nedenle, DNS önbelleğe dnsmasq alınabiliyorken , kutuyu önbelleğe almıyor. Aynı sayfada olup olmadığınızı kontrol etmek için makinenizi ve çeşitli konfigürasyon dizinlerini kontrol edebilirsiniz.

Önbellek sorunları görüyorsanız, bu durum muhtemelen birkaç yerden birinde gerçekleşiyor:

  • Bilgisayarınızdan yukarı doğru. Bazı yönlendiriciler önbelleklenir. Birçok kurumsal ağ DNS'i önbelleğe alır. Birçok ISS işleten DNS sunucusu ve kendi önbelleklerini kullanacaklar. Bir ağ önbelleğine karşı garanti vermenin tek yolu, el ile yenileyebileceğiniz bir önbellek kullanmaktır. Bu yüzden OpenDNS'yi seviyorum.
  • İstemci uygulamasında (özellikle tarayıcılar). Uygulamalar, Ubuntu'nun üzerinde hiçbir etkisi olmadığı kendi önbellekleme işlemlerini yapabilir. Firefox DNS'i nasıl önbelleğe alır ? Chrome'un DNS önbelleği nasıl temizlenir ? Diğer tarayıcıların (ve uygulamaların) kendi mekanizmaları olabilir.
  • Namluyu buraya kazıyorum ama belki de önbelleğe almak yerine Ubuntu'da standart olmayan bir DNS sunucusu kurdunuz dnsmasq. Birçok vardır: nscd, DJBDNS dnscache(aka TinyDNS), pdns, pdnsd, Bind9 (ve türevleri) ve daha ben bile hatırlamıyorum. Bunlar olacak muhtemelen de kanıtlanabilir /etc/resolv.conf(vb / resolvconf / `bu dosyayı autogen için / içinde yapılandırma ile). Aşağıda yerel olarak ele alınan bir DNS sorgusu gösterilmektedir:

    $ nslookup askubuntu.com
    Server:     127.0.1.1
    Address:    127.0.1.1#53
    
    Non-authoritative answer:
    Name:   askubuntu.com
    Address: 198.252.206.24
    

    8.8.8.8'e ulaşmıyorsanız (veya DNS sunucunuzun ne olmasını beklerseniz beklemeyin), bunun yerine ne attığınızı kontrol edin. Benim durumumda bunun sadece dnsmasqLXC için DNS sorgularını yansıtmak üzere kurulduğunu görüyorum , ancak sizin durumunuzda kötü önbellek işleri yapıyor olabilir.

    Listelenen önbellekleri yaptıysanız, her birini temizleme işlemi değişiklik gösterir:

    sudo /etc/init.d/nscd reload    # nscd
    sudo /etc/init.d/named restart  # bind9
    

Hafifçe ilgili bir notta, önbelleğe almayı etkinleştirmek için buna bakındnsmasq .


1
Ps aux | grep'ten çıktılarım sizinkilerle aynı, ancak makinemde kesinlikle DNS'leri önbelleğe alan bir şey var. Eğer dnsmasq değilse, başka bir şeydir. İspat: Sunucumda bir alt etki alanı oluşturdum, ancak ping yapamadım, ana makineye erişilemiyor. Foreveryoneorjustme.com adresinde kontrol ettim ve oldu, bu yüzden yayılma sorunu atıldı. Yönlendiricim veya ISS'm değil, çünkü Google’ın DNS’sini 8.8.8.8 kullanıyorum. Sonra bilgisayarı yeniden başlattım (ve yönlendiriciyi DEĞİLDİR) ve etki alanına erişebildim. Şanssız yeniden başlatmadan önce bir düzine kez deniyordum. İlk önce yeniden başlatma ana bilgisayara ulaştıktan sonra deneyin.
matteo

Bu arada, aynı şeyi ilk kez deneyimlemedim. Aylar önce, aynısı oldu ve etki alanına ulaşabilmemin tek yolu bilgisayarı yeniden başlatmaktı, ancak daha sonra eski bir Ubuntu sürümü vardı.
matteo

@ matteo Tarayıcı?
Oli

hayır, ping ile test ettiğimi söylediğim gibi (sadece) tarayıcıları değil.
matteo

@ matteo Daha fazlasını ekledim ancak fikirleri tükeniyor. Sadece bu çok daha fazla yerde birileri değildir olabilir DNS :) önbelleğe
Oli

39

12.04 için:

Ubuntu 12.04, DNS'yi dnsmasq kullanarak önbelleğe alır (bkz. man dnsmasq). Önbelleği temizlemek için aşağıdakileri kullanın:

sudo kill -HUP $(pgrep dnsmasq)

Teşekkür ederim! 12.04’ün varsayılan önbelleklemesi hakkında herhangi bir şeyden bahsettiğim ilk kişisin!
Tarka

6
12.04 öntanımlı olarak dns'i önbelleğe almaz - ağ yöneticisini yeniden başlattıktan sonra syslog'unuzu kontrol edin; dnsmasq’ın cache-disabled ile başladığını gösteren bir girdi olacaktır.

1
Önbelleğin varsayılan olarak etkin olup olmadığını bilmiyorum, ancak bu cevap benim için çalıştı.
Jeyk

Neden sadece değil sudo killall -HUP dnsmasq?
James Haigh,

1
pkillyerine kullanın killvepgrep
Robert Siemer


11

Şahsen, değişikliklerin işe yaradığından emin olmak için yenilemeye zorlamak için OpenDNS kullanır ve Önbellek Kontrolü işlevini kullanırdım, ancak 48 saat içinde kullanıcılarınız için yenilemelerini garanti edemezsiniz .

DNS yavaş bir canavardır. Sabır aklı başında tutar.


+1 OpenDNS kullandığım kadar net önbellek de çok kullanışlıdır.
Mark Davidson,

OpenDNS'den şüpheliyim. İlk başta onunla mutlu oldum ama sonra şüphelenmeye başladım; Her ne kadar ISS ve OpenDNS arasında bir seçim olsa da, OpenDNS ile daha iyi olduğumu tahmin ediyorum, değil mi?
Jono

2
OpenDNS'in daha az kötülük olduğunu söyleyebilirim. Trafiğinizden para kazanmak istiyorlar ancak yalnızca etki alanı isabetlerinde.
Oli

@Oli Bağlantı kapalı. Hala kullanıyorsanız, lütfen bağlantıları güncelleyebilir misiniz?
Shayan

7

Eğer nscd kullanıyorsanız:

sudo /etc/init.d/nscd restart

Önbelleğe alan işletim sistemi olamayacağından bahsetmeye değer. Herkes DNS’i önbelleğe almayı sever ... Bazı testler:

Yeni veya eski IP olup olmadığını kontrol edin. Çoğu tarayıcı, DNS’yi de önbelleğe alır; bu nedenle Chromium’u yeniden başlatmadıysanız veya en son ne göremiyorsanız.

ping yourdomain.com

Yerel ad sunucunuzu /etc/resolv.conf dosyasındaki başka bir sağlayıcıya, google veya seviyeye çevirin, örnekler:

nameserver 8.8.8.8
nameserver 4.2.2.2

Ve sonra tekrar ping.

Yönlendiricinizin DNS’i herhangi bir biçimde önbelleğe almadığından emin olun. (Yönlendirici / ürün yazılımı / vb. İle değişir)

Sonunda sabır. DNS’in İnternet’te yayılması biraz zaman alabilir.


2
Eğer NetworkManager ve DHCP /etc/resolve.conf kullanıyorsanız, DHCP kirası sona erdiğinde temizlenir, bu yüzden bunun daha uzun süre çalışmasını sağlamak için NetworkManager'da statik bir ip ayarlamanız gerekir.
LassePoulsen,

+1 Firefox’un DNS’yi önbelleğe aldığını fark etmedim, bu çok yardımcı oldu.
dalga

Yerel ad sunucusunu google’a geçirmek için +1 çalıştı
Bibek Sharma

5

Yukarıdaki tüm cevaplar isim çözümünde önemli bir şeyi unuttu: genellikle isim çözümlemesini talep ettiğiniz DNS sunucuları kayıtları tutan kişi değil (yetkili sunucu). Her bir DNS kaydının bir Time To Live değeri ile birlikte gelmesi, bu çözüm zincirinde her DNS sunucusunu bu değer tarafından belirtilen saniye boyunca önbellekleme yapmak zorunda bırakacaktır. Bu nedenle, yalnızca makinenizde önbellekleme yapabilirsiniz, ancak kesin olarak ad aramanın sonucu kontrol etmediğiniz bir sunucuda bir yere önbelleğe alınır.

Bir ad kaydı değişikliğinden hemen haberdar edilecek tek çözüm, yetkili ad sunucusundaki girişi oluştururken / güncellerken 0 TTL değeri kullanmaktır. Ancak bu, her ad çözümlemesi için, sunucuya isabet edeceği, genellikle bu kayıtcılar tarafından izin verilmediği anlamına gelir. Örneğin, seçebileceğiniz önceden tanımlanmış TTL değerlerinin bir listesini sağlayabilirler.

Farklı etki alanı adlarını yönetiyorum ve değişikliğin yetkili ad sunucularında iyi uygulandığından emin olmak için dnstracer, DNS kökünden gelen her sunucuda arama sonucunu gösterebilecek bir araç kullanıyorum .

Sonuç olarak, herhangi bir DNS önbelleğe alma çözümü olmasa bile, DNS kayıtlarını değiştirdiğiniz an ile değişiklik bir PC'de göründüğü an arasında bir gecikme yaşanacaktır. Bu gecikme büyük ölçüde kayıtların TTL'sine ve PC ile yetkili ad sunucusu arasındaki DNS sunucusu sayısına bağlıdır.


Tabii ki, ancak sorun buysa, bilgisayarı yeniden başlatmak sorunu çözmez.
matteo

2

Ubuntu 14.04 için bu komutu tavsiye ediyorum:

sudo service dns-clean

Varsayılan sunucuya kurulmaz. Sadece 14.04 ve daha altında çalışır.
RJ

1

12.10 ubuntu kutumdaki dns önbelleğini temizlemek için aşağıdaki komutu kullandım ve harika çalıştı.

sudo kill -HUP $(pgrep dnsmasq)

Bir başka yararlı sinyal, syslog'a veya aşağıdakilerden not edildiği gibi, biraz istatistikle uğraşan SIGUSR1'dir man dnsmasq:

--No-daemon modunda veya tam günlük kaydı etkinleştirildiğinde (-q), önbellek içeriğinin eksiksiz bir dökümü yapılır.


pkillyerine kullanın killvepgrep
Robert Siemer

1

Ubuntu 16.04'te, yapmadığım sürece önbelleği alamadım:

sudo service dnsmasq restart

0

Ayrıca çelişkiler de buldum, ancak bu: https://superuser.com/a/521562 benim için diledi (en son güncellemeler ile Ubuntu 13.10, özel ağ paketleri kurulmadı).
Kısacası, sadece bunu kullanın
sudo /etc/init.d/dns-clean


0

OpenDNS'yi özellikle uzak Ubuntu sunucularında öneriyorum, çok daha fazla acı ...

Nasıl yapılır? İyi...

cd /etc/dhcp
sudo nano dhclient.conf

Bunu "request subnet-mask ..." satırından ÖNCE ekleyin

supersede domain-name-servers 208.67.222.222,208.67.220.220;

bu, arayüzü o kadar hızlı yeniden başlatır ki SSH bağlantınızı bile kaybetmemelisiniz

sudo ifdown eth0 && sudo ifup eth0

yeni openDNS'inizin doğru takılıp takılmadığını görmek için bunu kontrol edin

cat /etc/resolv.conf

Bu kesinlikle sorunun cevabı değil.
blafasel
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.