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 等)即将废弃,新配置建议直接用上面这些新字段名。