如何在 Linux 上查看和刷新 DNS 緩存
刷新本地 DNS 緩存可以解決 HTTP 錯誤并保護您免受 DNS 欺騙。以下是在 Linux 上執(zhí)行此操作的方法。
當(dāng)您使用域名訪問網(wǎng)站時,您的系統(tǒng)會向 DNS 服務(wù)器發(fā)送請求以獲取該域的 IP 地址。此域 IP 地址對保存在 DNS 緩存中供以后使用,因此您不必每次都向 DNS 服務(wù)器發(fā)送請求以建立連接。
但有時,本地 DNS 緩存會損壞并導(dǎo)致 HTTP 錯誤。幸運的是,在 Linux 計算機上刷新和重建 DNS 緩存非常簡單。這是如何做到的。
為什么要在 Linux 上刷新 DNS 緩存?
您可能想要重建存儲在系統(tǒng)上的 DNS 緩存的原因有多種。也許您有一個過時的 DNS 記錄,并希望從 DNS 服務(wù)器重新獲取它。或者,您的系統(tǒng)可能已受到威脅,并且您希望確保DNS緩存未被篡改,也稱為DNS欺騙。
當(dāng)您刷新 DNS 緩存時,系統(tǒng)必須再次 ping DNS 服務(wù)器并從中獲取新的域 IP 地址記錄,從而在此過程中刪除任何過時或受損的數(shù)據(jù)。
如何在 Linux 上查看本地 DNS 緩存
在systemd之前,大多數(shù)Linux發(fā)行版都沒有系統(tǒng)范圍的DNS緩存,除非像dnsmasq或nscd這樣的程序是手動設(shè)置的。systemd 附帶 systemd-solved,這是一項將域名解析為 IP 地址并緩存 DNS 條目的服務(wù)。
以下各節(jié)將指導(dǎo)您如何查看由 systemd 解析、nscd 和 dnsmasq 生成的 DNS 緩存內(nèi)容,以便您在決定刷新緩存數(shù)據(jù)之前了解緩存的數(shù)據(jù)。
查看系統(tǒng)解析的 DNS 緩存
要查看 systemd 解析的緩存記錄,您需要先暫時終止服務(wù),然后將其日志導(dǎo)出到文件中。
首先發(fā)送 SIGUSR1 信號以終止 systemd 解析的服務(wù):
linuxmi@linuxmi ~/www.linuxmi.com
% sudo killall -USR1 systemd-resolved
[sudo] linuxmi 的密碼:
使用 journalctl 命令和標(biāo)準(zhǔn)輸出運算符將輸出保存到文本文件:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo journalctl -u systemd-resolved > ~/cache.txt
linuxmi@linuxmi ~/www.linuxmi.com
然后,您可以使用 Vim 等文本編輯器查看文件的內(nèi)容:
在文件中,搜索“CACHE:”,方法是按 Escape,鍵入“/CACHE:”,然后按 Enter 鍵?!癈ACHE:”下列出的所有 DNS 記錄都是本地 DNS 緩存的一部分。如果您使用的是 Vim,請按 n 跳轉(zhuǎn)到下一組 DNS 條目。
查看 nscd 的本地 DNS 緩存
要查看 nscd 生成的本地緩存,您需要使用 string 命令讀取 nscd 主機數(shù)據(jù)庫的內(nèi)容。
在基于 Debian 和 Ubuntu 的發(fā)行版上,此文件位于 /var/cache/nscd/hosts。運行以下命令以查看文件:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo strings /var/cache/nscd/hosts | uniq
要查看有關(guān) nscd DNS 高速緩存的一般統(tǒng)計信息,請使用 -g 標(biāo)志:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo nscd -g
顯示由 dnsmasq 生成的 DNS 緩存
dnsmasq 將 DNS 緩存存儲在內(nèi)存中,因此獲取確切的記錄并不容易。但是您可以向 dnsmasq 發(fā)送終止信號并記錄其輸出以獲取處理的 DNS 查詢數(shù)。
為此,首先,使用 systemctl 命令確保 dnsmasq 已啟動并正在運行:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo systemctl status dnsmasq
如果狀態(tài)顯示“活動 Active”,請運行以下命令以終止該服務(wù):
linuxmi@linuxmi ~/www.linuxmi.com
% sudo pkill -USR1 dnsmasq
使用 journalctl 命令,提取 dnsmasq 日志并將它們保存到文本文件中:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo journalctl -u dnsmasq > ~/cache.txt
最后,使用文件查看實用程序(如 cat 或更少)查看文件的內(nèi)容:
linuxmi@linuxmi ~/www.linuxmi.com
% cat ~/cache.txt
如何在 Linux 上刷新 DNS 緩存
刷新 DNS 緩存意味著從計算機中刪除緩存的 DNS 記錄。這會強制它向 DNS 服務(wù)器發(fā)送請求以檢索新的 DNS 條目。
以下是在 Linux 上刷新 DNS 緩存的方法:
使用 systemd 解析
您可以使用 resolvectl 命令刷新 systemd 解析存儲的 DNS 緩存:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo resolvectl flush-caches
如果您運行的是 Ubuntu 17.04 或 18.04,請使用 systemd 解析的命令刷新緩存:
sudo systemd-resolved --flush-caches
在 Linux 上刷新 nscd DNS 緩存
刪除 nscd 的 DNS 緩存的最便捷方法是重新啟動服務(wù)。您可以通過運行以下命令來執(zhí)行此操作:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo /etc/init.d/nscd restart
如果這不起作用,首先,檢查存儲在PC上的本地緩存是否持久。您可以使用 -g 標(biāo)志進行驗證:
sudo nscd -g
如果是這種情況,請使用帶有 nscd 命令的 –i 標(biāo)志來清除記錄(i 代表 invalidate):
linuxmi@linuxmi ~/www.linuxmi.com
% sudo nscd -i hosts
刪除 dnsmasq DNS 緩存
刷新 dnsmasq 生成的 DNS 緩存很簡單。由于緩存存儲在內(nèi)存中,因此重新啟動服務(wù)會刪除所有存儲的條目。
要重新啟動 dnsmasq,請運行以下 systemctl 命令:
sudo systemctl restart dnsmasq
或者,發(fā)出以下命令:
service dnsmasq restart
如果出現(xiàn)提示,請輸入管理員密碼。dnsmasq 現(xiàn)在將重新啟動,所有現(xiàn)有的 DNS 條目將從緩存中刪除。
刷新 DNS 緩存后,最好查看本地緩存條目并驗證數(shù)據(jù)是否已成功刪除。您可以使用 dig(許多網(wǎng)絡(luò)故障排除 Linux 命令之一),并檢查輸出中的“查詢時間”值。如果超過 0 毫秒,則緩存已成功清除(0 毫秒表示域記錄仍在緩存中)。
dig google.com
清除谷歌瀏覽器的DNS緩存
您經(jīng)常使用的 Web 瀏覽器也會緩存 DNS 記錄。輸入 URL 時,系統(tǒng)會在本地瀏覽器緩存中搜索緩存條目。如果未找到,它將檢查本地系統(tǒng)緩存中的記錄。清除 Web 瀏覽器的 DNS 緩存至關(guān)重要,因為它的優(yōu)先級高于系統(tǒng)范圍的緩存。
為了演示,讓我們刷新谷歌瀏覽器中的DNS緩存。在其他瀏覽器上也有一些方法可以做到這一點,所以最好 Google 一下如何使用你使用的瀏覽器做到這一點。
首先,在URL欄中鍵入“chrome://net-internals/#dns”并按Enter鍵:
單擊清除主機緩存 Clear host cache 以清除存儲在谷歌瀏覽器中的DNS條目。
Linux是學(xué)習(xí)網(wǎng)絡(luò)的最佳操作系統(tǒng)
Linux 乍一看可能看起來很復(fù)雜,但如果你花一些時間來學(xué)習(xí)它是如何工作的,你很快就會意識到它很棒,甚至可能比 Windows 或 macOS 更好。
大多數(shù)在線服務(wù)器都運行 Linux,如果您想學(xué)習(xí)網(wǎng)絡(luò)或想知道計算機通常如何工作,這也是 Linux 理想選擇的原因之一。