DNS
連上 VPN 後內部名稱無法解析
macOS 可以把某個網域的查詢送到一台 DNS 伺服器,其他查詢則送到另一台。VPN 用這種分割 DNS 來處理內部名稱。
症狀
intranet.corp.example之類的內部名稱失敗,但公開網站可以用。- 內部 IP 位址可以用,它的名稱卻不行。
dig或nslookup失敗,但瀏覽器可以用,或者剛好相反。
可能原因
- VPN 沒有為該網域加入解析器。VPN 必須告訴 macOS 哪些網域要送到它的 DNS 伺服器。
- 略過 macOS 規則的測試工具。
dig使用/etc/resolv.conf中的伺服器,而不是 App 使用的各網域解析器。 - 手動設定的 DNS 伺服器。在 Wi-Fi 上手動設定的 DNS 伺服器不認得內部名稱。
- 沒有搜尋網域的短名稱。
intranet之類的短名稱需要搜尋網域,才能變成完整名稱。
如何檢查
連上 VPN。顯示所有解析器。尋找有一行
domain對應你公司網域的解析器。scutil --dns透過 macOS 解析器查詢名稱,而不是透過
dig。dscacheutil -q host -a name intranet.corp.example顯示該服務的搜尋網域。
networksetup -getsearchdomains Wi-Fi
如何修正
詢問你的管理者,VPN 應該使用哪個網域和 DNS 伺服器。
如果存放各網域解析器的檔案夾不存在,就建立它。
sudo mkdir -p /etc/resolver需要管理者密碼。
建立一個以該網域命名的檔案。每台伺服器在檔案中寫一行
nameserver。sudo nano /etc/resolver/corp.example需要管理者密碼。
在一行中輸入內部 DNS 伺服器的位址。
nameserver 10.0.0.53儲存檔案。執行
scutil --dns,尋找新的網域。使用完整名稱,或在「系統設定」>「網路」> 該服務 >「詳細資訊」>「DNS」中加入搜尋網域。
不再需要時,請移除該檔案。
sudo rm /etc/resolver/corp.example需要管理者密碼。
使用 Kilobat
對於私人名稱,
why會說明查詢送到了哪個 VPN 解析器,以及該解析器是否有回應。kilobat why intranet.corp.example
常見問題
為什麼瀏覽器可以用,dig 卻失敗?
dig 會詢問 /etc/resolv.conf 中的伺服器。瀏覽器使用的是 macOS 解析器,它也會使用各網域解析器。
可以編輯 /etc/resolv.conf 嗎?
不行。resolver 的 man 頁面說明,macOS 會自動維護這個檔案。請使用「網路」設定或 /etc/resolver。
資料來源
- resolver(5),macOS 27.2 內建的 man 頁面
- scutil(8),macOS 27.2 內建的 man 頁面
- dig(1),macOS 27.2 內建的 man 頁面
- Apple 支援:在 Mac 上更改 DNS 設定
資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。