Làm cách nào để xóa bộ đệm DNS?


191

Tôi chỉ cần cập nhật các bản ghi DNS ( ns1, ns2, ns3.myhostingcompany.com) cho một trang web tôi đã có tổ chức, nhưng tôi vẫn nhận được trang xe đăng ký tên miền.

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


1
Ngoài ra, kiểm tra /etc/hosts. Tôi chỉ chắc chắn rằng địa chỉ IP cũ của tên miền của tôi đã được lưu trong bộ nhớ cache, nhưng chỉ strace ping example.comtiết lộ rằng tôi đã quên xóa /etc/hostsbản ghi mà tôi đã thêm một thời gian trước vì thiếu kiên nhẫn cho việc truyền DNS.
ulidtko

2
Nhiều câu trả lời cho rằng 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 dường như được bật theo mặc định trong máy của tôi (18.04) và nhiều câu trả lời dưới đây cho bạn biết cách làm sạch nó, chỉ cần cuộn xuống
Madivad

Câu trả lời:


64

Cho 18.04 trở lên

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

Cho 11.10 trở xuống

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

Các bản ghi DNS có khả năng được lưu trữ bởi các 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 hay không, bạn có thể thẩm vấn máy chủ DNS từ dịch vụ lưu trữ tên miền của mình bằng dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Bạn muốn Ubuntu bắt đầu bộ nhớ đệm dns tôi khuyên bạn nên cài đặt pdnsdcùng resolvconf. nscdlà lỗi và không nên.


14
Bất kỳ tài liệu tham khảo như tại sao nscd là lỗi? Nó vẫn còn lỗi ngày hôm nay (2012-10)?
jjmontes

3
Bạn có thể cập nhật câu trả lời của mình không - ATM có vẻ như phiên bản Ubuntu 11.10+ thực hiện các bản ghi DNS bộ đệm.
Martin Konecny ​​8/2/2015

70

Ubuntu 17.04 trở lên (18.04)

Từ Ubuntu 17.04 trở đi, phân giải systemd được sử dụng cho DNS. Bạn có thể xóa bộ nhớ cache của systemd như vậy:

sudo systemd-resolve --flush-caches

2
OMG, anh sẽ cưới em chứ? Đã giải quyết vấn đề của tôi với 18.04 quá \ o /
NiKo

5
Điều này không hiệu quả 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 mà nó có thể đã được lưu vào bộ đệm:sudo systemd-resolve --statistics
Phil

bạn đã cứu ngày
Danilo Gomes

1
Không hoạt động vào ngày 18.04
LnxSlck

1
Đối với tôi, systemctl restart systemd-resolved.servicecũng đã làm việc vào ngày 18.04.
Justin Sane

69

12.04

Ubuntu 12.04 sử dụng dnsmasqđược tích hợp sẵn network-manager, nhưng nó không lưu cache dns nên không cần phải xóa nó. Đây là một dòng mẫu từ tôi syslogđể chứng minh điểm đó:

dnsmasq[2980]: started, version 2.59 cache disabled

Cũng không cần cho bất kỳ cấu hình của dnsmasq. Nếu bạn đang chạy với cài đặt chứng khoán, nó sẽ không được lưu vào bộ nhớ cache, vì để làm như vậy, bạn phải thiết lập rõ ràng như bài viết này của 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 dnsmasqbởi vì nó được tích hợp vào network-manager; kiểm tra syslogbằng chứng của bạn cho điều này.

Nếu bạn đang sử dụng kết nối có dây với dhcp network managersẽ 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ác cài đặt có đúng trong bộ định tuyến của mình không nếu bạn có thể truy cập nó qua giao diện web và có thể khởi động lại nếu cần. Nếu đó là một vấn đề chung với dns, bạn có thể thử sử dụng Google dns thay vì isp dns của bạn và thông tin thêm về điều đó được nêu chi tiết tại đây .


sudo service network-manager restartđã lừa tôi với Debian
Pierre de LESPINAY

61

Lưu ý rằng Ubuntu sử dụng độ phân giải systemd 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 " xóa bộ đệm DNS trong Ubuntu 17.04 trở lên (18.04) "

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

Để xác nhận cách này hay cách khác cho dù dnsmasqlà bộ đệm, hãy chạy ps ax | grep dnsmasqvà xem lệnh đang chạy. Đây là sự cố của máy 13.10 mặc định của tôi:

/ usr / sbin / dnsmasq \
  --không giải quyết
  --keep-in-foreground \
  --no-host \
  --bind-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.dtrống rỗng theo mặc định. Vì vậy, không có bất kỳ ghi đè nào xuất hiện trong đó và chỉ để kiểm tra --cache-size=0có nghĩa là những gì chúng tôi nghĩ nó có nghĩa (thay vì bộ đệm không giới hạn ), man dnsmasqhiển thị:

-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ể lưu trữ DNS, nó không lưu vào hộp. Bạn có thể kiểm tra máy của mình và các thư mục cấu hình khác nhau để kiểm tra xem bạn đang ở trên cùng một trang.

Nếu bạn đang gặp vấn đề về bộ đệm, đ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ộ đệm. Nhiều mạng công ty sẽ lưu trữ DNS. Nhiều máy chủ DNS do ISP điều hành và sẽ sử dụng bộ nhớ cache của riêng họ. Cách duy nhất để đảm bảo chống lại bộ đệm mạng là sử dụng bộ đệm bạn có thể tự làm mới. Đây là lý do tại sao tôi thích OpenDNS.
  • Trong ứng dụng khách (đáng chú ý là các 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 riêng mà Ubuntu không có hiệu lực. Làm thế nào Firefox lưu trữ DNS . Cách xóa bộ đệm DNS của Chrome . Các trình duyệt khác (và ứng dụng) có thể có cơ chế riêng.
  • Tôi đang tìm kiếm cái 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ì bật bộ nhớ đệm dnsmasq. Có rất 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 có thể thậm chí không nhớ. Chúng có thể sẽ được chứng minh bằng /etc/resolv.conf(với cấu hình trong / etc / decvconf / `để tự động tạo tệp đó). Sau đây cho thấy một truy vấn DNS bị 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 muốn máy chủ DNS của mình), hãy kiểm tra xem bạn đang nhấn gì. Trong trường hợp của tôi, tôi có thể thấy điều này chỉ dnsmasqđược thiết lập để phản chiếu các truy vấn DNS trở lại cho LXC, nhưng trong trường hợp của bạn, nó có thể đang thực hiện những điều tồi tệ.

    Nếu bạn đã thực hiện các bộ đệm được liệt kê, quy trình xóa 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 để kích hoạt bộ đệmdnsmasq .


1
Đầ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ớ cache DNS trên máy của tôi. Nếu nó không phải là dnsmasq thì nó là thứ 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 downforveryoneorjustme.com và nó đã bị hỏng, vì vậy vấn đề tuyên truyền bị loại bỏ. Không phải bộ định tuyến của tôi, cũng không phải ISP của tôi, vì tôi sử dụng phiên bản 8.8.8.8 của DNS. Sau đó, tôi khởi động lại máy tính (và KHÔNG phải bộ định tuyến) và tôi có thể tiếp cận miền. Tôi đã thử lại hàng tá lần trước khi khởi động lại mà không gặp may. Thử đầu tiên sau khi khởi động lại đến 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ự. Nhiều tháng trước điều tương tự cũng xảy ra và cách duy nhất tôi có thể tiếp cận tê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.
matteo

@matteo Tôi đã thêm nhiều hơn nhưng tôi đang hết ý tưởng. Không có nhiều nơi hơn ai đó có thể lưu trữ DNS :)
Oli

39

Cho 12.04:

Ubuntu 12.04 không lưu DNS bộ đệm bằng cách sử dụng dnsmasq (xem man dnsmasq). Sử dụng cách sau để xóa bộ đệm:

sudo kill -HUP $(pgrep dnsmasq)

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

6
12.04 không lưu cache dns theo mặc định - 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 hiển thị dnsmasq đang bắt đầu bị vô hiệu hóa bộ đệm.

1
Tôi không biết liệu bộ đệm có được bật theo mặc định hay không, nhưng câu trả lời này có hiệu quả với tôi.
jeyk

Tại sao không chỉ sudo killall -HUP dnsmasq?
James Haigh

1
sử dụng pkillthay vì killpgrep
Robert Siemer

15

sudo /etc/init.d/nscd restart

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

Ngoài ra, như một lưu ý, bạn có thể kiểm tra và xem liệu các thay đổi DNS của bạn đã được lan truyền bằng cách sử dụng đào và tìm kiếm với người khác không phải là máy chủ DNS mặc định của bạn. Trong trường hợp này Google DNS.

dig @8.8.8.8 example.com


12
Đáng lưu ý rằng nscd không được cài đặt theo mặc định.
Scaine

11

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

DNS là một con thú chậm. Kiên nhẫn sẽ giữ cho bạn lành mạnh.


+1 Tôi sử dụng OpenDNS cũng như xóa bộ nhớ cache rất hữu ích.
Mark Davidson

Tôi nghi ngờ về OpenDNS. Tôi đã hài lòng với nó lúc đầu, nhưng sau đó tôi bắt đầu nghi ngờ; mặc dù tôi đoán nếu đó là sự lựa chọn giữa ISP và OpenDNS, tôi tốt hơn với OpenDNS, phải không?
Jono

2
Tôi muốn nói OpenDNS là cái ác nhỏ hơn. Họ muốn kiếm tiền từ lưu lượng truy cập của bạn nhưng chỉ trên các lượt truy cập tên miền xấu.
Oli

@Oli Liên kết bị sập. Nếu bạn vẫn sử dụng nó, bạn có thể vui lòng cập nhật các liên kết?
Shaya

7

Nếu bạn đang sử dụng nscd:

sudo /etc/init.d/nscd restart

Điều đáng nói là nó có thể không phải là HĐH đang lưu trữ nó. Mọi người đều thích lưu trữ DNS ... Một số thử nghiệm:

Kiểm tra xem đó là IP mới hay cũ. Hầu hết các trình duyệt cũng lưu DNS, vì vậy nếu bạn chưa khởi động lại Chromium hoặc bất cứ điều gì bạn có thể không thấy mới nhất.

ping yourdomain.com

Chuyển máy chủ tên cục bộ của bạn trong /etc/resolv.conf sang nhà cung cấp khác, google hoặc cấp, ví dụ:

nameserver 8.8.8.8
nameserver 4.2.2.2

Và sau đó ping lại.

Kiểm tra để đảm bảo rằng bộ định tuyến của bạn không lưu bộ đệm DNS dưới mọi hình thức. (Thay đổi theo bộ định tuyến / chương trình cơ sở / vv)

Cuối cùng, kiên nhẫn. DNS có thể mất một chút thời gian để truyền bá trên internet.


2
Nếu sử dụng NetworkManager và DHCP /etc/resolve.conf sẽ bị xóa khi hợp đồng thuê DHCP hết hạn, do đó bạn sẽ phải đặt một ip tĩnh trong NetworkManager để điều này hoạt động lâu hơn.
LassePoulsen

+1 Tôi không nhận ra Firefox đang lưu DNS, điều này giúp ích rất nhiều.
wavemode

+1 để chuyển đổi máy chủ tên địa phương sang google đã hoạt động
Bibek Sharma

5

Tất cả các câu trả lời ở trên đã quên một điều quan trọng trong độ phân giải tên: nói chung các máy chủ DNS bạn yêu cầu độ phân giải tên không phải là máy chủ giữ bản ghi (máy chủ có thẩm quyền). Vì mỗi bản ghi DNS đi kèm với giá trị Time To Live sẽ bắt buộc mỗi máy chủ DNS trong chuỗi phân giải phải thực hiện lưu trữ trong khoảng thời gian giây được đề cập bởi giá trị này. Vì vậy, không chỉ bạn có thể lưu trữ bộ nhớ cache trong máy của mình, mà CERTAINLY kết quả tìm kiếm tên sẽ được lưu ở đâu đó trên máy chủ mà bạn không kiểm soát.

Giải pháp duy nhất được thông báo ngay lập tức về thay đổi bản ghi tên là sử dụng giá trị TTL bằng 0 khi tạo / cập nhật mục nhập trong máy chủ tên có thẩm quyền. Nhưng điều này có nghĩa là với mỗi độ phân giải tên, máy chủ sẽ bị tấn công, thông thường điều này không được các nhà đăng ký cho phép. Chẳng hạn, họ có thể cung cấp một danh sách các giá trị TTL được xác định trước mà bạn có thể chọn.

Tôi quản lý các tên miền khác nhau và để chắc chắn rằng thay đổi được áp dụng tốt trong các máy chủ tên có thẩm quyền, tôi đang sử dụng một công cụ có tên dnstracerhiển thị kết quả tra cứu trên mỗi máy chủ từ gốc DNS.

Tóm lại, ngay cả khi không có bất kỳ giải pháp bộ đệm DNS nào, vẫn sẽ có một độ trễ giữa thời điểm bạn thay đổi bản ghi DNS và thay đổi được nhìn thấy trên PC. Sự chậm trễ này phụ thuộc rất nhiều vào TTL của các bản ghi và vào số lượng máy chủ DNS giữa PC của bạn và máy chủ tên có thẩm quyền.


Tất nhiên, nhưng nếu đó là vấn đề, khởi động lại máy tính sẽ không khắc phục được.
matteo

2

Đối với Ubuntu 14.04, tôi khuyến nghị và lệnh này:

sudo service dns-clean

Không phải trên máy chủ mặc định cài đặt. Chỉ hoạt động vào ngày 14.04 trở xuống.
RJ

1

Tôi đã sử dụng lệnh sau để xóa bộ nhớ cache dns trên hộp Ubuntu 12.10 của mình và nó hoạt động rất tuyệt vời.

sudo kill -HUP $(pgrep dnsmasq)

Một tín hiệu hữu ích khác là SIGUSR1 kết xuất một số liệu thống kê nhỏ vào syslog hoặc như ghi chú từ man dnsmasq:

Trong chế độ --no-daemon hoặc khi bật ghi nhật ký đầy đủ (-q), kết xuất hoàn toàn nội dung của bộ đệm.


sử dụng pkillthay vì killpgrep
Robert Siemer

1

Trên Ubuntu 16.04, tôi không thể xóa bộ nhớ cache trừ khi tôi đã làm:

sudo service dnsmasq restart

0

Tôi cũng tìm thấy mâu thuẫn, nhưng điều này: https://superuser.com/a/521562 woks cho tôi (Ubuntu 13.10 với các bản cập nhật mới nhất, không có gói mạng đặc biệt nào được cài đặt).
Tóm lại, chỉ cần sử dụng cái này
sudo /etc/init.d/dns-clean


0

Tôi khuyên dùng openDNS đặc biệt trong các máy chủ Ubuntu từ xa, nó giúp giảm bớt đau đớn ...

Làm thế nào để làm nó? Tốt...

cd /etc/dhcp
sudo nano dhclient.conf

chèn cái này TRƯỚC dòng "mặt nạ mạng con yêu cầu ..."

supersede domain-name-servers 208.67.222.222,208.67.220.220;

việc này sẽ khởi động lại giao diện nhanh đến mức bạn thậm chí không nên mất kết nối SSH

sudo ifdown eth0 && sudo ifup eth0

kiểm tra điều này để xem liệu openDNS hoàn toàn mới của bạn đã được cài đặt đúng chưa

cat /etc/resolv.conf

Đó chắc chắn không phải là một câu trả lời cho câu hỏi.
blafasel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.