Windows、Linux DNS 查詢指令教學:找出電腦使用哪台 DNS 與清除本機快取

用 Windows nslookup、Resolve-DnsName、ipconfig,以及 Linux resolvectl、dig、getent,檢查本機 DNS Server、resolver、快取與 resolv.conf;並說明清快取不會修改權威 DNS。

DNS指令Windows DNSLinux DNSnslookupResolve-DnsNameresolvectldigipconfigDNS快取resolv.conf網路排錯

同一個網站,有人打得開、有人卻看到舊 IP,問題不一定在網域後台,也可能出在電腦目前使用的 DNS Server、本機快取或公司網路的 resolver。

這篇聚焦在 Windows 與 Linux 本機 DNS 排錯:先查電腦實際使用哪台 DNS,再比較本機 resolver 與指定公共 DNS 的結果,最後才考慮清除本機快取。所有只讀指令都可以先放心執行;會改變狀態的指令會另外標示。

如果你要查的是網域註冊商、NameServer 委派或公開 DNS 記錄,請先看 WHOIS、RDAP、nslookup 與 dig 查詢教學

DNS 排錯應該先分哪三層?

層級你要確認什麼適合的工具
本機設定電腦從哪張網卡、使用哪台 DNS ServerWindows Get-DnsClientServerAddress、Linux resolvectl status
本機解析與快取作業系統現在把網域解析成什麼Windows Resolve-DnsName、Linux resolvectl querygetent hosts
直接詢問指定 DNS指定 resolver 現在回答什麼nslookupdig @DNS伺服器

這三層的結果可能不同。例如 Windows 應用程式先讀到本機快取的舊 IP,但 nslookup 直接向設定的 DNS Server 查詢時已經拿到新 IP。先分層比較,比一開始就亂改 DNS Server 更容易找出原因。

開始前先準備什麼?

  • 把範例中的 example.com 換成你要檢查的完整網域。
  • 記錄網站預期的 IP、目前 DNS 管理平台與 NameServer。
  • 公司內部網域要在公司授權的網路環境查詢,不要把內部名稱貼到公開網站。
  • 先執行只讀查詢;確認是本機快取問題後,才清除快取。

Windows 先用 nslookup 查什麼?

在 Windows 11 或 Windows Server 開啟 PowerShell、命令提示字元或 Windows Terminal。

查詢預設 A/AAAA 答案:

nslookup example.com

查指定記錄類型:

nslookup -type=A example.com
nslookup -type=AAAA example.com
nslookup -type=MX example.com
nslookup -type=TXT example.com

輸出最前面的 ServerAddress,是這次 nslookup 詢問的 DNS Server;後面的答案才是網域解析結果。看到 Non-authoritative answer 通常只是表示答案來自遞迴 resolver,不代表錯誤。

指定另一台 DNS Server 比對

nslookup example.com 1.1.1.1
nslookup example.com 8.8.8.8

如果預設 DNS 回舊 IP,但指定公共 DNS 已回新 IP,問題較可能在預設 resolver 的快取或上游路徑。若三者都回相同舊值,應再確認權威 DNS 是否真的已更新,以及舊 TTL 是否尚未到期。

Microsoft 的 DNS Client 排錯文件特別說明,nslookup 不使用 Windows DNS Client 快取,而會向設定的 DNS Server 查詢。因此它很適合拿來和一般應用程式的解析結果比較。

Windows PowerShell 怎麼用 Resolve-DnsName?

Resolve-DnsName 能顯示較結構化的記錄類型、名稱與 TTL:

Resolve-DnsName example.com
Resolve-DnsName example.com -Type A
Resolve-DnsName example.com -Type AAAA
Resolve-DnsName example.com -Type MX

指定 DNS Server:

Resolve-DnsName example.com -Type A -Server 1.1.1.1

如果要把結果交給管理員,可先保留這些欄位:

  • Name:實際查詢的名稱。
  • Type:A、AAAA、CNAME、MX 等類型。
  • TTL:這筆答案還能被快取多久。
  • IPAddressNameExchange:IP 或郵件主機等答案。

Windows 怎麼看目前使用哪台 DNS Server?

推薦先用只讀的 PowerShell 指令:

Get-DnsClientServerAddress

只看 IPv4 DNS:

Get-DnsClientServerAddress -AddressFamily IPv4

也可以用傳統指令一次看完整介面設定:

ipconfig /all

判讀時注意:

  • 找到目前真的連線中的 Ethernet 或 Wi-Fi,不要只看虛擬網卡。
  • DNS Servers 可能來自 DHCP、手動設定、公司 VPN 或管理政策。
  • 127.0.0.1::1 或其他本機位址,可能表示電腦上有本機代理 resolver。
  • 公司網路使用內部 DNS 很正常,不要看到不是 1.1.1.1 就直接修改。

Windows 怎麼查看 DNS Client 快取?

ipconfig /displaydns

它會列出 Windows DNS Client resolver cache,其中也可能包含 Hosts 檔預載的項目與先前查詢結果。可以用 PowerShell 篩選網域附近的輸出:

ipconfig /displaydns | Select-String -Pattern "example.com" -Context 0,6

如果看到舊 IP 或 Name does not exist 之類的負快取,再考慮清除。

Windows 清除 DNS 快取會發生什麼?

以下指令會改變本機狀態:

ipconfig /flushdns

它只會清除這台 Windows 電腦的 DNS Client resolver cache。之後的查詢會重新詢問設定的 DNS Server,但它不會:

  • 修改網域後台的 A、AAAA、MX 或 TXT 記錄。
  • 清除公司 DNS、ISP DNS 或公共 DNS 的快取。
  • 縮短已存在其他 resolver 裡的 TTL。
  • 清除瀏覽器、CDN 或網站內容快取。

因此,清完仍看到舊 IP,不代表指令失效;上游 resolver 仍可能在合法 TTL 內回舊答案。這時請看 DNS TTL 與傳播時間教學

Linux 先用 resolvectl 看什麼?

使用 systemd-resolved 的 Linux,可先執行:

resolvectl status

它會顯示全域與各網路介面的 DNS 設定。重點看:

  • Current DNS Server:目前優先使用的 DNS Server。
  • DNS Servers:可用的上游 DNS 清單。
  • DNS Domain:搜尋網域或路由網域。
  • 每個 Link:DNS 設定到底屬於乙太網路、Wi-Fi、VPN 還是其他介面。

如果系統沒有 resolvectl,可能不是使用 systemd-resolved,或該服務未啟用。不要為了照教學而直接重設服務,先看 /etc/resolv.conf 與發行版的網路管理方式。

Linux 怎麼用本機 resolver 查詢?

resolvectl query example.com

它除了顯示 IP,也會顯示答案從哪個介面、使用什麼協定取得,以及 DNSSEC 驗證資訊。這最接近使用 systemd-resolved 的應用程式所看到的結果。

再用 Name Service Switch 路徑查一次:

getent hosts example.com

getent 會依 /etc/nsswitch.confhosts: 規則查詢,可能先讀 /etc/hosts、本機服務,再使用 DNS。它比只問一台 DNS Server 更接近許多 Linux 應用程式的名稱解析路徑。

如果 dig 有答案,但 getent hosts 沒有,應檢查本機 NSS、/etc/hostssystemd-resolved 或容器環境,而不是立刻修改權威 DNS。

Linux 怎麼用 dig 比對指定 DNS?

一般查詢:

dig example.com A
dig example.com AAAA
dig example.com MX

只看答案:

dig example.com A +short

指定 DNS Server:

dig @1.1.1.1 example.com A
dig @8.8.8.8 example.com A

完整輸出中可注意:

  • statusNOERRORNXDOMAINSERVFAIL 等狀態。
  • ANSWER SECTION:實際答案與剩餘 TTL。
  • SERVER:這次真正詢問的 DNS Server。
  • Query time:這次查詢花費時間,但不能單獨用來判斷服務品質。

dig 是直接 DNS 查詢工具,結果不一定等同瀏覽器或應用程式最終使用的位址;後者可能還受 /etc/hosts、NSS、代理、容器與應用程式快取影響。

/etc/resolv.conf 應該怎麼判讀?

先只讀查看,不要直接編輯:

cat /etc/resolv.conf
readlink -f /etc/resolv.conf

常見內容:

nameserver 127.0.0.53
options edns0 trust-ad
search corp.example

nameserver 127.0.0.53 通常表示程式先詢問本機 systemd-resolved stub;真正的上游 DNS 要用 resolvectl status 查,不是把 127.0.0.53 當成外部 DNS Server。

另外要注意:

  • /etc/resolv.conf 可能是 NetworkManager、systemd-resolved、DHCP 或容器執行環境自動產生。
  • 直接寫入的內容可能在重新連線或重開機後被覆蓋。
  • search 會影響單一標籤名稱如何補上網域,可能造成「短名稱可以、完整名稱不行」或反過來的差異。

Linux 清除 DNS 快取會發生什麼?

使用 systemd-resolved 時,可執行:

sudo resolvectl flush-caches

這會清除 systemd-resolved 維護的本機 DNS Resource Record 快取,可能需要管理權限。它同樣不會修改權威 DNS,也不會清除 ISP、公共 resolver、路由器、瀏覽器或 CDN 的快取。

Linux 不一定只有一層本機快取。若系統另外使用 dnsmasqnscd、容器 DNS 或應用程式自己的 cache,resolvectl flush-caches 不會自動清掉那些服務。先確認實際解析路徑,再處理對應服務。

一套安全的 DNS 排錯順序

  1. ipconfig /allresolvectl status 記錄目前 DNS Server。
  2. Resolve-DnsNameresolvectl querygetent hosts 查本機實際結果。
  3. nslookupdig 指定原本 DNS Server,比對直接答案。
  4. 再指定另一台公共 DNS 比對,確認差異是否只在單一 resolver。
  5. 確認權威 DNS、NameServer、TTL 與預期值。
  6. 只有在本機 cache 明顯不一致時,才清除本機快取並重查。
  7. 保留指令、時間、網路來源與輸出,方便管理員重現。

哪些指令不要在排錯一開始就執行?

  • 不要先用 Set-DnsClientServerAddress 更改公司或伺服器 DNS。
  • 不要直接覆寫 /etc/resolv.conf
  • 不要為了清 DNS 快取而重啟整台遠端伺服器。
  • 不要同時改 NameServer、A 記錄、網卡 DNS 與防火牆。
  • 不要把 ipconfig /release 當成清 DNS;它會釋放 DHCP 網路設定,可能讓連線中斷。

下一步

官方參考:Microsoft DNS Client 排錯Microsoft ipconfigMicrosoft Resolve-DnsNameMicrosoft Get-DnsClientServerAddresssystemd resolvectlBIND 9 dig

DNS、網站與信箱要一起確認?

如果你正準備上線或搬遷,請把網域、DNS 管理處、網站主機與 Email 服務一起整理。