Câu hỏi Làm cách nào để xóa bộ nhớ cache DNS?


Tôi vừa cập nhật bản ghi DNS (ns1, ns2, ns3.myhostingcompany.com) cho một trang web mà tôi đã lưu trữ, nhưng tôi vẫn nhận được trang đỗ xe của công ty đăng ký tên miền.

Tôi muốn xem liệu sự cố có phải là bản ghi DNS được lưu trong bộ nhớ cache của Ubuntu hay không. Có cách nào để xóa bộ nhớ cache DNS của Ubuntu không? (nếu một thứ như vậy tồn tại?)


153
2017-08-13 21:23


gốc


Cũng kiểm tra /etc/hosts. Tôi vừa chắc chắn rằng địa chỉ IP cũ của miền của tôi đã được lưu vào bộ nhớ cache, nhưng chỉ strace ping example.com tiết lộ rằng tôi đã quên xóa /etc/hosts bản ghi mà tôi đã thêm vào một thời gian trước vì thiếu kiên nhẫn cho việc truyền bá DNS. - ulidtko
rất nhiều câu trả lời cho thấy bộ nhớ đệm bị tắt theo mặc định, nhưng chúng cũng tham chiếu các phiên bản cũ hơn. Nó chắc chắn xuất hiện để được theo mặc định trong máy tính của tôi (18.04) và câu trả lời khác nhau dưới đây cho bạn thấy làm thế nào để tuôn ra nó, chỉ cần cuộn xuống - Madivad


Các câu trả lời:


Từ 18.04 trở lên

Nhìn vào Câu trả lời của Mike Shultz.

Từ 11,10 trở xuống

Ubuntu không lưu trữ các bản ghi dns theo mặc định, do đó, trừ khi bạn đã cài đặt một bộ nhớ cache dns thì không có gì để xóa.

Bản ghi DNS có khả năng được lưu trữ bởi máy chủ DNS của nhà cung cấp của bạn vì vậy nếu bạn muốn kiểm tra xem các thay đổi DNS bạn đã thực hiện có thành công không, bạn có thể thẩm vấn máy chủ DNS từ dịch vụ lưu trữ miền của bạn bằng cách khai thác:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Nó bạn muốn Ubuntu để bắt đầu bộ nhớ đệm dns tôi khuyên bạn nên cài đặt pdnsd cùng với resolvconf. nscd là lỗi và không được khuyến khích.


52
2017-08-14 00:13



Bất kỳ tài liệu tham khảo là tại sao nscd là lỗi? Hôm nay vẫn còn lỗi (2012-10)? - jjmontes
Bạn có thể cập nhật câu trả lời của mình- ATM có vẻ như phiên bản Ubuntu 11.10+ làm bản ghi DNS cache. - Martin Konecny


12.04

Ubuntu 12.04 sử dụng dnsmasq được tích hợp vào network-manager, Nhưng nó không bộ nhớ cache dns do đó không cần phải tuôn ra nó. Đây là một dòng mẫu từ của tôi syslog để chứng minh điều đó:

dnsmasq[2980]: started, version 2.59 cache disabled

Cũng không cần cấu hình dnsmasq. Nếu bạn đang chạy với các thiết lập chứng khoán nó sẽ không được bộ nhớ đệm dns, như đối với nó để làm như vậy bạn phải thiết lập rõ ràng nó như thế này Bài viết trên Ubuntu mô tả.

Nếu bạn muốn làm mới cài đặt của mình, bạn có thể tắt và sau đó bật mạng hoặc chạy

sudo service network-manager restart

Điều này khởi động lại dnsmasq bởi vì nó được tích hợp vào network-manager; kiểm tra của bạn syslog cho bằng chứng cho việc này.

Nếu bạn đang sử dụng kết nối có dây với dhcp network manager sẽ lấy cài đặt trực tiếp từ bộ định tuyến của bạn và kết nối của bạn sẽ tự động được thiết lập khi bạn đăng nhập vào Ubuntu. Bạn có thể kiểm tra xem cài đặt có chính xác trong bộ định tuyến của mình không nếu bạn có thể truy cập thông qua giao diện web và có thể khởi động lại nếu cần.  Nếu đó là vấn đề chung với dns, bạn có thể thử sử dụng Google dns thay vì dns của bạn, và thông tin thêm về điều đó là chi tiết ở đây.


69
2017-09-14 20:39



sudo service network-manager restart đã làm thủ thuật cho tôi với Debian - Pierre de LESPINAY


Lưu ý rằng Ubuntu sử dụng systemd-resolve từ 17.04 trở đi để câu trả lời này không áp dụng nữa cho các phiên bản Ubuntu gần đây. Xem "bộ nhớ cache DNS tuôn ra trong Ubuntu 17.04 trở lên (18.04)"

Theo mặc định, DNS không được lưu trong Ubuntu <17.04 (nhưng nó có thể được lưu trong mạng hoặc ứng dụng)

Để xác nhận một cách này hay cách khác dnsmasq đang lưu vào bộ nhớ cache, chạy ps ax | grep dnsmasq và nhìn vào lệnh đang chạy. Dưới đây là bảng phân tích về máy 13.10 mặc định của tôi:

/ usr / sbin / dnsmasq \
  --no-resolv \
  - giữ tiền cảnh \
  --no-hosts \
  --các giao diện \
  --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.d được để trống theo mặc định. Vì vậy, không có bất kỳ phần ghi đè nào trong đó và chỉ để kiểm tra --cache-size=0có nghĩa là ý của chúng ta (thay vì vô hạn cache), man dnsmasq trình diễn:

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

Vì vậy, trong khi dnsmasq  có thể DNS bộ nhớ cache, nó không phải là bộ nhớ đệm ra khỏi hộp. Bạn có thể kiểm tra máy của bạn và các thư mục cấu hình khác nhau để kiểm tra bạn đang ở trên cùng một trang.

Nếu bạn gặp sự cố bộ nhớ cache, điều này có thể xảy ra ở một trong một vài nơi:

  • Thượng nguồn từ máy tính của bạn. Một số bộ định tuyến bộ nhớ cache. Nhiều mạng công ty sẽ lưu DNS. Nhiều máy chủ DNS chạy bằng ISP và sẽ sử dụng bộ nhớ cache của chính chúng. Cách duy nhất để đảm bảo chống lại bộ nhớ cache mạng là sử dụng bộ nhớ cache mà bạn có thể làm mới theo cách thủ công. Đây là lý do tại sao tôi thích OpenDNS.
  • Trong ứng dụng khách (đặc biệt là trình duyệt). Các ứng dụng có thể thực hiện tất cả các loại bộ nhớ đệm của riêng chúng mà Ubuntu không có hiệu lực. Cách Firefox lưu trữ DNS. Cách xóa bộ nhớ cache DNS của Chrome. Các trình duyệt khác (và các ứng dụng) có thể có các cơ chế riêng của chúng.
  • Tôi đang cạo thùng ở đây nhưng có lẽ bạn đã cài đặt một máy chủ DNS không chuẩn trong Ubuntu thay vì chuyển bộ nhớ đệm vào trong dnsmasq. Có nhiều: nscd, DJBDNS dnscache (aka TinyDNS), pdns, pdnsd, Bind9 (và các biến thể của nó), và nhiều hơn nữa tôi thậm chí không thể nhớ. Những ý chí này có lẽ được chứng minh bằng /etc/resolv.conf (với cấu hình trong / etc / resolvconf / `để autogen tập tin đó). Sau đây cho thấy truy vấn DNS chặn cục bộ:

    $ 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
    

    Nếu bạn không nhấn 8.8.8.8 (hoặc bất cứ điều gì bạn mong đợi máy chủ DNS của bạn được), hãy kiểm tra những gì bạn đang nhấn thay vào đó. Trong trường hợp của tôi, tôi có thể thấy điều này chỉ là dnsmasq thiết lập để phản ánh các truy vấn DNS lại cho LXC, nhưng trong trường hợp của bạn, nó có thể làm những điều tồi tệ.

    Nếu bạn đã thực hiện bộ đệm được liệt kê, quá trình thanh toán bù trừ từng thay đổi:

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

Trên một lưu ý hơi liên quan, xem điều này để bật bộ nhớ đệm trong dnsmasq.


59
2018-03-17 10:40



Đầu ra của tôi từ ps aux | grep giống như của bạn, nhưng một cái gì đó chắc chắn là bộ nhớ đệm DNS trên máy tính của tôi. Nếu nó không phải dnsmasq nó là cái gì khác. Bằng chứng: Tôi đã tạo một tên miền phụ trên máy chủ của mình, nhưng tôi không thể ping nó, máy chủ không thể truy cập được. Tôi đã kiểm tra tại downforeveryoneorjustme.com và nó đã được lên, do đó, vấn đề tuyên truyền bị loại bỏ. Không phải bộ định tuyến của tôi, cũng như ISP của tôi, bởi vì tôi sử dụng DNS của Google 8.8.8.8. Sau đó, tôi khởi động lại máy tính (và không phải là bộ định tuyến) và tôi có thể tiếp cận miền. Tôi đã thử lại hàng chục lần trước khi khởi động lại mà không có may mắn. Trước tiên hãy thử sau khi khởi động lại máy chủ. - matteo
Và đây không phải là lần đầu tiên tôi trải nghiệm điều tương tự, nhân tiện. Vài tháng trước, điều tương tự đã xảy ra và cách duy nhất tôi có thể tiếp cận miền là khởi động lại máy tính, nhưng sau đó tôi đã có một phiên bản Ubuntu cũ hơn. - matteo
@matteo Trình duyệt? - Oli♦
không, như tôi đã nói tôi đã thử nghiệm với ping, không phải (chỉ) trình duyệt (s). - matteo
@matteo Tôi đã thêm nhiều hơn nhưng tôi đang hết ý tưởng. Không chỉ có nhiều nơi hơn ai đó có thể cache DNS :) - Oli♦


Đối với 12.04:

Ubuntu 12.04 có bộ nhớ cache DNS sử dụng dnsmasq (xem man dnsmasq). Sử dụng các mục sau để xóa bộ nhớ cache:

sudo kill -HUP $(pgrep dnsmasq)

40
2017-07-21 21:32



Cảm ơn bạn! Bạn là người đầu tiên tôi thấy đề cập đến bất cứ điều gì về bộ nhớ đệm mặc định của 12.04! - Tarka
12.04 không cache dns theo mặc định, hãy kiểm tra nhật ký hệ thống của bạn sau khi khởi động lại trình quản lý mạng; nó sẽ có một mục cho thấy dnsmasq đang bắt đầu với bộ nhớ cache bị vô hiệu hóa.
Tôi không biết liệu bộ nhớ cache có được bật theo mặc định hay không, nhưng câu trả lời này có hiệu quả đối với tôi. - jeyk
Tại sao không chỉ sudo killall -HUP dnsmasq? - James Haigh
sử dụng pkill thay vì kill và pgrep - Robert Siemer


sudo /etc/init.d/nscd restart

http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html

Cũng như một lưu ý, bạn có thể kiểm tra xem liệu các thay đổi DNS của bạn có được truyền bằng cách sử dụng đào và tra cứu người khác ngoài các máy chủ DNS mặc định của bạn hay không. Trong trường hợp này là google DNS.

dig @8.8.8.8 example.com


16
2017-08-13 21:25



Đáng chú ý rằng nscd không được cài đặt theo mặc định. - Scaine


Ubuntu 17.04 trở lên (18.04)

Từ Ubuntu 17.04 trở đi, systemd-resolve được sử dụng cho DNS. Bạn có thể xóa cache của systemd như sau:

sudo systemd-resolve --flush-caches

12
2018-06-27 04:09



OMG, bạn sẽ kết hôn với tôi? Giải quyết vấn đề của tôi với 18.04 quá \ o / - NiKo
Điều này không hiệu quả đối với tôi vào ngày 16.04 LTS - nhưng thật hữu ích khi thấy một cách khác có thể là cache: sudo systemd-resolve --statistics - Phil


Cá nhân, tôi muốn sử dụng OpenDNS và sử dụng Chức năng kiểm tra bộ nhớ cache để buộc làm mới chỉ để đảm bảo các thay đổi hoạt động nhưng bạn không thể Bảo hành chúng sẽ làm mới cho người dùng của bạn trong vòng 48 giờ.

DNS là một con quái vật chậm. Kiên nhẫn sẽ giữ cho bạn lành mạnh.


11
2017-08-13 21:26



1 Tôi sử dụng OpenDNS cũng như bộ nhớ cache rõ ràng là rất hữu ích. - Mark Davidson
Tôi nghi ngờ về OpenDNS. Lúc đầu tôi rất vui, nhưng sau đó tôi bắt đầu nghi ngờ; mặc dù tôi đoán nếu đó là một sự lựa chọn giữa ISP và OpenDNS, tôi tốt hơn với OpenDNS, phải không? - Jono
Tôi muốn nói OpenDNS là kẻ xấu xa hơn. Họ muốn kiếm tiền từ lưu lượng truy cập của bạn nhưng chỉ kiếm tiền trên các lần truy cập miền xấu. - Oli♦