DNS

Mac 上的 DNS 查詢繞過 VPN

開著 VPN 時,通常會希望 DNS 查詢送到 VPN 的伺服器。有些設定卻會把查詢送到本機網路的伺服器。

適用於:「系統設定」的步驟適用於 macOS 13 Ventura 以上版本。終端機指令適用於所有目前的 macOS 版本。檢查日期:2026年10月29日

症狀

  • VPN 已連線,但 DNS 測試顯示的是本地業者的伺服器。
  • 開著 VPN 時,網站看到的是你本機網路的 DNS 伺服器。
  • 內部名稱可以用,但其他名稱走的是本機網路的 DNS。

可能原因

  • Wi-Fi 或乙太網路上手動設定的 DNS 伺服器。你為某個網路服務輸入的伺服器,可能會和 VPN 的伺服器一起繼續使用。
  • 分割通道 VPN。有些 VPN 只讓部分網域或網路經過通道,其他查詢則使用本機的伺服器。
  • 加密 DNS 描述檔或 DNS App。DNS 設定描述檔或其他 DNS App 可能會把查詢送到它自己的伺服器。
  • VPN App 的設定。很多 VPN App 都有自己的 DNS 選項。這些選項決定 macOS 會拿到哪些伺服器。

如何檢查

  1. 連上 VPN。顯示 DNS 設定。解析器 #1 是大多數名稱的預設解析器。

    scutil --dns

    輸出每個解析器及其 nameserver 位址、if_index 介面,有些還會有 domain。

  2. 找出解析器 #1 的介面。VPN 介面的名稱通常類似 utun。

    ifconfig -l
  3. 尋找你在實體服務上手動設定的 DNS 伺服器。

    networksetup -getdnsservers Wi-Fi
  4. 尋找描述檔。在 macOS 15 以上版本中,選擇「蘋果」選單 >「系統設定」>「一般」>「裝置管理」。

  5. 在 macOS 13 和 14,選擇「蘋果」選單 >「系統設定」>「隱私權與安全性」>「描述檔」。

如何修正

  1. 如果不需要,移除你在 Wi-Fi 或乙太網路上手動設定的 DNS 伺服器。

    networksetup -setdnsservers Wi-Fi empty

    需要管理者密碼。

  2. 打開 VPN App 的設定。如果有使用 VPN 的 DNS 的選項,請開啟它。

  3. 移除不需要的 DNS 描述檔。在「裝置管理」或「描述檔」中選取它,然後按一下「移除」按鈕。

  4. 中斷 VPN 後再重新連線。再次執行 scutil --dns 並比較結果。

  5. 詢問 VPN 供應商或你的管理者,通道應該使用哪些 DNS 伺服器。

使用 Kilobat

  1. Kilobat 會把 VPN 介面列在實體介面旁邊。

    kilobat interfaces --json
  2. 對於私人名稱,why 會說明查詢送到了哪個 VPN 解析器,以及它是否有回應。它也會比較直接路徑和通道路徑。

    kilobat why intranet.corp.example

常見問題

VPN 一定會處理所有 DNS 嗎?

不一定,由 VPN 決定。分割通道 VPN 可能只把部分網域送到它的 DNS 伺服器。

為什麼我看到不只一個解析器?

macOS 可以使用多個解析器。帶有 domain 那一行的解析器只回應該網域的查詢。scutil 的 man 頁面有說明。

資料來源

資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。