# Windows 清除 DNS 快取：ipconfig /flushdns 用法

在 Windows 10 或 Windows 11 上清除 DNS 快取，打開命令提示字元或終端機執行 `ipconfig /flushdns` 就行，PowerShell 裡用 `Clear-DnsClientCache` 效果一樣，Microsoft 的 [cmdlet 文件](https://learn.microsoft.com/en-us/powershell/module/dnsclient/clear-dnsclientcache)寫明執行它等同於執行 `ipconfig /flushdns`。

清除只動到一層，也就是 Windows 的 DNS 用戶端快取，路由器、DNS 服務商、瀏覽器自己的 DNS 快取和網路介面卡都不受影響，所以它能修好一筆過期的網域解析，別的大概都修不了。下面講清楚什麼時候問題真的出在這一層，怎麼查看裡面存了什麼，大家常跟它搭配的那幾條更重的重設命令，以及每條命令各改了什麼。

## DNS 用戶端快取裡存了什麼

應用程式連到 `example.com` 之前，Windows 得先把這個網域名稱換成 IP 位址，DNS Client 服務會把已經拿到的結果存下來，同一個名稱再查時就不用每次都走網路。Microsoft 的 [ipconfig 文件](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ipconfig)說這份快取既有從本機 Hosts 檔案預先載入的項目，也有這台電腦最近解析過的名稱記錄，而且服務會「在查詢已設定的 DNS 伺服器之前」先用它。

每筆記錄按該網域 DNS 伺服器給的存留時間（TTL）保留，到期再重新取得。失敗的結果也會被快取，同一份文件提到 `/flushdns` 可以「捨棄負面快取項目」，也就是那些說某個名稱不存在的回應，這就是為什麼一個網站失敗過一次後，可能在一台電腦上一直打不開，其他裝置卻都正常。

想看快取裡有什麼、又不更動任何東西：

```cmd
ipconfig /displaydns
```

或者在 PowerShell 裡只看某一個名稱：

```powershell
Get-DnsClientCache -Entry example.com
```

[`Get-DnsClientCache`](https://learn.microsoft.com/en-us/powershell/module/dnsclient/get-dnsclientcache) 可以按記錄類型、狀態（`Success`、`NotExist` 或 `NoRecords`）和 TTL 篩選，比 `ipconfig` 那一長串好讀得多，一個本該能用的名稱如果顯示 `NotExist`，就是快取住的失敗結果。

## 什麼時候清除 DNS 有用

| 情況 | 清除為什麼有用 |
|---|---|
| 網站或伺服器換了新位址，這台電腦還連到舊位址 | 舊記錄還沒從本機快取裡過期 |
| 你在設定裡改了 DNS 伺服器 | 上一個伺服器給的結果還在快取裡 |
| 改了 hosts 檔案，變更好像沒生效 | 快取裡有從 hosts 檔案預先載入的項目，還有這個名稱之前的解析結果 |
| 開關過 VPN 或 Proxy，有些名稱仍然解析到另一邊 | 經另一條路徑拿到的記錄還在快取裡 |
| 本機開發用的網域改指向了新地方 | 快取的結果，或快取的「不存在」，還在被重複使用 |
| 某個名稱在這裡打不開，同一網路下的手機卻正常 | 失敗的解析可能被存成了負面項目 |

這幾種情況的辦法都一樣，先清除，再看 Windows 現在解析出來的是什麼（見下面的確認一節），然後重試應用程式。瀏覽器要結束再重新開啟，不要只重新整理分頁，原因在下一節。

## 什麼時候清除 DNS 沒用

名稱可以在好幾個地方被回應，Windows 快取只是其中一處，清除也只動這一處。

- **網路服務商或網站本身掛了。** 如果所有網站都打不開，或者同一網路下的其他裝置也打不開，問題在上游，清除改變不了什麼。
- **路由器或 DNS 服務商手裡是舊記錄。** 它們也會快取結果，本機清除沒辦法讓它們早點去拿新記錄，只能等它們那份到期。
- **瀏覽器自己解析名稱。** Chrome 的[說明頁面](https://support.google.com/chrome/answer/10468685?hl=en&co=GENIE.Platform%3DDesktop)說安全 DNS 預設以自動模式開啟，以 Chromium 為基礎的瀏覽器還有自己的主機解析快取。Chromium 的 net-internals 頁面在 "Host resolver cache" 下有個 "Clear host cache" 按鈕（[原始碼](https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/resources/net_internals/index.html)），在 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 的[網路設定頁面](https://support.microsoft.com/en-us/windows/essential-network-settings-and-tasks-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9)說自動 (DHCP) 會從路由器或存取點取得 DNS 伺服器位址，也建議用這個。公司電腦如果連著 VPN，改這裡可能讓內部網域失效，先問管理這台電腦的人。
- **網頁只是慢，並沒有打不開。** 解析結果之所以快取，正是因為重複使用起來很快，下載慢或影片卡頓很少是 DNS 的問題，快取清空後接下來幾次解析反而會稍微慢一點，不會更快。

## 清除和查看快取的命令

在命令提示字元或終端機裡：

```cmd
ipconfig /flushdns
ipconfig /displaydns
```

在 PowerShell 裡：

```powershell
Clear-DnsClientCache
Get-DnsClientCache
```

Microsoft 這兩份文件都沒說這些命令需要系統管理員權限，Mole for Windows 也是在一般、未提高權限的處理程序裡做同樣的清除。如果受管理的電腦回報存取遭拒，就以系統管理員身分開啟終端機或命令提示字元再執行。清除不會刪掉磁碟上的任何東西，也不用重新啟動，應用程式再去解析名稱時快取會自己填回來。

別把清除做成排程工作，也別當加速技巧塞進開機指令碼，熱快取才是快的那條路，清除只在某筆記錄確實錯了的時候有用。

## 先查 hosts 檔案，再怪快取

hosts 檔案裡列出的名稱會繞過 DNS。Microsoft 的 [hosts 重設文章](https://support.microsoft.com/en-us/windows/experience/how-to-reset-the-hosts-file-back-to-the-default)給出的資料夾是 `%WinDir%\System32\Drivers\Etc`，通常就是 `C:\Windows\System32\drivers\etc`，檔名叫 `hosts`，沒有副檔名。照那篇文章的說法，預設檔案裡只有以 `#` 開頭的註解行，以及 `localhost` 的回送對應。

開發工具、廣告攔截器和一些舊教學有時會往這裡加幾行，用完也不刪。如果出問題的網域出現在這個檔案裡，它解析成那樣就是這一行造成的。要改的話先留一份備份（Microsoft 的文章是把舊檔案改名成 `Hosts.old`），用以系統管理員身分執行的編輯器只改需要的那一行，儲存時別加上 `.txt` 副檔名，然後執行 `ipconfig /flushdns`，讓快取不再留著舊的預先載入項目。不要刪除這個檔案，也不要改它的權限。

## 更重的重設命令各改了什麼

Microsoft 的 [Wi-Fi 疑難排解文章](https://support.microsoft.com/en-us/windows/experience/connectivity-networking/fix-wi-fi-connection-issues-in-windows)把這幾條命令列在一起，要在系統管理員命令提示字元裡按這個順序執行：

```cmd
netsh winsock reset
netsh int ip reset
ipconfig /release
ipconfig /renew
ipconfig /flushdns
```

它們做的事差別很大，只有最後一條跟 DNS 有關：

- **`ipconfig /release`** 會送出 DHCP 釋放，照 [ipconfig 文件](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ipconfig)的說法，還會停用設為自動取得位址的介面卡上的 TCP/IP，在 `/renew` 拿到新位址之前你都是離線的，所以別在遠端桌面工作階段裡單獨執行它。
- **`ipconfig /renew`** 向 DHCP 要求一份新設定，只對設為自動取得位址的介面卡有效。
- **`netsh winsock reset`** 把 Winsock 目錄還原到乾淨狀態，移除自訂的分層服務提供者（[netsh winsock](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/netsh-winsock)），有些 VPN 用戶端和安全性軟體會安裝這類提供者，執行後記得檢查一下這些應用程式。
- **`netsh int ip reset`** 會覆寫登錄裡 TCP/IP 和 DHCP 的參數機碼，Microsoft 的 [TCP/IP 重設文章](https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/reset-tcp-ip-net-shell)說效果等同於移除再重新安裝 TCP/IP。它需要系統管理員權限和重新啟動，文中的範例記錄顯示靜態 IP 位址、閘道和 DNS 伺服器都會被重設，如果這些是你手動設定的，先記下來。
- **網路重設**在設定 › 網路和網際網路 › 進階網路設定 › 網路重設裡，會移除所有網路介面卡及其設定，電腦重新啟動後再以預設值重新安裝。Microsoft 的 Wi-Fi 文章提醒，你可能需要重新安裝並設定 VPN 用戶端軟體或 Hyper-V 虛擬交換器，已知的網路也可能被設成公用網路設定檔。

如果唯一的症狀是某個名稱解析到舊位址或解析不出來，這些都用不上。它們是給整體連不上網的情況準備的，而且要在清除、檢查過 DNS 伺服器和 hosts 檔案都解釋不了之後再用。

## 確認問題解決了

1. 只問快取，看看 Windows 手上這個名稱存的是什麼：

   ```powershell
   Resolve-DnsName example.com -CacheOnly
   ```

   [`Resolve-DnsName`](https://learn.microsoft.com/en-us/powershell/module/dnsclient/resolve-dnsname) 加上 `-CacheOnly` 會「只用本機快取解析這次查詢」。清除後馬上執行一次，應用程式重試後再執行一次，就能看到快取的是哪個結果。

2. 正常解析一次，再略過 hosts 檔案解析一次，比對兩者：

   ```powershell
   Resolve-DnsName example.com
   Resolve-DnsName example.com -NoHostsFile
   ```

   如果兩個結果不一樣，原因就在 hosts 檔案的某一行。

3. 直接問 DNS 伺服器。照 [nslookup 文件](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/nslookup)，第二個參數是要查詢的伺服器，不寫的話 nslookup 用預設的 DNS 名稱伺服器。

   ```cmd
   nslookup example.com
   nslookup example.com 1.1.1.1
   ```

   如果你設定的伺服器回傳舊位址，另一台伺服器回傳新位址，表示舊記錄還快取在上游，等就行了。如果兩邊都回傳舊位址，表示這筆記錄還沒改。

4. 結束並重新開啟出問題的瀏覽器或應用程式，如果是 Chrome 或 Edge，再清一下它的主機快取。

## Mole 能做什麼

Mole for Windows 在最佳化裡的網路與搜尋群組中有一項「清除 DNS 快取」，它呼叫 Windows 的 `DnsFlushResolverCache` 函式，清的就是 `ipconfig /flushdns` 清的那份 Windows DNS 用戶端快取，而且不跳出系統管理員提示。[Windows 說明頁面](/tw/windows/help)把它和最佳化裡的其他維護項目列在一起，[Windows 最佳化都做了什麼](/tw/windows/blog/what-windows-optimization-does)講了每項工作對應什麼症狀。

Mole 的網路修復就這麼多，它不重設 Winsock 或 TCP/IP，不釋放或更新位址，不重新安裝網路介面卡，也不碰 VPN 連線、靜態位址、hosts 檔案或瀏覽器自己的主機快取，這些請用上面的命令。如果你是因為瀏覽器變慢而不是某個名稱打不開才找過來的，瀏覽器儲存空間的問題在 [Windows 快取指南](/tw/windows/blog/windows-cache-cleanup)裡講過。

## 常見問題

### 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 伺服器是不是還回傳舊位址。如果伺服器或路由器手上還是舊記錄，本機清除改變不了，只能等那份到期。


Canonical: https://mole.fit/tw/windows/blog/flush-dns-windows
