Bagaimana cara menghapus cache DNS?


191

Aku hanya memperbarui catatan DNS ( ns1, ns2, ns3.myhostingcompany.com) untuk situs saya sudah mendapat host, tapi aku masih mendapatkan halaman parkir domain registrar.

Saya ingin melihat apakah masalahnya adalah catatan DNS cache Ubuntu. Apakah ada cara untuk menghapus cache DNS Ubuntu? (jika hal seperti itu ada?)


1
Juga, periksa /etc/hosts. Saya hanya yakin bahwa alamat IP lama dari domain saya sedang di-cache, tetapi hanya strace ping example.commengungkapkan bahwa saya lupa menghapus /etc/hostscatatan yang saya tambahkan beberapa waktu lalu karena kurang sabar untuk propagasi DNS.
ulidtko

2
banyak jawaban ini menyarankan caching dinonaktifkan secara default, tetapi mereka juga merujuk versi yang lebih lama. Tampaknya secara otomatis di mesin saya (18,04) dan berbagai jawaban di bawah ini menunjukkan kepada Anda bagaimana menyiramnya, cukup gulir ke bawah
Madivad

Jawaban:


64

Untuk 18,04 dan lebih tinggi

Lihatlah jawaban Mike Shultz .

Untuk 11.10 dan di bawah

Ubuntu tidak mem-cache catatan dns secara default jadi kecuali Anda sudah menginstal cache dns tidak ada yang perlu dihapus.

Data DNS kemungkinan di-cache oleh server DNS penyedia Anda sehingga jika Anda ingin memeriksa apakah perubahan DNS yang Anda buat berhasil, Anda bisa menginterogasi server DNS dari layanan hosting domain Anda dengan menggali:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Kalau Anda ingin Ubuntu mulai cns dns saya sarankan menginstal pdnsdbersama resolvconf. nscdbermasalah dan tidak disarankan.


14
Adakah referensi mengapa nscd buggy? Apakah masih bermasalah hari ini (2012-10)?
jjmontes

3
Dapatkah Anda memperbarui jawaban Anda - ATM itu terdengar seperti Ubuntu versi 11.10+ melakukan cache DNS records.
Martin Konecny

70

Ubuntu 17.04 dan lebih tinggi (18.04)

Dari Ubuntu 17.04 dan selanjutnya, systemd-resol digunakan untuk DNS. Anda dapat mem-flush cache systemd seperti:

sudo systemd-resolve --flush-caches

2
OMG, maukah kamu menikah denganku? Memecahkan masalah saya dengan 18.04 juga \ o /
NiKo

5
Ini tidak berfungsi untuk saya pada 16,04 LTS - tetapi berguna untuk melihat cara lain yang mungkin telah men-cache:sudo systemd-resolve --statistics
Phil

Anda menyelamatkan hari itu
Danilo Gomes

1
Tidak berfungsi pada 18,04
LnxSlck

1
Bagi saya, systemctl restart systemd-resolved.servicejuga bekerja pada 18,04.
Justin Sane

69

12,04

Ubuntu 12,04 menggunakan dnsmasqyang dibangun ke dalam network-manager, tetapi tidak cache dns sehingga tidak perlu membilasnya. Berikut adalah contoh baris dari saya sysloguntuk membuktikan hal itu:

dnsmasq[2980]: started, version 2.59 cache disabled

Konfigurasi juga tidak diperlukan dnsmasq. Jika Anda menjalankan dengan pengaturan stok, itu bukan caching dns, karena untuk melakukannya Anda harus mengaturnya secara eksplisit seperti yang dijelaskan oleh artikel Ubuntu ini .

Jika Anda ingin menyegarkan kembali pengaturan Anda, Anda dapat menonaktifkan dan kemudian mengaktifkan jaringan atau menjalankan

sudo service network-manager restart

Ini restart dnsmasqkarena itu dibangun untuk network-manager; periksa syslogbukti Anda untuk ini.

Jika Anda menggunakan koneksi kabel dengan dhcp network managerakan mengambil pengaturan langsung dari router Anda dan koneksi Anda akan dibuat secara otomatis ketika Anda login ke Ubuntu. Anda dapat memeriksa bahwa pengaturan sudah benar di router Anda jika Anda dapat mengaksesnya melalui antarmuka web, dan mungkin reboot jika perlu. Jika ini merupakan masalah umum dengan dns, Anda dapat mencoba menggunakan Google dns alih-alih ISP Anda, dan informasi lebih lanjut tentang hal itu dijelaskan di sini .


sudo service network-manager restartmelakukan trik untuk saya dengan Debian
Pierre de LESPINAY

61

Perhatikan bahwa Ubuntu menggunakan systemd-resol dari 17.04 dan seterusnya sehingga jawaban ini tidak berlaku lagi untuk versi Ubuntu terbaru. Lihat " flush DNS cache di Ubuntu 17.04 dan lebih tinggi (18.04) "

Secara default, DNS tidak di-cache di Ubuntu <17.04 (tetapi mungkin di-cache di jaringan atau aplikasi)

Untuk mengkonfirmasi satu atau lain cara apakah dnsmasqcaching, jalankan ps ax | grep dnsmasqdan lihat perintah yang berjalan. Berikut ini rincian mesin 13.10 default saya:

/ usr / sbin / dnsmasq \
  --no-resolv \
  --keep-in-foreground \
  --no-host \
  --bind-interface \
  --pid-file = / var / run / NetworkManager / dnsmasq.pid \
  --listen-address = 127.0.1.1 \
  --conf-file = / var / run / NetworkManager / dnsmasq.conf \
  --cache-size = 0 \
  --proxy-dnssec \
  --enable-dbus = org.freedesktop.NetworkManager.dnsmasq \
  --conf-dir = / etc / NetworkManager / dnsmasq.d

/etc/NetworkManager/dnsmasq.dkosong secara default. Jadi tidak ada override yang masuk ke sana dan hanya untuk memeriksa --cache-size=0artinya apa yang kami pikir artinya (alih-alih cache tidak terbatas ), man dnsmasqmenunjukkan:

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

Jadi, sementara dnsmasq bisa men - cache DNS, itu bukan caching kotak. Anda dapat memeriksa mesin Anda dan berbagai direktori konfigurasi untuk memeriksa Anda berada di halaman yang sama.

Jika Anda melihat masalah cache, ini kemungkinan terjadi di salah satu dari beberapa tempat:

  • Hulu dari komputer Anda. Beberapa cache router. Banyak jaringan perusahaan akan melakukan cache DNS. Banyak server DNS yang dijalankan ISP dan akan menggunakan cache mereka sendiri. Satu-satunya cara untuk menjamin terhadap cache jaringan adalah dengan menggunakan cache yang Anda bisa menyegarkan secara manual. Inilah sebabnya saya suka OpenDNS.
  • Dalam aplikasi klien (terutama browser). Aplikasi dapat melakukan segala macam caching mereka sendiri yang tidak berpengaruh pada Ubuntu. Bagaimana Firefox melakukan cache DNS . Cara menghapus cache DNS Chrome . Peramban lain (dan aplikasi) mungkin memiliki mekanisme sendiri.
  • Saya sedang mengais laras di sini, tetapi mungkin Anda telah menginstal server DNS non-standar di Ubuntu alih-alih mengaktifkan caching dnsmasq. Ada banyak: nscd, DJBDNS dnscache(alias TinyDNS), pdns, pdnsd, Bind9 (dan variannya), dan lebih aku bahkan tidak bisa ingat. Ini mungkin akan dibuktikan di /etc/resolv.conf(dengan config di / etc / resolvconf / `untuk autogen file itu). Berikut ini menunjukkan permintaan DNS yang dicegat secara lokal:

    $ 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
    

    Jika Anda tidak mencapai 8.8.8.8 (atau apa pun yang Anda harapkan dari server DNS Anda), periksa apa yang Anda pukul. Dalam kasus saya, saya bisa melihat ini hanya dnsmasqdiatur untuk mencerminkan permintaan DNS kembali untuk LXC, tetapi dalam kasus Anda mungkin melakukan hal-hal cachey yang buruk.

    Jika Anda telah melakukan cache yang terdaftar, proses untuk menghapus masing-masing bervariasi:

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

Pada catatan yang sedikit terkait, lihat ini untuk mengaktifkan cachingdnsmasq .


1
Output saya dari ps aux | grep sama dengan milik Anda, namun sesuatu pasti caching DNS di mesin saya. Jika bukan dnsmasq, itu adalah hal lain. Bukti: Saya membuat subdomain di server saya, namun saya tidak bisa melakukan ping, host yang tidak dapat dijangkau. Saya memeriksa di downforeveryoneorjustme.com dan sudah habis, jadi masalah propagasi dibuang. Bukan router saya, atau ISP saya, karena saya menggunakan Google's 8.8.8.8 DNS. Lalu saya reboot komputer (dan BUKAN router) dan saya bisa mencapai domain. Saya telah mencoba beberapa kali sebelum reboot tanpa hasil. Coba pertama setelah reboot mencapai host.
matteo

Dan ini bukan pertama kalinya saya mengalami hal yang sama. Beberapa bulan yang lalu hal yang sama terjadi dan satu-satunya cara saya mencapai domain adalah me-restart komputer, tetapi kemudian saya memiliki versi Ubuntu yang lebih lama.
matteo

@matteo Browser?
Oli

tidak, seperti yang saya katakan saya uji dengan ping, bukan (hanya) browser.
matteo

@matteo Saya telah menambahkan lebih banyak tetapi saya kehabisan ide. Hanya saja tidak ada banyak tempat lagi yang bisa di- cache DNS :)
Oli

39

Untuk 12,04:

Ubuntu 12,04 melakukan cache DNS menggunakan dnsmasq (lihat man dnsmasq). Gunakan yang berikut ini untuk menghapus cache:

sudo kill -HUP $(pgrep dnsmasq)

Terima kasih! Anda adalah orang pertama yang saya lihat menyebutkan tentang cache standar 12,04!
Tarka

6
12,04 tidak melakukan cache dns secara default - periksa syslog Anda setelah memulai kembali manajer jaringan; itu akan memiliki entri yang menunjukkan dnsmasq dimulai dengan cache-disable.

1
Saya tidak tahu apakah cache diaktifkan secara default, tetapi jawaban ini berhasil bagi saya.
jeyk

Kenapa tidak adil sudo killall -HUP dnsmasq?
James Haigh

1
gunakan pkillsebagai ganti killdanpgrep
Robert Siemer


11

Secara pribadi, saya akan menggunakan OpenDNS dan menggunakan fungsi Cache Check untuk memaksakan penyegaran hanya untuk memastikan perubahan berfungsi tetapi Anda tidak dapat menjamin mereka akan menyegarkan untuk pengguna Anda dalam waktu 48 jam.

DNS adalah binatang yang lambat. Kesabaran akan membuat Anda tetap waras.


+1 Saya menggunakan OpenDNS juga menghapus cache sangat berguna.
Mark Davidson

Saya curiga terhadap OpenDNS. Awalnya saya senang dengan hal itu, tetapi kemudian saya mulai curiga; walaupun saya kira itu pilihan antara ISP dan OpenDNS, saya lebih baik dengan OpenDNS, kan?
Jono

2
Saya akan mengatakan OpenDNS adalah kejahatan yang lebih rendah. Mereka ingin memonetisasi traffic Anda tetapi hanya pada hit domain yang buruk.
Oli

@Oli Tautannya tidak berfungsi. Jika Anda masih menggunakannya, bisakah Anda memperbarui tautannya?
Shayan

7

Jika Anda menggunakan nscd:

sudo /etc/init.d/nscd restart

Perlu disebutkan bahwa mungkin bukan OS yang menyimpannya. Semua orang suka melakukan cache DNS ... Beberapa tes:

Periksa untuk melihat apakah itu IP baru atau lama. Sebagian besar browser juga cache DNS, jadi jika Anda belum me-restart Chromium atau apa pun yang Anda mungkin tidak melihat yang terbaru.

ping yourdomain.com

Alihkan server nama lokal Anda di /etc/resolv.conf ke penyedia lain, google atau level, contoh:

nameserver 8.8.8.8
nameserver 4.2.2.2

Dan kemudian ping lagi.

Periksa untuk memastikan router Anda tidak melakukan caching DNS dalam bentuk apa pun. (Bervariasi berdasarkan router / firmware / dll)

Akhirnya kesabaran. DNS dapat mengambil sedikit waktu untuk menyebar melalui internet.


2
Jika menggunakan NetworkManager dan DHCP /etc/resolve.conf akan memerah ketika penyewaan DHCP berakhir, maka Anda harus mengatur ip statis di NetworkManager agar ini berfungsi lebih lama.
LassePoulsen

+1 Saya tidak menyadari Firefox sedang melakukan caching DNS, ini sangat membantu.
wavemode

+1 untuk mengalihkan server nama lokal ke google berfungsi
Bibek Sharma

5

Semua jawaban di atas lupa satu hal penting dalam resolusi nama: umumnya server DNS yang Anda minta resolusi namanya bukan yang memegang catatan sendiri (server otoritatif). Karena setiap catatan DNS dilengkapi dengan nilai Time To Live yang akan mewajibkan setiap server DNS dalam rantai resolusi untuk melakukan caching selama jumlah detik yang disebutkan oleh nilai ini. Jadi tidak hanya Anda dapat melakukan cache di mesin Anda, tetapi PASTI hasil pencarian nama akan di-cache di suatu tempat di server yang tidak Anda kontrol.

Satu-satunya solusi untuk segera diberitahu tentang perubahan catatan nama adalah dengan menggunakan nilai TTL 0 saat membuat / memperbarui entri di server nama otoritatif. Tetapi ini berarti bahwa untuk setiap resolusi nama, server akan dipukul, biasanya ini tidak diizinkan oleh pendaftar. Misalnya, mereka dapat memberikan daftar nilai TTL yang telah ditentukan sebelumnya yang dapat Anda pilih.

Saya mengelola nama domain yang berbeda dan untuk memastikan bahwa perubahan diterapkan dengan baik di server nama otoritatif, saya menggunakan alat yang disebut dnstraceryang dapat menampilkan hasil pencarian pada setiap server dari root DNS.

Sebagai kesimpulan, bahkan tanpa solusi caching DNS, masih akan ada penundaan antara saat Anda mengubah catatan DNS dan perubahan terlihat pada PC. Penundaan ini sangat tergantung pada TTL catatan dan pada jumlah server DNS antara PC Anda dan server nama resmi.


Tentu saja, tetapi jika itu masalahnya, me-reboot komputer tidak akan memperbaikinya.
matteo

2

Untuk ubuntu 14.04, saya merekomendasikan perintah ini:

sudo service dns-clean

Tidak di server default menginstal. Hanya berfungsi pada 14,04 dan di bawah.
RJ

1

Saya menggunakan perintah berikut untuk menyiram cache dns pada kotak ubuntu 12.10 saya dan bekerja dengan sangat baik.

sudo kill -HUP $(pgrep dnsmasq)

Sinyal bermanfaat lainnya adalah SIGUSR1 yang membuang sedikit statistik ke syslog atau seperti yang dicatat dari man dnsmasq:

Dalam mode --no-daemon atau ketika logging penuh diaktifkan (-q), dump lengkap dari isi cache dibuat.


gunakan pkillsebagai ganti killdanpgrep
Robert Siemer

1

Di Ubuntu 16.04, saya tidak bisa menghapus cache kecuali saya melakukannya:

sudo service dnsmasq restart

0

Saya juga menemukan kontradiksi, tetapi ini: https://superuser.com/a/521562 wajan untuk saya (Ubuntu 13,10 dengan pembaruan terbaru, tidak ada paket jaringan khusus yang diinstal).
Singkatnya, gunakan saja ini
sudo /etc/init.d/dns-clean


0

Saya merekomendasikan openDNS khusus di server remote Ubuntu, ini memudahkan banyak rasa sakit ...

Bagaimana cara melakukannya? Baik...

cd /etc/dhcp
sudo nano dhclient.conf

masukkan ini SEBELUM baris "request subnet-mask ..."

supersede domain-name-servers 208.67.222.222,208.67.220.220;

ini akan memulai ulang antarmuka dengan sangat cepat sehingga Anda seharusnya tidak kehilangan koneksi SSH Anda

sudo ifdown eth0 && sudo ifup eth0

periksa ini untuk melihat apakah openDNS baru Anda diinstal dengan benar

cat /etc/resolv.conf

Itu jelas bukan jawaban untuk pertanyaan itu.
blafasel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.