DNS

連上 VPN 後內部名稱無法解析

macOS 可以把某個網域的查詢送到一台 DNS 伺服器,其他查詢則送到另一台。VPN 用這種分割 DNS 來處理內部名稱。

適用於:所有目前的 macOS 版本。檢查日期:2026年10月29日

症狀

  • intranet.corp.example 之類的內部名稱失敗,但公開網站可以用。
  • 內部 IP 位址可以用,它的名稱卻不行。
  • dig 或 nslookup 失敗,但瀏覽器可以用,或者剛好相反。

可能原因

  • VPN 沒有為該網域加入解析器。VPN 必須告訴 macOS 哪些網域要送到它的 DNS 伺服器。
  • 略過 macOS 規則的測試工具。dig 使用 /etc/resolv.conf 中的伺服器,而不是 App 使用的各網域解析器。
  • 手動設定的 DNS 伺服器。在 Wi-Fi 上手動設定的 DNS 伺服器不認得內部名稱。
  • 沒有搜尋網域的短名稱。intranet 之類的短名稱需要搜尋網域,才能變成完整名稱。

如何檢查

  1. 連上 VPN。顯示所有解析器。尋找有一行 domain 對應你公司網域的解析器。

    scutil --dns
  2. 透過 macOS 解析器查詢名稱,而不是透過 dig。

    dscacheutil -q host -a name intranet.corp.example
  3. 顯示該服務的搜尋網域。

    networksetup -getsearchdomains Wi-Fi

如何修正

  1. 詢問你的管理者,VPN 應該使用哪個網域和 DNS 伺服器。

  2. 如果存放各網域解析器的檔案夾不存在,就建立它。

    sudo mkdir -p /etc/resolver

    需要管理者密碼。

  3. 建立一個以該網域命名的檔案。每台伺服器在檔案中寫一行 nameserver。

    sudo nano /etc/resolver/corp.example

    需要管理者密碼。

  4. 在一行中輸入內部 DNS 伺服器的位址。

    nameserver 10.0.0.53
  5. 儲存檔案。執行 scutil --dns,尋找新的網域。

  6. 使用完整名稱,或在「系統設定」>「網路」> 該服務 >「詳細資訊」>「DNS」中加入搜尋網域。

  7. 不再需要時,請移除該檔案。

    sudo rm /etc/resolver/corp.example

    需要管理者密碼。

使用 Kilobat

  1. 對於私人名稱,why 會說明查詢送到了哪個 VPN 解析器,以及該解析器是否有回應。

    kilobat why intranet.corp.example

常見問題

為什麼瀏覽器可以用,dig 卻失敗?

dig 會詢問 /etc/resolv.conf 中的伺服器。瀏覽器使用的是 macOS 解析器,它也會使用各網域解析器。

可以編輯 /etc/resolv.conf 嗎?

不行。resolver 的 man 頁面說明,macOS 會自動維護這個檔案。請使用「網路」設定或 /etc/resolver。

資料來源

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