DNS
Mac 上的 DNS 查詢繞過 VPN
開著 VPN 時,通常會希望 DNS 查詢送到 VPN 的伺服器。有些設定卻會把查詢送到本機網路的伺服器。
症狀
- VPN 已連線,但 DNS 測試顯示的是本地業者的伺服器。
- 開著 VPN 時,網站看到的是你本機網路的 DNS 伺服器。
- 內部名稱可以用,但其他名稱走的是本機網路的 DNS。
可能原因
- Wi-Fi 或乙太網路上手動設定的 DNS 伺服器。你為某個網路服務輸入的伺服器,可能會和 VPN 的伺服器一起繼續使用。
- 分割通道 VPN。有些 VPN 只讓部分網域或網路經過通道,其他查詢則使用本機的伺服器。
- 加密 DNS 描述檔或 DNS App。DNS 設定描述檔或其他 DNS App 可能會把查詢送到它自己的伺服器。
- VPN App 的設定。很多 VPN App 都有自己的 DNS 選項。這些選項決定 macOS 會拿到哪些伺服器。
如何檢查
連上 VPN。顯示 DNS 設定。解析器 #1 是大多數名稱的預設解析器。
scutil --dns輸出每個解析器及其
nameserver位址、if_index介面,有些還會有domain。找出解析器 #1 的介面。VPN 介面的名稱通常類似
utun。ifconfig -l尋找你在實體服務上手動設定的 DNS 伺服器。
networksetup -getdnsservers Wi-Fi尋找描述檔。在 macOS 15 以上版本中,選擇「蘋果」選單 >「系統設定」>「一般」>「裝置管理」。
在 macOS 13 和 14,選擇「蘋果」選單 >「系統設定」>「隱私權與安全性」>「描述檔」。
如何修正
如果不需要,移除你在 Wi-Fi 或乙太網路上手動設定的 DNS 伺服器。
networksetup -setdnsservers Wi-Fi empty需要管理者密碼。
打開 VPN App 的設定。如果有使用 VPN 的 DNS 的選項,請開啟它。
移除不需要的 DNS 描述檔。在「裝置管理」或「描述檔」中選取它,然後按一下「移除」按鈕。
中斷 VPN 後再重新連線。再次執行
scutil --dns並比較結果。詢問 VPN 供應商或你的管理者,通道應該使用哪些 DNS 伺服器。
使用 Kilobat
Kilobat 會把 VPN 介面列在實體介面旁邊。
kilobat interfaces --json對於私人名稱,
why會說明查詢送到了哪個 VPN 解析器,以及它是否有回應。它也會比較直接路徑和通道路徑。kilobat why intranet.corp.example
常見問題
VPN 一定會處理所有 DNS 嗎?
不一定,由 VPN 決定。分割通道 VPN 可能只把部分網域送到它的 DNS 伺服器。
為什麼我看到不只一個解析器?
macOS 可以使用多個解析器。帶有 domain 那一行的解析器只回應該網域的查詢。scutil 的 man 頁面有說明。
資料來源
- scutil(8),macOS 27.2 內建的 man 頁面
- resolver(5),macOS 27.2 內建的 man 頁面
- Apple 支援:在 Mac 上更改 DNS 設定
- Apple 支援:更改 Mac 使用的網路服務順序
- Apple 支援:使用設定描述檔統一 Mac 電腦的設定
資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。