適合已匯入訂閱、節點可連線,但遇到部分網域無法開啟或台灣網站連線變慢的 macOS 使用者。先釐清系統解析與核心解析的差異,再設定直連 DNS、遠端 DNS 和網域規則,最後透過終端機與記錄檔確認實際連線路徑。本文以 v2rayN 使用 Xray 核心的設定方式為主;若更換核心,請重新確認 DNS 欄位,不要直接套用原設定。
一、DNS 分流:先釐清三種路徑
DNS 的作用是將網域名稱轉換為 IP 位址。v2rayN 是用戶端,實際負責連線與部分解析工作的是所選核心。瀏覽器、macOS 系統解析器和核心內建 DNS 都可能參與同一次連線;只修改其中一處,不代表所有請求都會套用新設定。
以上是應用程式將網域名稱交給代理時的簡化流程。如果應用程式先在本機解析,代理收到的可能只有 IP;如果由代理伺服器解析網域,本機核心則不一定會送出目標網域的 DNS 查詢。因此,記錄檔中沒有某個網域的查詢紀錄,不一定代表設定沒有生效。
- 選擇解析器:國內網域交由直連解析器處理,需要代理的網域則交由遠端解析器處理。
- DNS 傳輸路徑:需另外確認查詢是透過直連還是代理出口送出。
- 連線路徑:取得位址後,網頁連線仍由路由規則決定走向。
二、直連 DNS 與遠端 DNS 的設定方式
先開啟 v2rayN 的「設定」→「DNS 設定」,並在「設定」→「參數設定」確認目前使用的核心。不同版本與核心的欄位可能不同;如果介面提供各核心獨立的 DNS 設定,請修改目前使用的那一組。先備份原設定,再更換解析器,避免同時調整路由、TUN 和 IPv6。
| 用途 | 入門範例 | 需要確認的條件 |
|---|---|---|
| 直連 DNS | 223.5.5.5 | 目前網路可連線;一般 DNS 查詢通常未加密 |
| 直連 DoH | https://dns.alidns.com/dns-query | 核心支援此格式;端點網域可完成引導解析 |
| 遠端 DoH | https://dns.google/dns-query | 查詢依預期透過代理傳送;TLS 驗證正常且系統時間正確 |
以下是公開服務的位址範例,不代表在所有網路環境中的速度排名。初次設定時,每種類型保留一個確認可連線的解析器即可。一次填入太多位址會增加回退與並行查詢的複雜度,也讓問題更難從記錄檔中追查。企業內網、校園網或需要解析本地域名的網路,應保留相應的內部解析路徑。
連接埠號碼用來識別傳輸方式,不代表本機已在這些連接埠上監聽。v2rayN 的代理監聽連接埠與 DNS 監聽連接埠是不同設定;請勿將 HTTP 或 SOCKS 代理連接埠填入 macOS 的 DNS 伺服器清單。
三、geosite 規則需同時考量解析與連線
geosite 是網域分類資料,geoip 是 IP 分類資料。兩者都不是解析器,也不會自動提供 DNS 服務。以 Xray 為例,路由中的 geosite:cn 可用來比對中國大陸網域;內建 DNS 的伺服器項目也可透過 domains 指定優先處理的網域集合。兩者用途相關,但不能互相取代。
- 先檢查規則資料。確認目前使用的核心能載入所需的網域與 IP 資料,且記錄檔沒有檔案遺失或分類不存在的錯誤。分類內容可能變動,不應視為永遠準確的地理界線。
- 設定直連解析範圍。將符合
geosite:cn的網域優先交給直連 DNS;內部網域則使用獨立規則,避免送往公共解析器。 - 設定遠端解析範圍。將需要代理的網域交給遠端 DNS;若使用
geosite:geolocation-!cn,請先確認資料中有這個分類。這是分類集合,不會即時判斷所有非中國大陸網域。 - 確認連線路由。中國大陸網域直連,需要代理的網域則透過代理連線。Xray 路由規則會依序比對,請將明確的網域規則放在可能先行匹配的廣泛規則之前。
- 檢查回退策略。網域未匹配、回應為空或位址不符合預期時,查詢可能改由其他伺服器處理。若要求某類網域不使用直連 DNS,也必須一併檢查其回退範圍。
Xray 的 routing.domainStrategy 用來控制路由階段是否透過解析結果比對 IP 規則。AsIs 不會為 IP 規則主動解析網域;IPIfNonMatch 則會在網域規則未匹配時嘗試解析,再進行比對。它與 DNS 模組中的 queryStrategy 是不同的設定,後者主要影響查詢的位址類型等行為。
結論:先比對網域規則,再檢查 IP 規則
網站連線走錯出口時,先確認是否匹配預期的網域分類,以及規則順序是否正確。只有在確實需要依 IP 判斷連線時,才調整路由階段的解析策略;不要靠更換 DNS 掩蓋路由設定錯誤。
四、DoH 防污染與引導解析設定
DoH 會透過 HTTPS 傳送 DNS 查詢,可保護到解析器這一段的傳輸,降低途中遭讀取或竄改的風險。但它無法保證解析器提供的答案一定正確,也不會隱藏連線目的 IP。如果瀏覽器啟用了獨立的安全 DNS,也可能略過核心中設定的解析器。
- 引導解析:連線至
dns.google這類網域端點前,連線端必須先取得端點位址。如果端點本身又依賴尚未連線的 DoH 進行解析,就會形成循環依賴。 - 節點網域:代理節點若使用網域名稱,也必須在建立代理連線前完成解析。不要將節點網域唯一的解析路徑設定為依賴該節點才能連線的服務。
- 憑證驗證:在 macOS 開啟「系統設定」→「一般」→「日期與時間」,確認時間自動設定已啟用。遇到憑證錯誤時,請檢查時間、端點名稱和網路攔截情況,不要關閉驗證來規避問題。
- 出口設定:若遠端解析器必須透過代理連線,請在相應核心支援的 DNS 傳輸與路由設定中明確指定,並透過記錄檔確認;不能只根據欄位名稱判斷。
不建議為了省略引導解析,就任意將 DoH 位址的主機名稱改成 IP。HTTPS 也涉及憑證名稱與伺服器虛擬主機。只有解析服務明確支援該 IP 端點時,才使用服務方公布的位址格式。
五、何時需要啟用 FakeDNS
FakeDNS 不是另一種公共 DNS 服務。它會為網域分配合成 IP,並在流量再次進入核心時,將該 IP 對應回原始網域。如此一來,即使應用程式後續只送出 IP,核心仍有機會依網域進行分流。FakeDNS 常用於搭配透明代理接管,但啟用 TUN 不代表一定要開啟它。
| 比較項目 | DoH | FakeDNS |
|---|---|---|
| 主要用途 | 加密傳輸實際 DNS 查詢 | 保留網域與合成 IP 的對應關係 |
| 回傳結果 | 解析器提供的實際位址紀錄 | 由本機映射池產生的位址 |
| 必要條件 | 端點可連線、憑證有效、出口正確 | 查詢與後續連線都由配套機制處理 |
| 常見問題 | 引導解析失敗、連線逾時 | 合成 IP 意外直連、快取映射不一致 |
如果只使用系統代理,且瀏覽器已將網域交給代理處理,通常先維持 FakeDNS 關閉。若在 TUN 情境中,應用程式先行解析導致網域規則失效,再檢查目前的核心與用戶端是否完整支援 DNS 接管和映射。更換核心時請重新驗證,不要假設不同核心的實作方式相同。
結論:先驗證接管路徑,再啟用 FakeDNS
先確認 DNS 查詢進入預期的處理路徑,再確認合成位址對應的連線不會繞過用戶端。啟用後若只有部分應用程式無法連線,優先檢查快取、略過規則與映射,不要立即更換節點。
六、依序驗證 macOS 上的 DNS 解析與代理
每次只修改一組設定。儲存後重新啟動核心,查看啟動記錄是否有錯誤,再進行下列測試。命令中的網域僅供示範;測試無法連線的網站時,請替換為該網站的主機名稱。請勿將訂閱網址、節點憑證或完整連線設定貼到公開記錄檔。
- 查看系統 DNS。執行
scutil --dns,檢查目前網路、VPN 或其他網路服務設定了哪些解析器。這會顯示系統解析設定,不會列出 Xray 內建 DNS 的所有狀態。 - 測試指定解析器。執行以下
dig命令,確認該解析器在目前網路是否有回應。這不等於驗證 v2rayN 的 DNS 分流。 - 測試代理連線。先確認「設定」→「參數設定」中的本機監聽連接埠與協定,再執行代理請求。範例假設
10808提供 HTTP 或混合代理;若實際上只有 SOCKS 服務,請勿直接使用 HTTP 格式。 - 確認核心記錄檔。比對同一測試時段的目標網域、匹配的路由、出口選擇及 DNS 逾時情形。必要時可暫時提高記錄層級,測試結束後再恢復。
# 查看 macOS 系統解析器
scutil --dns
# 直接查詢指定解析器,逾時 2 秒,僅嘗試 1 次
dig @223.5.5.5 www.baidu.com A +time=2 +tries=1
# 僅在 10808 提供 HTTP 或混合代理時使用
curl -I --proxy http://127.0.0.1:10808 \
--connect-timeout 10 --max-time 20 https://www.example.com/
若監聽連接埠支援 SOCKS5,也可以比較以下兩個命令。第一個通常會在本機解析目標網域,第二個則將網域交給 SOCKS 代理。若第二個成功、第一個失敗,請優先檢查本機解析路徑;但仍須搭配記錄檔排除位址類型差異或網站連線限制。
# 在本機解析目標網域
curl -I --proxy socks5://127.0.0.1:10808 \
--connect-timeout 10 --max-time 20 https://www.example.com/
# 將目標網域交由 SOCKS 代理處理
curl -I --proxy socks5h://127.0.0.1:10808 \
--connect-timeout 10 --max-time 20 https://www.example.com/
調整後仍得到舊結果時,請先關閉再重新開啟測試應用程式。若確實需要清除 macOS 系統 DNS 快取,可在終端機執行以下命令;第二個命令需要管理員權限。這些命令不會清除瀏覽器獨立快取、核心快取或上游解析器快取。
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
七、DNS 分流常見問題
改用 DoH 後,為什麼所有網站都變慢了?
先還原原本的解析器,確認連線是否恢復正常。接著檢查 DoH 端點的引導解析、代理出口和逾時記錄。如果中國大陸網域也交由遠端解析器處理,可能取得不適合目前直連出口的位址;應一併分流中國大陸網域的解析與連線,而不是只更換 DNS 位址。
dig 查詢正常,但瀏覽器仍無法開啟網站,代表什麼?
dig @223.5.5.5 只能證明這次向指定解析器送出的查詢有收到回應。瀏覽器可能使用獨立的安全 DNS,也可能受到系統代理或擴充功能衝突影響。請先用上方明確指定代理的命令重新測試,再確認瀏覽器的代理與安全 DNS 設定。
中國大陸網站解析到境外 IP,一定是 DNS 污染嗎?
不一定。CDN 調度、解析器所在位置和服務部署方式都可能影響結果。請分別透過直連與遠端解析器查詢同一網域,並比較連線是否成功、路由是否符合預期。答案不同本身不足以證明遭到污染,也不建議將單次結果長期寫入 hosts。
有 A 紀錄卻連線逾時,需要關閉 IPv6 嗎?
先分別查詢 A 與 AAAA,再比較 curl -4 和 curl -6 的結果。透過代理測試時,位址類型也可能由代理端決定,不能據此直接判斷本機 IPv6。確認是哪一段 IPv6 路徑失敗後,再調整相應查詢或出口策略,避免一次關閉整個系統功能。
Android 版可以直接套用這組 DNS 設定嗎?
分流原則可以參考,但設定不能直接照搬。v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心;兩款用戶端的 VPN 接管方式、DNS 入口和支援欄位都需要分別確認。移轉時先測試單一網域與單一解析器,再逐步加入分類規則和回退策略。
最後確認三件事:中國大陸網域使用預期的直連解析路徑;需要代理的網域不會意外回退至直連解析;連線走向正確的出口。保留一份可正常運作的設定,再逐項加入 DoH、IPv6 或 FakeDNS,日後遇到問題才有明確的回復基準。