TUN 模式会创建一块虚拟网卡,把系统默认路由指向它。 这样无论程序是否遵守代理设置,流量都会先经过内核,再由内核按规则决定去留。

系统代理的局限

  • 只对读取系统代理设置的程序生效(浏览器、部分下载器);
  • 游戏客户端、终端命令、Electron 应用通常直接忽略这些设置;
  • DNS 查询往往绕过代理,容易泄漏甚至被污染。

TUN 的工作原理

  1. 内核创建虚拟网卡并分配地址;
  2. 修改路由表,让默认流量指向该网卡;
  3. 数据包被内核接管,按规则匹配后决定直连、代理或拒绝;
  4. 直连的流量重新注入物理网卡,代理的流量通过协议栈转发。

关键点:为了避免内核自身的出站流量再次进入虚拟网卡形成环路,内核会自动为代理服务器的地址添加一条直连路由,因此务必保证节点地址是 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管理员 / 网络扩展授权需在「隐私与安全性」中允许
LinuxCAP_NET_ADMIN用 systemd 的 AmbientCapabilities 授予
AndroidVPN 权限由 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 配置与防泄漏实践

进阶 ← 返回教程列表