TUN 模式是什么?和系统代理、全局模式有什么区别
简答:TUN 模式是一种通过虚拟网卡接管 IP 数据包的网络方式。它能覆盖部分不读取系统代理的命令行工具、后台程序和 UDP 应用,但不等于自动全局代理:TUN 负责“接管流量”,规则或路由再决定“直连、代理还是分流”。如果你只是用浏览器访问网页,通常不必开启;如果浏览器能用、其他应用却连不上,才值得优先排查 TUN。
定义:TUN 模式是由客户端创建虚拟网络接口,并通过系统路由把符合条件的 IP 流量交给客户端处理的一种接管方式。
先用这张表判断:你是否需要 TUN
先区分两个问题:TUN 解决“哪些流量能被客户端接管”,规则模式或全局模式解决“接管后如何处理”。因此,开启 TUN 并不会自动让所有连接都走代理。
| 方式 | 主要作用 | 通常能覆盖 | 常见限制 |
|---|---|---|---|
| 系统代理 | 向应用提供 HTTP、HTTPS 或 SOCKS 代理地址 | 浏览器、明确支持代理的应用 | 不遵守系统代理的程序可能完全不生效 |
| TUN 模式 | 创建虚拟接口并按路由接管 IP 流量 | 命令行工具、后台程序、部分 UDP 应用 | 需要权限;可能与 VPN、虚拟机、加速器或局域网路由冲突 |
| 全局模式 | 一种流量处理策略,通常表示匹配到的流量优先走代理 | 取决于系统代理或 TUN 是否已经接管流量 | 它不是独立的网卡技术,不能替代 TUN |
| 规则模式 | 按域名、IP、进程或规则集决定直连、代理或拒绝 | 已被系统代理或 TUN 接管的流量 | 规则错误时可能出现误直连、误代理或局域网不可达 |
官方资料也把虚拟接口、路由范围、DNS 和排除路由作为独立设置:例如 Linux 内核文档说明,TUN 让用户态程序读写 IP 数据包;Apple 的网络扩展接口则允许配置虚拟 IP、DNS、路由范围和 MTU。Linux 内核 TUN/TAP 文档 Apple NEPacketTunnelProvider 文档
TUN 模式的工作原理:接管和分流是两步
- 创建虚拟接口:客户端向操作系统注册一个虚拟网络接口。Linux TUN 设备处理的是 IP 数据包,不是二层以太网帧;Android 的
VpnService也会创建虚拟网络接口,并返回供应用读取和写入数据包的文件描述符。Android VpnService API - 调整路由:客户端把部分或全部目标地址的路由指向虚拟接口。路由范围可以是默认路由,也可以是若干网段;Windows 官方对 VPN 的说明同样区分“强制隧道”和“分离隧道”,本质上都是路由选择。Microsoft VPN 路由说明
- 读取并处理数据包:客户端从虚拟接口取得数据包,再依据规则选择直连、代理或其他出站方式,最后把返回数据写回系统网络栈。
- 处理 DNS:部分客户端会设置系统 DNS 或拦截发往 53 端口的请求。是否能避免 DNS 泄露,取决于客户端版本、DNS 模式、路由和防火墙规则,不能仅凭“已打开 TUN”断定。
以当前官方文档为例,sing-box 将 auto_route、route_exclude_address、strict_route、dns_mode 等字段分别定义;Mihomo 也将 auto-route、dns-mode、dns-hijack 和 strict-route 分开。由此可以确认:TUN、DNS 接管和分流规则不是同一个开关。sing-box TUN 配置文档 Mihomo TUN 配置文档
TUN 和系统代理、全局模式到底差在哪
系统代理是“应用主动连接代理”
系统代理通常提供代理服务器地址和端口,应用需要主动读取系统设置或支持相应协议。浏览器一般容易遵守,但命令行工具、游戏、后台服务和某些独立网络组件可能不读取这些设置。
TUN 是“系统把 IP 流量交给虚拟接口”
TUN 工作在 IP 流量接管层,应用是否知道代理设置不再是唯一条件。但它仍受路由、协议、客户端实现和权限影响;不能把 TUN 理解为绕过所有网络限制的万能开关。
全局模式是策略,不是接口
全局模式通常表示:对已经被客户端接管的流量,尽量选择代理出站。若某个应用没有进入系统代理,也没有被 TUN 路由接管,单独切换全局模式并不能让它自动进入客户端。
规则模式决定“接管后走哪里”
规则模式可以把办公系统、家庭局域网、打印机、NAS 等地址设为直连,也可以把指定域名或目标地址交给代理。实际结果取决于规则顺序、DNS 返回结果、IPv4/IPv6 路由以及客户端实现。
哪些场景适合开启 TUN,哪些场景不必开
| 场景 | 建议 | 原因 |
|---|---|---|
| 只用浏览器访问网页 | 先用系统代理 | 配置更简单,出现问题时更容易回滚 |
| 浏览器正常,但命令行工具失败 | 考虑 TUN | 命令行程序可能没有读取系统代理 |
| 游戏、语音或其他 UDP 应用异常 | 先确认客户端支持 UDP,再考虑 TUN | TUN 能接管 IP 流量,但最终是否能代理 UDP 仍取决于客户端和出站协议 |
| 公司 VPN、虚拟机、容器同时运行 | 谨慎开启 | 多个虚拟接口和默认路由可能互相覆盖 |
| 需要访问 NAS、打印机或局域网设备 | 保留局域网排除规则 | 避免把本地网段错误送入代理或虚拟接口 |
| 手机上只希望部分应用使用连接 | 优先使用客户端的应用分流 | Android 的 VPN 接口由系统管理,应用排除或包含规则应以客户端当前界面为准 |
Apple 的网络扩展支持指定进入隧道和排除在隧道外的目标网络;Android 的 VpnService 也通过路由和接口参数决定哪些流量进入 VPN。因此,“TUN 是否全局”不能脱离具体系统和客户端设置回答。Apple VPN 流量路由文档 Android VPN 开发文档
开启 TUN 前后的最短操作流程
- 先备份配置:复制当前配置文件或记录系统代理、DNS、路由和局域网设置。不要把真实订阅链接、令牌或密钥粘贴到公开页面、在线解析器或截图中。
- 确认客户端来源和权限:使用客户端当前版本的帮助页面或发行说明,确认 TUN 所需的虚拟网卡、网络扩展、VPN 权限或管理员权限。不同系统的按钮名称会变化,以当前界面为准。
- 先关闭其他接管工具:暂时停用其他 VPN、网络加速器、虚拟机网络、容器网络或第二个代理客户端,避免多个程序同时修改默认路由。
- 只打开最小范围:先启用 TUN 和自动路由,不要同时修改 MTU、DNS、严格路由、Fake-IP 或大量规则。先验证基本连接,再逐项增加设置。
- 保留局域网排除:至少测试家庭网关、NAS、打印机或公司内网;如果无法访问,再检查 RFC1918 私有地址、IPv6 私有地址和客户端的局域网绕过选项。
- 验证四类流量:分别测试浏览器、命令行、一个 UDP 应用和局域网设备。只测试浏览器成功,不能证明 TUN 已经覆盖全部应用。
- 出现断网立即回滚:关闭 TUN,恢复原系统代理和 DNS;必要时禁用并重新启用网络适配器或重启客户端,再按单变量顺序排查。
预期结果:系统中出现客户端创建的虚拟接口,目标应用的连接状态发生变化,且局域网和普通网页仍按预期访问。若开启后全网断开,优先检查权限、默认路由、DNS 接管和其他虚拟网卡,不要一开始就修改 MTU。
常见问题分流:DNS、断网和局域网冲突
- 浏览器能用但命令行仍失败:确认命令行程序是否已被 TUN 路由接管,再检查规则是否将目标地址设为直连;不要只看系统代理开关。
- 开启后网页打不开:先关闭 TUN 验证原网络,再重新开启并检查虚拟接口、默认路由和 DNS。若只有域名打不开而 IP 可达,优先查 DNS 模式和 DNS 拦截。
- 能上网但 NAS 或打印机消失:检查局域网排除地址和规则顺序。Mihomo 文档明确将
route-exclude-address作为排除路由配置项,但具体网段应按你的局域网实际地址填写。Mihomo TUN 字段说明 - 公司 VPN 连接失败:先关闭 TUN 测试公司 VPN,再确认两者是否都在写入默认路由或 DNS。公司设备还可能受管理员策略限制,不要擅自改动安全策略。
- IPv6 表现异常:分别测试 IPv4 和 IPv6;如果客户端只配置了 IPv4 路由,IPv6 可能走另一条接口。不要仅凭一个测速或网页结果判断是否存在泄露。
- MTU 是否需要修改:MTU 是单个链路可承载的数据包大小。除非出现特定的分片、握手或大型请求异常,否则先保留客户端默认值;修改后必须复测网页、下载、视频会议和局域网访问。
如何判断 TUN 是否真的生效
- 查看系统网络接口列表,确认客户端启动后新增或启用了虚拟接口。
- 查看路由表,确认目标流量是否指向该接口,而不是只看客户端界面上的“已连接”。Windows、macOS、Linux 和 Android 的查看入口不同,应以当前系统命令或客户端日志为准。
- 分别测试系统代理敏感应用和不读取系统代理的应用,比较开启前后的差异。
- 检查局域网地址、IPv4、IPv6 和 DNS。DNS 是否被接管要看客户端日志、系统 DNS 状态及实际请求路径,不能只凭浏览器页面判断。
- 关闭 TUN 后复测同一组目标。如果问题随 TUN 开关出现,才说明排查范围集中在虚拟接口、路由、DNS 或规则层。
如果你需要进一步处理某个客户端的实际报错,应把问题拆成“权限与接口—路由—DNS—规则—出站连接”几层,不要同时更换客户端、节点、协议和 MTU,否则无法判断是哪一步产生了变化。
本文结论
TUN 模式的核心价值,是让更多不遵守系统代理的 IP 流量进入客户端处理;它不等于全局代理,也不自动决定哪些流量最终走代理。最稳妥的做法是先判断应用是否真的需要网络层接管,再以最小配置开启,保留局域网排除,逐项验证 DNS、IPv4/IPv6、UDP 和其他虚拟网络的兼容性。
本文为第三方使用指南,资料核验日期为 2026 年 11 月 2 日;客户端菜单、字段和权限可能随版本变化,请以当前客户端及操作系统资料为准。
常见问题
TUN 模式是不是全局代理?
不是。TUN 负责通过虚拟接口和路由接管流量,全局模式负责处理策略;最终是否代理还取决于规则、路由、DNS 和客户端配置。
只用浏览器上网,需要开启 TUN 吗?
通常不需要。浏览器一般可以使用系统代理,只有当命令行、后台程序、游戏或其他应用不遵守系统代理时,才考虑 TUN。
开启 TUN 后会不会 DNS 泄露?
有可能,取决于 DNS 模式、路由、严格路由和系统行为。应检查客户端文档、系统 DNS 状态和实际请求路径,不能仅凭 TUN 已开启来判断。
TUN 开启后为什么 NAS 或打印机访问不了?
常见原因是局域网网段被错误送入虚拟接口或代理。检查规则中的局域网排除地址,并确认其他 VPN、虚拟机或容器没有覆盖路由。
TUN 和系统代理能同时开启吗?
可以,但不一定有必要。部分客户端会让 TUN 负责流量接管、系统代理负责兼容特定应用;如果出现端口、DNS 或路由冲突,应先保留一种接管方式测试。
相关阅读
参考资料
- Linux Kernel Documentation:Universal TUN/TAP device driver
- Android Developers:VpnService API reference
- Android Developers:VPN connectivity
- Apple Developer Documentation:NEPacketTunnelProvider
- Apple Developer Documentation:Routing your VPN network traffic
- Microsoft Learn:VPN routing decisions
- sing-box Documentation:Tun inbound
- Mihomo Documentation:Tun