TUN 模式会创建一块虚拟网卡,把系统默认路由指向它。 这样无论程序是否遵守代理设置,流量都会先经过内核,再由内核按规则决定去留。
系统代理的局限
- 只对读取系统代理设置的程序生效(浏览器、部分下载器);
- 游戏客户端、终端命令、Electron 应用通常直接忽略这些设置;
- DNS 查询往往绕过代理,容易泄漏甚至被污染。
TUN 的工作原理
- 内核创建虚拟网卡并分配地址;
- 修改路由表,让默认流量指向该网卡;
- 数据包被内核接管,按规则匹配后决定直连、代理或拒绝;
- 直连的流量重新注入物理网卡,代理的流量通过协议栈转发。
关键点:为了避免内核自身的出站流量再次进入虚拟网卡形成环路,内核会自动为代理服务器的地址添加一条直连路由,因此务必保证节点地址是 IP 而非域名,或让 auto-detect-interface 正常工作。
配置示例
tun:
enable: true
stack: mixed # system / gvisor / mixed
device: utun0 # 留空则自动分配
mtu: 9000
auto-route: true # 自动配置路由表
auto-redirect: false # Linux 下可用,性能更好
auto-detect-interface: true # 自动识别默认出口网卡
dns-hijack:
- any:53
- tcp://any:53
strict-route: true # 更严格的路由接管
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
dns-hijack 会把所有发往 53 端口的查询劫持到内核的 DNS 模块,这是防止 DNS 泄漏的关键配置。
stack 怎么选
| 取值 | 说明 | 适用场景 |
|---|---|---|
system | 使用系统网络栈,性能最好 | 桌面端日常使用 |
gvisor | 用户态网络栈,兼容性最好 | 兼容性优先、出现异常时 |
mixed | 自动在两者间切换 | 默认推荐 |
权限与平台差异
| 平台 | 所需权限 | 说明 |
|---|---|---|
| Windows | 管理员 | 首次开启会请求提权,服务方式运行更稳 |
| macOS | 管理员 / 网络扩展授权 | 需在「隐私与安全性」中允许 |
| Linux | CAP_NET_ADMIN | 用 systemd 的 AmbientCapabilities 授予 |
| Android | VPN 权限 | 由 VPN 服务实现,无需额外设置 |
常见冲突与排查
开启后完全断网
多半是路由表被改坏,或节点地址走了虚拟网卡形成环路。先关闭 TUN,检查配置里节点是否用了域名,再开启 auto-detect-interface。
局域网设备无法访问
虚拟网卡抢走了局域网路由。在配置中加入绕过网段:
tun:
route-exclude-address:
- 192.168.0.0/16
- 10.0.0.0/8
- 172.16.0.0/12
与其他 VPN 软件冲突
同一时间只应有一个程序接管默认路由。使用前先完全退出其他 VPN 或同类客户端。
睡眠唤醒后失效
系统挂起会重置网卡状态,重启内核服务即可恢复;桌面端可在设置中开启「网络变化时自动重载」。
开启 TUN 后建议同步检查 DNS 配置,见 DNS 配置与防泄漏实践。
进阶
← 返回教程列表