Windows 清除 DNS 快取:ipconfig /flushdns 用法
在 Windows 10 或 Windows 11 上清除 DNS 快取,打開命令提示字元或終端機執行 ipconfig /flushdns 就行,PowerShell 裡用 Clear-DnsClientCache 效果一樣,Microsoft 的 cmdlet 文件寫明執行它等同於執行 ipconfig /flushdns。
清除只動到一層,也就是 Windows 的 DNS 用戶端快取,路由器、DNS 服務商、瀏覽器自己的 DNS 快取和網路介面卡都不受影響,所以它能修好一筆過期的網域解析,別的大概都修不了。下面講清楚什麼時候問題真的出在這一層,怎麼查看裡面存了什麼,大家常跟它搭配的那幾條更重的重設命令,以及每條命令各改了什麼。
DNS 用戶端快取裡存了什麼
應用程式連到 example.com 之前,Windows 得先把這個網域名稱換成 IP 位址,DNS Client 服務會把已經拿到的結果存下來,同一個名稱再查時就不用每次都走網路。Microsoft 的 ipconfig 文件說這份快取既有從本機 Hosts 檔案預先載入的項目,也有這台電腦最近解析過的名稱記錄,而且服務會「在查詢已設定的 DNS 伺服器之前」先用它。
每筆記錄按該網域 DNS 伺服器給的存留時間(TTL)保留,到期再重新取得。失敗的結果也會被快取,同一份文件提到 /flushdns 可以「捨棄負面快取項目」,也就是那些說某個名稱不存在的回應,這就是為什麼一個網站失敗過一次後,可能在一台電腦上一直打不開,其他裝置卻都正常。
想看快取裡有什麼、又不更動任何東西:
ipconfig /displaydns
或者在 PowerShell 裡只看某一個名稱:
Get-DnsClientCache -Entry example.com
Get-DnsClientCache 可以按記錄類型、狀態(Success、NotExist 或 NoRecords)和 TTL 篩選,比 ipconfig 那一長串好讀得多,一個本該能用的名稱如果顯示 NotExist,就是快取住的失敗結果。
什麼時候清除 DNS 有用
| 情況 | 清除為什麼有用 |
|---|---|
| 網站或伺服器換了新位址,這台電腦還連到舊位址 | 舊記錄還沒從本機快取裡過期 |
| 你在設定裡改了 DNS 伺服器 | 上一個伺服器給的結果還在快取裡 |
| 改了 hosts 檔案,變更好像沒生效 | 快取裡有從 hosts 檔案預先載入的項目,還有這個名稱之前的解析結果 |
| 開關過 VPN 或 Proxy,有些名稱仍然解析到另一邊 | 經另一條路徑拿到的記錄還在快取裡 |
| 本機開發用的網域改指向了新地方 | 快取的結果,或快取的「不存在」,還在被重複使用 |
| 某個名稱在這裡打不開,同一網路下的手機卻正常 | 失敗的解析可能被存成了負面項目 |
這幾種情況的辦法都一樣,先清除,再看 Windows 現在解析出來的是什麼(見下面的確認一節),然後重試應用程式。瀏覽器要結束再重新開啟,不要只重新整理分頁,原因在下一節。
什麼時候清除 DNS 沒用
名稱可以在好幾個地方被回應,Windows 快取只是其中一處,清除也只動這一處。
- 網路服務商或網站本身掛了。 如果所有網站都打不開,或者同一網路下的其他裝置也打不開,問題在上游,清除改變不了什麼。
- 路由器或 DNS 服務商手裡是舊記錄。 它們也會快取結果,本機清除沒辦法讓它們早點去拿新記錄,只能等它們那份到期。
- 瀏覽器自己解析名稱。 Chrome 的說明頁面說安全 DNS 預設以自動模式開啟,以 Chromium 為基礎的瀏覽器還有自己的主機解析快取。Chromium 的 net-internals 頁面在 "Host resolver cache" 下有個 "Clear host cache" 按鈕(原始碼),在 Chrome 裡開啟
chrome://net-internals/#dns,在 Edge 裡開啟edge://net-internals/#dns,按一下就行。同一頁面的 Sockets 區塊還有 "Flush socket pools",Chromium 給它標了 "May break pages with active connections",用之前先把重要的分頁關掉。 - DNS 伺服器設定本身就錯了。 如果 Windows 指向的伺服器給錯誤結果或乾脆不回應,清除只是再問一次同一台伺服器。到設定 › 網路和網際網路 › Wi-Fi › 管理已知的網路(或乙太網路)裡檢查,選取你的網路,再按 IP 指派旁邊的「編輯」。Microsoft 的網路設定頁面說自動 (DHCP) 會從路由器或存取點取得 DNS 伺服器位址,也建議用這個。公司電腦如果連著 VPN,改這裡可能讓內部網域失效,先問管理這台電腦的人。
- 網頁只是慢,並沒有打不開。 解析結果之所以快取,正是因為重複使用起來很快,下載慢或影片卡頓很少是 DNS 的問題,快取清空後接下來幾次解析反而會稍微慢一點,不會更快。
清除和查看快取的命令
在命令提示字元或終端機裡:
ipconfig /flushdns
ipconfig /displaydns
在 PowerShell 裡:
Clear-DnsClientCache
Get-DnsClientCache
Microsoft 這兩份文件都沒說這些命令需要系統管理員權限,Mole for Windows 也是在一般、未提高權限的處理程序裡做同樣的清除。如果受管理的電腦回報存取遭拒,就以系統管理員身分開啟終端機或命令提示字元再執行。清除不會刪掉磁碟上的任何東西,也不用重新啟動,應用程式再去解析名稱時快取會自己填回來。
別把清除做成排程工作,也別當加速技巧塞進開機指令碼,熱快取才是快的那條路,清除只在某筆記錄確實錯了的時候有用。
先查 hosts 檔案,再怪快取
hosts 檔案裡列出的名稱會繞過 DNS。Microsoft 的 hosts 重設文章給出的資料夾是 %WinDir%\System32\Drivers\Etc,通常就是 C:\Windows\System32\drivers\etc,檔名叫 hosts,沒有副檔名。照那篇文章的說法,預設檔案裡只有以 # 開頭的註解行,以及 localhost 的回送對應。
開發工具、廣告攔截器和一些舊教學有時會往這裡加幾行,用完也不刪。如果出問題的網域出現在這個檔案裡,它解析成那樣就是這一行造成的。要改的話先留一份備份(Microsoft 的文章是把舊檔案改名成 Hosts.old),用以系統管理員身分執行的編輯器只改需要的那一行,儲存時別加上 .txt 副檔名,然後執行 ipconfig /flushdns,讓快取不再留著舊的預先載入項目。不要刪除這個檔案,也不要改它的權限。
更重的重設命令各改了什麼
Microsoft 的 Wi-Fi 疑難排解文章把這幾條命令列在一起,要在系統管理員命令提示字元裡按這個順序執行:
netsh winsock reset
netsh int ip reset
ipconfig /release
ipconfig /renew
ipconfig /flushdns
它們做的事差別很大,只有最後一條跟 DNS 有關:
ipconfig /release會送出 DHCP 釋放,照 ipconfig 文件的說法,還會停用設為自動取得位址的介面卡上的 TCP/IP,在/renew拿到新位址之前你都是離線的,所以別在遠端桌面工作階段裡單獨執行它。ipconfig /renew向 DHCP 要求一份新設定,只對設為自動取得位址的介面卡有效。netsh winsock reset把 Winsock 目錄還原到乾淨狀態,移除自訂的分層服務提供者(netsh winsock),有些 VPN 用戶端和安全性軟體會安裝這類提供者,執行後記得檢查一下這些應用程式。netsh int ip reset會覆寫登錄裡 TCP/IP 和 DHCP 的參數機碼,Microsoft 的 TCP/IP 重設文章說效果等同於移除再重新安裝 TCP/IP。它需要系統管理員權限和重新啟動,文中的範例記錄顯示靜態 IP 位址、閘道和 DNS 伺服器都會被重設,如果這些是你手動設定的,先記下來。- 網路重設在設定 › 網路和網際網路 › 進階網路設定 › 網路重設裡,會移除所有網路介面卡及其設定,電腦重新啟動後再以預設值重新安裝。Microsoft 的 Wi-Fi 文章提醒,你可能需要重新安裝並設定 VPN 用戶端軟體或 Hyper-V 虛擬交換器,已知的網路也可能被設成公用網路設定檔。
如果唯一的症狀是某個名稱解析到舊位址或解析不出來,這些都用不上。它們是給整體連不上網的情況準備的,而且要在清除、檢查過 DNS 伺服器和 hosts 檔案都解釋不了之後再用。
確認問題解決了
- 只問快取,看看 Windows 手上這個名稱存的是什麼:
powershell
Resolve-DnsName example.com -CacheOnly
Resolve-DnsName 加上 -CacheOnly 會「只用本機快取解析這次查詢」。清除後馬上執行一次,應用程式重試後再執行一次,就能看到快取的是哪個結果。
- 正常解析一次,再略過 hosts 檔案解析一次,比對兩者:
powershell
Resolve-DnsName example.com
Resolve-DnsName example.com -NoHostsFile
如果兩個結果不一樣,原因就在 hosts 檔案的某一行。
- 直接問 DNS 伺服器。照 nslookup 文件,第二個參數是要查詢的伺服器,不寫的話 nslookup 用預設的 DNS 名稱伺服器。
cmd
nslookup example.com
nslookup example.com 1.1.1.1
如果你設定的伺服器回傳舊位址,另一台伺服器回傳新位址,表示舊記錄還快取在上游,等就行了。如果兩邊都回傳舊位址,表示這筆記錄還沒改。
- 結束並重新開啟出問題的瀏覽器或應用程式,如果是 Chrome 或 Edge,再清一下它的主機快取。
Mole 能做什麼
Mole for Windows 在最佳化裡的網路與搜尋群組中有一項「清除 DNS 快取」,它呼叫 Windows 的 DnsFlushResolverCache 函式,清的就是 ipconfig /flushdns 清的那份 Windows DNS 用戶端快取,而且不跳出系統管理員提示。Windows 說明頁面把它和最佳化裡的其他維護項目列在一起,Windows 最佳化都做了什麼講了每項工作對應什麼症狀。
Mole 的網路修復就這麼多,它不重設 Winsock 或 TCP/IP,不釋放或更新位址,不重新安裝網路介面卡,也不碰 VPN 連線、靜態位址、hosts 檔案或瀏覽器自己的主機快取,這些請用上面的命令。如果你是因為瀏覽器變慢而不是某個名稱打不開才找過來的,瀏覽器儲存空間的問題在 Windows 快取指南裡講過。
常見問題
Windows 11 怎麼清除 DNS 快取?
在命令提示字元或終端機裡執行 ipconfig /flushdns,或者在 PowerShell 裡執行 Clear-DnsClientCache,兩者都立即生效,不用重新啟動。
清除 DNS 會清掉 Chrome 或 Edge 的 DNS 快取嗎?
不會。開啟 chrome://net-internals/#dns 或 edge://net-internals/#dns,按 "Clear host cache",再重新開啟瀏覽器。
清除 DNS 快取安全嗎?
安全,它只捨棄快取的解析結果,下次要求時 Windows 會重新取得。常跟它列在一起的那些重設命令,像 netsh int ip reset 或網路重設,改動大得多,可能會清掉靜態設定或 VPN 介面卡。
為什麼清除後網站還是連到舊位址?
檢查 hosts 檔案、瀏覽器自己的快取,再看看用 nslookup 問你的 DNS 伺服器是不是還回傳舊位址。如果伺服器或路由器手上還是舊記錄,本機清除改變不了,只能等那份到期。