更新動作也涉及覆寫策略。訂閱產生的項目原則上由訂閱維護,不適合直接長期修改其中的地址、連接埠、使用者識別或傳輸層參數,因為後續更新可能覆蓋這些變更。確實需要實驗時,請複製一份項目到本機測試分組,並在名稱前加上「本機測試」以便區分。測試成功後,如果變更屬於訂閱端設定,應回到訂閱來源修正;如果只是本機路由或 DNS 需求,則應放在用戶端的全域設定或路由規則中,而不是逐一修改伺服器。
網域與地址不一定能同時取得。某些連線進入核心時帶有網域,規則可以直接依網域比對;另一些連線只提供已解析的地址,此時網域規則可能無法生效。啟用網域嗅探後,核心可從部分協定流量中還原目標網域,但嗅探並非所有情境都可靠,也不應取代正確的 DNS 設計。穩定的路由設定應同時考慮網域規則與地址規則,並明確哪些規則依賴嗅探。
路由階段的解析也會受到 DNS 模組影響。如果 DNS 查詢本身走錯出站,路由可能取得不符合預期的地址,進而命中另一條規則。修改 domainStrategy 後出現「同一網域偶爾走不同出口」,應同時檢查 DNS 伺服器選擇、快取與網域規則命中情況。路由與 DNS 是前後相接的兩個系統,不適合分開盲目調整。
驗證路由時,先清除容易造成混淆的背景連線,再開啟用戶端日誌,接著只存取一個測試目標。重點觀察目標網域或地址、符合的規則,以及最終出站標籤。如果日誌只顯示地址,可檢查 DNS 與嗅探設定;如果出站標籤正確但存取失敗,問題更可能位於目標伺服器、選取的節點、傳輸參數或本機網路。若標籤錯誤,將對應規則暫時移到最前方測試,確認規則內容本身能否匹配,再恢復合理順序。
修改路由規則後應重新建立連線,使新設定完整載入。瀏覽器可能重用既有連線,也可能保留 DNS 快取,因此只重新整理頁面不足以驗證變更。較穩妥的流程是中斷用戶端、關閉測試應用程式的背景程序、重新連線,再發起一次新的存取。需要系統化排查「顯示已連線但無法存取」時,可參考代理連接埠、路由模式與 DNS 逐項排查清單。
比對條件
適用情境
主要限制
驗證重點
domain
依網站或網域集合分流
連線需要保留或還原網域
日誌是否顯示目標網域
ip
區域網路與明確地址範圍
地址變化會影響長期規則
實際解析地址是否落在範圍內
port
明確的連接埠服務
無法區分共用連接埠的網站
目標連接埠與網路類型
network
分別處理 TCP、UDP
粒度較粗
出站是否支援對應網路
03
DNS 設定最佳化
明確誰發起查詢、查詢經過哪個出站,以及回傳結果如何參與路由。
先理清解析鏈路
DNS 故障之所以難以排查,通常是因為系統 DNS、用戶端 DNS、瀏覽器加密 DNS 與遠端解析同時存在。應用程式提交網域後,查詢可能先由作業系統處理,也可能由 TUN 接管;若瀏覽器啟用獨立的加密 DNS,還可能繞過用戶端設定。核心取得查詢後,還要依網域規則選擇 DNS 伺服器,並決定查詢請求走直連還是代理。最後回傳的地址可能進入快取,再交給路由模組繼續比對。任何一層變更,都可能表現為「網域打不開但地址可連」或「同一網域結果不穩定」。
最佳化的第一步不是堆疊更多 DNS 地址,而是確定唯一的主要路徑。在一般系統代理模式下,可讓用戶端負責需要代理的網域解析,同時保留系統解析處理本地資源;在 TUN 模式下,則應讓進入虛擬網卡的查詢盡量由核心統一接管。測試期間可以暫時關閉瀏覽器獨立 DNS,避免形成平行路徑。確認用戶端鏈路正常後,再決定是否恢復瀏覽器設定,並驗證其流量是否依預期進入路由。
本機 DNS 與遠端 DNS 的職責
本機 DNS 適合解析區域網路名稱、企業內部網域,以及明確應由目前網路回應的目標。遠端 DNS 適合由代理出站承載的網域查詢,使解析位置與存取出口一致。兩者不是「一個快、一個慢」的簡單選擇,而是管轄範圍不同。將內部網域交給遠端伺服器,通常得不到正確地址;將需要與代理出口一致的網域始終交給本機伺服器,也可能得到不適合目前出站的結果。
設定時可依網域集合指定伺服器,並保留一個清楚的預設解析器。若用戶端支援 DoH,可以使用類似 https://1.1.1.1/dns-query 的 HTTPS 端點;若使用一般 UDP DNS,應明確請求是否經過代理出站。DoH 只是傳輸形式,不會自動保證路由正確。端點網域本身也需要首次解析,因此在嚴格環境中可以搭配明確的伺服器地址或引導解析策略,避免形成「解析 DNS 伺服器網域還要先存取同一台 DNS 伺服器」的循環依賴。
地址族問題常表現為首次開啟較慢、稍後又恢復,或同一目標在不同應用程式中表現不同。原因可能是應用程式採用不同的地址選擇演算法,也可能是其中一個地址族先失敗後回退。檢查時應分別觀察 A 與 AAAA 結果,並在用戶端日誌中確認最終嘗試的目標地址。只修改 DNS 回傳類型而不檢查出站能力,可能把原本可用的另一類地址一併排除。
快取、Fallback 與污染式誤判
DNS 快取能減少重複查詢,但也會延長錯誤結果的影響。修改伺服器或分流規則後,應中斷並重新連線用戶端,必要時重新啟動測試應用程式,讓舊快取退出。若系統仍保留解析結果,可以等待記錄過期,或使用系統提供的快取刷新方式。不要連續更換多個 DNS 後立即比較,因為此時瀏覽器、系統與用戶端可能各自持有不同階段的結果,觀察到的並非單一設定效果。
遠端 DNS 沒有回應時,先直接檢查端點能否建立連線,再看其請求走的是代理還是直連出站。若端點使用網域,確認引導解析能取得地址;若使用 HTTPS,檢查裝置系統時間是否正確,因為時間偏差會影響 TLS 建立連線。接著檢查路由規則是否將 DNS 端點錯誤送入封鎖或不支援的自訂出站。最後再檢查用戶端日誌中的回應格式與逾時資訊。依此順序可以區分「端點無法連線」「路由錯誤」與「解析結果不適用」。
在 Android 上啟用 VPN 模式後,還要留意系統私人 DNS 設定。系統私人 DNS、瀏覽器獨立 DNS 與 v2rayNG 遠端 DNS 若同時運作,查詢路徑可能與預期不同。排錯時先保留 v2rayNG 的單一路徑,確認網域解析與存取都穩定,再逐項恢復系統功能。桌面版 v2rayN 則需要區分系統代理與 TUN:系統代理不一定接管所有程式的 DNS,TUN 才更接近全域網路層接管。兩種模式不能用完全相同的觀察方式判斷。
網域失敗、地址可存取
優先檢查查詢是否送出、使用了哪個 DNS、回傳地址是否被正確路由,以及應用程式是否持有舊快取。
解析成功、連線仍失敗
將焦點轉向路由命中、地址族、目標連接埠與代理出站,不要繼續無序更換 DNS。
04
TUN 模式設定與界線
從網路層接管流量,涵蓋不讀取系統代理設定的應用程式。
TUN 與系統代理的工作位置不同
系統代理依賴應用程式主動讀取作業系統的代理設定,適合瀏覽器與遵循系統網路設定的軟體。TUN 模式則建立虛擬網路介面,在更低的網路層接收流量,因此能涵蓋不支援 HTTP 或 SOCKS 代理設定的程式。它的涵蓋範圍更廣,也代表需要處理更多細節:路由表、DNS 接管、UDP、地址族、區域網路存取與其他虛擬網路軟體都可能參與。把 TUN 理解成「更強的開關」並不準確,它是一套不同的流量入口。
TUN 實作可能提供不同的網路堆疊選項。系統堆疊更貼近作業系統行為,通常相容性較好;使用者態堆疊則將更多網路處理放在用戶端內部,便於跨平台維持一致。具體名稱會隨用戶端介面而不同,但選擇原則相同:先使用用戶端推薦的預設堆疊,只有在日誌明確指向相容性問題、UDP 異常或特定應用程式失敗時才切換。切換後重新建立連線,並對同一目標重複測試。
MTU 表示網路介面一次承載的資料大小。數值過大時,某些路徑上的封包可能需要分片或被丟棄,表現為小型頁面能開啟、大型內容卡住、上傳失敗,或建立連線後沒有資料;數值過小則會增加額外負擔。排查時可以從系統或用戶端預設值開始,遇到疑似分片問題再小幅降低,並記錄每次變化。不要直接套用極端數值,因為不同網路、傳輸方式與封裝層的有效上限不同。
UDP 需要出站與伺服器設定共同支援。TUN 接收到 UDP 不代表遠端一定能夠轉送。如果網頁正常,但即時通訊、語音或部分網域解析失敗,應查看日誌中 UDP 是否進入正確出站,以及目前伺服器設定是否允許。為了定位問題,可以暫時讓 DNS 改用基於 HTTPS 的查詢,以區分一般 UDP DNS 故障與所有 UDP 流量故障;之後仍應回到真實使用情境驗證,而不是把臨時替代方案當作問題已消失。
繞過區域網路與避免路由迴圈
TUN 接管後,區域網路印表機、路由器管理頁面與檔案分享可能被錯誤送入代理。應在路由規則前段保留私有地址直連,並依需求加入本地域名。常見私有地址集合可由核心的 geoip:private 處理,但企業網路可能使用額外地址段,仍需依實際網路補充。驗證時分別存取閘道地址、區域網路裝置地址與一個內部網域,確認地址直連與內部 DNS 都正常。
路由迴圈發生在用戶端存取代理伺服器或 DNS 端點的流量又被 TUN 重新接管,並反覆送回自身。用戶端通常會自動排除自身程序或伺服器地址,但自訂出站、鏈式代理與特殊網路環境仍可能打破這項保護。典型表現是連線後立即失去網路、日誌重複出現同一目標,或伺服器連線不斷重建。應確保代理伺服器地址、必要的引導 DNS 與用戶端自身通訊都有明確可達路徑,並避免預設規則將所有流量不加區分地送回同一入口。
部分應用程式會先自行完成 DNS 查詢,再將目標地址交給系統。連線進入 TUN 時,核心看到的可能只剩地址,原始網域已經遺失,因此無法符合以網域為基礎的路由規則。FakeDNS 的概念是:用戶端對受控查詢回傳一個虛擬地址,同時記錄「網域與虛擬地址」的對應;應用程式隨後連線到該虛擬地址時,核心從對應中還原原始網域,再依網域規則選擇真實 DNS 與出站。它主要用於保留網域資訊,不是公共 DNS 的替代品。
這套機制依賴查詢與後續連線都經過同一個用戶端。如果應用程式繞過用戶端執行獨立解析,或連線沒有進入 TUN,對應就無法建立或使用。瀏覽器加密 DNS、應用程式內建解析器與某些直連網路函式庫都可能形成旁路。因此,啟用 FakeDNS 前應先確保 DNS 接管鏈路清楚,並確認 TUN 基礎功能正常。否則發生問題時,很難區分是對應、DNS 旁路還是虛擬網卡本身造成。
區域網路內部網域、裝置探索、列印服務與依賴真實地址回傳的應用程式需要謹慎處理。內部網域通常應交給本機 DNS 並直連,不應進入 FakeDNS;依賴 DNS 回傳地址執行區域網路掃描或存取控制的軟體,也可能無法理解虛擬地址。可以透過網域規則讓內部命名跳過 FakeDNS,直接使用區域網路解析器。若應用程式必須取得真實地址才能運作,應為它設定分應用程式繞過,或使用真實 DNS 結果。
回退點應建立在「已驗證可連線」的狀態上。修改篩選規則前保留舊運算式,批次更新前記住目前可用的項目,匯入新設定前保留原有分組。若更新後連線失敗,先恢復選取項目與篩選條件,再判斷新訂閱內容。不要一邊回退訂閱、一邊更換 DNS 與 TUN 設定;同時回退多個層次雖然可能偶然恢復,卻無法確認真正原因。
主要與備用切換的驗證流程
備用訂閱只有定期驗證,才真正具備備用價值。驗證不需要長期保持連線,可在網路穩定時手動更新,選擇一個設定進行連線測試,並確認基本 DNS 與路由能夠運作。測試結束後切回主訂閱,避免目前選取的項目無意間留在測試來源。若主備使用不同協定或傳輸方式,應分別記錄各自必要的系統條件,避免故障發生時才發現備用設定依賴尚未啟用的功能。
加入自訂出站後,DNS 請求可能仍沿用原有路徑。若目標存取走 upstream-socks,而遠端 DNS 走直連,解析位置與存取出口可能不一致。是否需要一致取決於情境,但必須是明確設計,而不是偶然結果。可以為 DNS 端點新增精確路由,使其透過指定出站,也可以讓內部 DNS 始終直連。修改後觀察 DNS 端點連線與目標連線是否分別命中預期標籤。
要避免 DNS 迴圈:如果上游出站的伺服器地址是網域,而解析該網域的 DNS 又被路由到同一個上游,就可能在上游尚未建立時形成依賴。解決方式包括為上游地址提供可靠的引導解析、使用明確可達的地址,或為其 DNS 查詢設定獨立的直連路徑。選擇哪種方式取決於網路條件,核心是讓建立上游所需的基礎連線不依賴上游本身。
升級或切換用戶端前,應記錄哪些內容來自訂閱、哪些內容來自用戶端介面,以及哪些屬於手動覆寫。訂閱伺服器參數通常可以重新取得,複雜的自訂出站與路由則需要另外備份。備份後可在文字中檢查標籤引用:每個 outboundTag 都應對應實際出站,每個鏈式引用都應有目標,每個 DNS 路由都應能在上游建立前完成必要解析。
最終設定應能回答四個問題:每類流量由哪條規則比對、規則選擇哪個出站、該出站如何建立底層連線,以及建立它所需的 DNS 又經過哪裡。如果其中任何一步只能靠猜測,設定就還不適合長期執行。遇到複雜故障時,可以先恢復 proxy、direct、block 三類基礎結構,再逐一加入自訂出口。需要重新選擇適合平台的用戶端時,可查看選型指南與安裝套件頁面。