listeners 裡也能設定 tun,但那是給進階使用者用的寫法;一般使用者請直接使用頂層設定裡的 tun 欄位,也就是本頁說的內容。
設定範例
config.yaml YAML
tun: enable: true stack: mixed auto-route: true auto-redirect: true auto-detect-interface: true dns-hijack: - any:53 - tcp://any:53 device: utun0 mtu: 9000 strict-route: true
核心欄位
enable必須啟用 TUN 模式。
stack預設 gvisor協議堆疊,可選 system/gvisor/mixed。沒有相容性問題的話建議用 mixed:TCP 用 system 堆疊(更穩定、佔用更低),UDP 用 gvisor 堆疊,體驗通常最好。如果開啟了系統防火牆,system/mixed 堆疊需要手動放行核心程式才能使用。
device可選指定 TUN 網卡名稱,macOS 只能使用 utun 開頭的名字。
auto-route可選自動設定全域路由,把系統流量自動導入 TUN 網卡,幾乎總是需要開啟。
auto-redirect僅 Linux自動設定 iptables/nftables 重新導向 TCP 連線,需要 auto-route 已開啟,主要用在路由器場景。
auto-detect-interface可選自動選擇流量出口網卡;如果裝置同時接了多個出口(比如同時連了 Wi-Fi 和有線網),建議手動指定出口網卡而不是自動偵測。
dns-hijack可選把匹配到的 DNS 請求導入核心內建的 DNS 模組,預設寫法不帶協議即 udp://。macOS/Windows 無法自動劫持發往區域網路的 DNS 請求;Android 若開啟了「私人 DNS」也無法自動劫持。
strict-route可選在 auto-route 基礎上執行更嚴格的路由規則,防止位址洩漏,也是 Android 上 DNS 劫持能正常生效的前提。Windows 下可能導致 VirtualBox 等應用在某些場景下工作不正常。
mtu / gso / gso-max-size可選mtu 最大傳輸單元,一般無需修改;gso(僅 Linux)啟用通用分段卸載可以提升效能,gso-max-size 設定資料塊最大長度。
路由範圍與篩選
| 欄位 | 說明 |
|---|---|
route-address / route-exclude-address | 啟用 auto-route 時路由自訂網段而非預設路由 / 排除自訂網段,一般無需設定 |
route-address-set / route-exclude-address-set | 把指定規則集裡的目標 IP CIDR 加入防火牆做路由/排除,僅支援 Linux + nftables,需要 auto-route+auto-redirect |
include-interface / exclude-interface | 限制被路由的網路介面,兩者互斥不可同時設定 |
include-uid / exclude-uid(及 range 版本) | 按 Linux 使用者 UID 限制/排除被 TUN 路由的流量,僅 Linux 支援,需要 auto-route |
include-android-user | 限制被路由的 Android 使用者(機主 0 / 分身 10 / 多開 999),僅 Android 支援 |
include-package / exclude-package | 按 Android 應用套件名稱限制/排除被 TUN 路由的流量 |
endpoint-independent-nat | 啟用獨立於端點的 NAT,效能可能略有下降,不需要時不建議開啟 |
udp-timeout | UDP NAT 過期時間,單位秒,預設 300(5 分鐘) |
還有一批「舊寫法」欄位(inet4-route-address 等)即將廢棄,新設定建議直接用上面這些新欄位名。