如何在 Linux 上查看和刷新 DNS 緩存

通過刷新本地 dns 緩存,您可以解決 http 錯誤并保護自己免受 dns 欺騙的影響。以下是在 linux 上執行此操作的方法。

當您使用域名訪問網站時,您的系統會向 DNS 服務器發送請求以獲取該域的 IP 地址。此域 IP 地址對保存在 DNS 緩存中供以后使用,因此您不必每次都向 DNS 服務器發送請求以建立連接。

但有時,本地 DNS 緩存會損壞并導致 HTTP 錯誤。值得慶幸的是,在 linux 操作系統中刷新和重建 DNS 緩存非常容易。這是如何做到的。

如何在 Linux 上查看和刷新 DNS 緩存

為什么要在 Linux 上刷新 DNS 緩存?

您可能想要重建存儲在系統上的 DNS 緩存的原因有多種。如果您的DNS記錄過時了,您可能想要從DNS服務器重新獲取它。另外,如果您擔心系統受到威脅了,您可能需要確保DNS緩存未被篡改,也被稱為DNS欺騙。

當您刷新 DNS 緩存時,系統必須再次 ping DNS 服務器并從中獲取新的域 IP 地址記錄,從而在此過程中刪除任何過時或受損的數據。

如何在 Linux 上查看本地 DNS 緩存

在systemd之前,大多數Linux發行版都沒有系統范圍的DNS緩存,除非像dnsmasq或nscd這樣的程序是手動設置的。systemd 附帶 systemd-solved,這是一項將域名解析為 IP 地址并緩存 DNS 條目的服務。

以下各節將指導您如何查看由 systemd 解析、nscd 和 dnsmasq 生成的 DNS 緩存內容,以便您在決定刷新緩存數據之前了解緩存的數據。

查看系統解析的 DNS 緩存

要查看 systemd 解析的緩存記錄,您需要先暫時終止服務,然后將其日志導出到文件中。

首先發送 SIGUSR1 信號以終止 systemd 解析的服務:

linuxmi@linuxmi ~/www.linuxmi.com % sudo killall -USR1 systemd-resolved[sudo] linuxmi 的密碼: 

使用?journalctl 命令和標準輸出運算符將輸出保存到文本文件:

linuxmi@linuxmi ~/www.linuxmi.com % sudo journalctl -u systemd-resolved > ~/cache.txtlinuxmi@linuxmi ~/www.linuxmi.com

如何在 Linux 上查看和刷新 DNS 緩存

然后,您可以使用 vim 等文本編輯器查看文件的內容:

如何在 Linux 上查看和刷新 DNS 緩存

在文件中,搜索“CACHE:”,方法是按?Escape,鍵入“/CACHE:”,然后按?Enter?鍵。在“CACHE:”下方列出的所有 DNS 記錄都包含在本地 DNS 緩存中。若您在使用 Vim,請按下 n 鍵以跳轉至下一組 DNS 條目。

如何在 Linux 上查看和刷新 DNS 緩存

查看 nscd 的本地 DNS 緩存

要查看 nscd 生成的本地緩存,您需要使用 String 命令讀取 nscd 主機數據庫的內容。

在基于 debianubuntu 的發行版上,此文件位于 /var/cache/nscd/hosts。運行以下命令以查看文件:

linuxmi@linuxmi ~/www.linuxmi.com % sudo strings /var/cache/nscd/hosts | uniq

如何在 Linux 上查看和刷新 DNS 緩存

要查看有關 nscd DNS 高速緩存的一般統計信息,請使用?-g?標志:

linuxmi@linuxmi ~/www.linuxmi.com % sudo nscd -g

如何在 Linux 上查看和刷新 DNS 緩存

顯示由 dnsmasq 生成的 DNS 緩存

獲取確切的記錄并不容易,因為 dnsmasq 在內存中存儲 DNS 緩存。您可以發送終止信號給 dnsmasq 并記錄其輸出,以獲取處理的 DNS 查詢數量。

為此,首先,使用?systemctl 命令確保?dnsmasq 已啟動并正在運行:

linuxmi@linuxmi ~/www.linuxmi.com % sudo systemctl status dnsmasq

如何在 Linux 上查看和刷新 DNS 緩存

如果狀態顯示“活動 Active”,請運行以下命令以終止該服務:

linuxmi@linuxmi ~/www.linuxmi.com % sudo pkill -USR1 dnsmasq

如何在 Linux 上查看和刷新 DNS 緩存

使用 journalctl 命令,提取 dnsmasq 日志并將它們保存到文本文件中:

linuxmi@linuxmi ~/www.linuxmi.com % sudo journalctl -u dnsmasq > ~/cache.txt

最后,使用文件查看實用程序(如 cat 或更少)查看文件的內容:

linuxmi@linuxmi ~/www.linuxmi.com % cat ~/cache.txt

如何在 Linux 上查看和刷新 DNS 緩存

如何在 Linux 上刷新 DNS 緩存

刷新 DNS 緩存意味著從計算機中刪除緩存的 DNS 記錄。這將迫使它向DNS服務器發送請求,以獲取新的DNS條目。

以下是在 Linux 上刷新 DNS 緩存的方法:

使用 systemd 解析

您可以使用 resolvectl 命令刷新 systemd 解析存儲的 DNS 緩存:

linuxmi@linuxmi ~/www.linuxmi.com % sudo resolvectl flush-caches

如何在 Linux 上查看和刷新 DNS 緩存

如果您運行的是 Ubuntu 17.04 或 18.04,請使用 systemd 解析的命令刷新緩存:

sudo systemd-resolved --flush-caches

在 Linux 上刷新 nscd DNS 緩存

刪除 nscd 的 DNS 緩存的最便捷方法是重新啟動服務。您可以通過運行以下命令來執行此操作:

linuxmi@linuxmi ~/www.linuxmi.com % sudo /etc/init.d/nscd restart

如何在 Linux 上查看和刷新 DNS 緩存

如果這不起作用,首先,檢查存儲在PC上的本地緩存是否持久。您可以使用?-g?標志進行驗證:

sudo nscd -g

如果是這種情況,請使用帶有 nscd 命令的?–i 標志來清除記錄(i?代表?invalidate):

linuxmi@linuxmi ~/www.linuxmi.com % sudo nscd -i hosts

刪除 dnsmasq DNS 緩存

刷新 dnsmasq 生成的 DNS 緩存很簡單。由于緩存存儲在內存中,因此重新啟動服務會刪除所有存儲的條目。

要重新啟動 dnsmasq,請運行以下 systemctl 命令:

sudo systemctl restart dnsmasq

或者,發出以下命令:

service dnsmasq restart

如果出現提示,請輸入管理員密碼。現在要重新啟動 dnsmasq,所有緩存中存在的 DNS 條目將被清除。

建議刷新 DNS 緩存后,檢查本地緩存條目以確認數據已經成功刪除。您可以使用 Linux 命令之一的 dig 來進行網絡故障排除,并查看輸出中的“查詢時間”值。假如超過 0 毫秒,則說明緩存已經成功清除(若為 0 毫秒,則表示域記錄仍存在于緩存中)。

dig google.com

清除谷歌瀏覽器的DNS緩存

您經常使用的 Web 瀏覽器也會緩存 DNS 記錄。輸入 URL 時,系統會在本地瀏覽器緩存中搜索緩存條目。如果未找到,它將檢查本地系統緩存中的記錄。清除 Web 瀏覽器的 DNS 緩存非常重要,因為它優先于系統范圍的緩存。

為了演示,讓我們刷新谷歌瀏覽器中的DNS緩存。在其他瀏覽器上也有一些方法可以做到這一點,所以最好 Google 一下如何使用你使用的瀏覽器做到這一點。

首先,在URL欄中鍵入“chrome://net-internals/#dns”并按Enter鍵:

如何在 Linux 上查看和刷新 DNS 緩存

點擊“清除主機緩存”按鈕來清除谷歌瀏覽器中存儲的DNS條目。

Linux是學習網絡的最佳操作系統

Linux 乍一看可能看起來很復雜,但如果你花一些時間來學習它是如何工作的,你很快就會意識到它很棒,甚至可能比 windowsmacos 更好。

大多數在線服務器都運行 Linux,如果您想學習網絡或想知道計算機通常如何工作,這也是 Linux 理想選擇的原因之一。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享