Cách xóa Cache DNS trong Linux

Tác giả sysadmin, T.M.Một 15, 2022, 08:47:48 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách xóa Cache DNS trong Linux


Bạn có thể xóa bộ nhớ cache DNS trên máy tính Linux chạy hệ thống bằng lệnh "resolvectl flush-caches". Nếu bạn sử dụng dnsmasq, bạn có thể xóa DNS bằng cách sử dụng "sudo killall -HUP dnsmasq".


Trải nghiệm duyệt internet của bạn có bị chậm trên thiết bị Linux hay các trang web bạn đang truy cập đã lỗi thời hoặc hoàn toàn là trang web sai? Hãy thảo luận về việc xóa bộ đệm DNS trên Linux và cách biết liệu bạn có thực sự cần hay không.

1. Bộ nhớ cache DNS là gì?

Dịch  vụ tên miền  là một chút ma thuật chuyển đổi tên thành số. Nó lấy tên mạng của thiết bị và tên trang web rồi tra cứu địa chỉ IP của chúng. Sau đó, mạng có thể sử dụng địa chỉ IP để định tuyến chính xác lưu lượng truy cập đến các thiết bị hoặc trang web đó.

Những tra cứu này, được gọi là yêu cầu, không xảy ra ngay lập tức. Có một khoảng thời gian nhỏ, hữu hạn liên quan. Yêu cầu Internet DNS có thể yêu cầu truy vấn máy chủ DNS tiền thân, máy chủ tên gốc, máy chủ miền cấp cao nhất và máy chủ tên có thẩm quyền. Các yêu cầu DNS rất nhanh, nhưng để làm cho chúng nhanh hơn nữa, các câu trả lời cho các yêu cầu DNS gần đây được lưu vào bộ đệm trên các máy chủ tiền thân của DNS.

Nếu câu trả lời cho yêu cầu DNS được tìm thấy trong bộ đệm của máy chủ tiền thân, thì không cần liên hệ với máy chủ nào nữa. Câu trả lời được gửi lại từ bộ đệm của máy chủ tiền thân. Tương tự, một bộ đệm nhỏ được duy trì bởi bộ định tuyến băng thông rộng của bạn ở nhà. Nếu bạn yêu cầu một thiết bị mạng cục bộ sử dụng tên thiết bị mạng của nó, thì bộ định tuyến của bạn sẽ cung cấp địa chỉ IP. Nó cũng có thể lưu trữ các phản hồi mà nó đã nhận được từ các máy chủ DNS bên ngoài.

Thông thường, mạng và máy tính Linux được định cấu hình để sử dụng các dịch vụ DNS bên ngoài, do Nhà cung cấp dịch vụ Internet của bạn cung cấp hoặc bởi một dịch vụ miễn phí như  OpenDNS  hoặc  Google DNS. Có những lý do chính đáng khiến  một số người chạy máy chủ DNS của riêng họ, nhưng hầu hết chúng ta thì không. Tuy nhiên, máy tính Linux của bạn — ngay cả khi nó không chạy máy chủ DNS — có thể tùy chọn lưu vào bộ nhớ cache các kết quả yêu cầu DNS.

Rắc rối với việc sử dụng dữ liệu được lưu trong bộ nhớ cache là toàn bộ vấn đề được dự đoán dựa trên giả định rằng không có chi tiết được lưu trong bộ nhớ cache nào thay đổi kể từ khi chúng được lưu vào bộ nhớ cache. Nếu các chi tiết đã thay đổi, thông tin bạn nhận được sẽ bị lỗi thời.

Nếu một mục nhập bộ nhớ cache hoặc toàn bộ bộ nhớ cache bị hỏng, bạn sẽ nhận được hiệu suất không ổn định ở mức tốt nhất và tệ nhất là các lỗ hổng bảo mật. Đó là khi bạn muốn xem xét "xả" hoặc xóa bộ nhớ cache DNS.

2. Máy tính của bạn có đang sử dụng bộ đệm ẩn DNS cục bộ không?

Một số máy tính thử nghiệm của chúng tôi đã bật bộ đệm DNS cục bộ và những máy tính khác đã tắt tính năng này. Nó đã tắt trên máy tính Manjaro 21 của chúng tôi, nhưng nó được bật theo mặc định trên Fedora 37 và Ubuntu 22.10.

Để xác định xem máy tính Linux của bạn có đang lưu vào bộ nhớ đệm các yêu cầu DNS hay không, hãy sử dụng is-activetùy chọn của systemctllệnh. Daemon quản lý bộ đệm DNS là trình quản lý phân giải tên mạng systemd, được gọi là systemd-resolved.

Mã nguồn [Chọn]
systemctl is-active systemd-resolved

Nếu phản hồi là "hoạt động", bộ nhớ đệm DNS đang diễn ra. Nếu phản hồi là "không hoạt động", thì không phải vậy. Trên máy tính cụ thể này, nó đang hoạt động. Chúng ta có thể sử dụng resolvectllệnh với tùy chọn thống kê để xem có bao nhiêu bản ghi trong bộ nhớ cache.

Mã nguồn [Chọn]
resolvectl statistics

Chúng ta có thể thấy có 330 mục trong bộ đệm DNS của máy tính này.

3. Xem lại bộ đệm ẩn DNS của bạn

Xem lại các mục trong bộ nhớ cache DNS không phải là điều kiện tiên quyết để xóa bộ nhớ cache và nếu bạn không muốn làm như vậy, bạn có thể bỏ qua toàn bộ bước này. Tuy nhiên, đôi khi nó có thể mang tính thông tin. Bạn có thể thấy các mục bị xáo trộn cho biết bị hỏng hoặc bạn có thể thấy các thông báo lỗi liên quan đến các sự cố xử lý thiết bị trên mạng của mình.

Bây giờ, không có cách nào đơn giản để xem những mục này. Chúng ta có thể làm được nhưng cần phải sáng tạo một chút. USR1, hoặc  tín hiệu do người dùng xác định số một, là một tín hiệu có thể được gửi bằng lệnh killvà killall. Tín hiệu này không có ý nghĩa xác định trước. Các ứng dụng có thể bỏ qua tín hiệu này hoặc phản ứng theo bất kỳ cách nào mà các nhà phát triển đã triển khai.

Trình systemd-resolvednền phản ứng USR1bằng cách ghi bộ đệm của nó vào nhật ký hệ thống. Sau đó, chúng tôi có thể sử dụng journalctllệnh để lọc các mục DNS.

Chúng tôi sẽ sử dụng killalllệnh với USR1Để gửi tín hiệu đến systemd-resolveddaemon. Lưu ý rằng mặc dù chúng ta đang sử dụng killall lệnh, systemd-resolveddaemon vẫn tiếp tục chạy. Đây không phải là tín hiệu chấm dứt mà chúng tôi đang gửi.

Mã nguồn [Chọn]
sudo killall -USR1 systemd-resolved

Bây giờ chúng ta sẽ sử dụng journalctllệnh với tùy chọn -u(lọc theo systemdđơn vị) để trích xuất các mục nhật ký đã được tạo bởi systemd-resolved. Chúng tôi sẽ chuyển hướng đầu ra đó thành một tệp văn bản có tên là "dns.txt".

Mã nguồn [Chọn]
sudo journalctl -u systemd-resolved > dns.txt

Chúng tôi sẽ sử dụng trình less xem tệp  để xem nội dung của tệp.

Mã nguồn [Chọn]
less dns.txt

Bạn sẽ có thể tìm thấy các ánh xạ được lưu trong bộ nhớ đệm giữa các tên miền và địa chỉ IP bằng cách cuộn và tìm kiếm trong văn bản.


Chúng ta có thể thấy một mục dành cho Google có địa chỉ IP là 216.58.212.196. Bạn có thể kiểm tra điều đó bằng cách đặt địa chỉ IP trong trình duyệt web. Bạn sẽ thấy trang chủ của tìm kiếm Google.

4. Cách xóa bộ đệm DNS trên Linux

Xoá bộ nhớ cache sẽ xóa tất cả các mục nhập và bắt đầu lại quá trình thu thập. Nếu có, thao tác này sẽ buộc xóa các mục không chính xác và bị hỏng khỏi bộ đệm.

Lệnh rất đơn giản; chúng tôi sử dụng resolvectl với tùy chọn flush-caches.

Mã nguồn [Chọn]
resolvectl flush-caches

Chúng tôi đang âm thầm quay trở lại dòng lệnh. Để xác nhận rằng điều gì đó đã thực sự xảy ra, chúng tôi sẽ kiểm tra lại số liệu thống kê bộ đệm DNS.

Mã nguồn [Chọn]
resolvectl statistics

Chúng ta có thể thấy rằng kích thước bộ nhớ cache bị giảm xuống 0. Nó sẽ tăng lên theo thời gian khi tích lũy các mục nhập mới.

5. Cách xóa bộ nhớ cache dnsmasq trên Linux

Ứng dnsmasqdụng này cung cấp bộ đệm DNS và máy chủ DHCP. Nó phổ biến với những người dùng muốn chạy máy chủ DNS của riêng họ, đặc biệt là trên các bản cài đặt không phải hệ thống.

Xoá dnsmasqbộ đệm DNS thật dễ dàng. Chúng ta cần gửi SIGHUPtín hiệu để báo cho dnsmasqdaemon khởi tạo lại một cách hiệu quả. Làm như vậy sẽ xóa bộ đệm DNS của nó. Để gửi tín hiệu, chúng tôi sử dụng killalllệnh với -HUPcờ và tên của ứng dụng.

Mã nguồn [Chọn]
sudo killall -HUP dnsmasq

6. Xoá Cache DNS thành công

Tất nhiên, nếu máy tính của bạn hoàn toàn không lưu vào bộ nhớ đệm thì bạn không cần kiểm tra gì cả.

Nếu đó là bộ nhớ đệm các yêu cầu DNS nhưng mọi thứ vẫn hoạt động tốt, bạn cũng có thể bỏ qua nó. Nhưng nếu bạn gặp phải các bản cập nhật trang web chậm hoặc rời rạc khi duyệt web hoặc nhìn thấy các trang web sai hoàn toàn, có lẽ đây là thời điểm thích hợp để xóa bộ nhớ cache DNS của bạn.