Clash TUN 模式与系统代理的区别:流量接管范围和适用场景
解释系统代理依赖应用遵守代理设置、TUN 虚拟网卡在网络层接管全部流量的原理差异,以及游戏、命令行、UWP 应用该选哪一种。
先选接管方式,再检查分流规则
浏览器日常访问先用系统代理;应用不读取代理设置、需要接管 UDP,或希望统一处理多类应用时,再考虑 TUN 模式。两者解决的是“流量怎样进入内核”,并不直接决定流量最终直连还是走节点。
使用 mihomo 内核时,可以把一次连接拆成三步:先进入代理端口或 TUN 虚拟网卡,再匹配规则,最后交给直连出口或某个代理节点。入口、规则和出口是三个独立环节。只切换入口,不一定改变规则命中结果。
“接管全部流量”是对 TUN 使用目标的概括,不是无条件保证。路由排除、其他虚拟网卡、IPv6 配置、应用绑定网卡以及客户端实现,都可能影响实际覆盖范围。节点自身连接还需要正确绕过 TUN,避免形成回环。
系统代理:应用主动连接本地代理端口
系统代理怎样工作
开启客户端的“系统代理”后,客户端通常会修改操作系统的代理设置,指向本机监听地址,例如 127.0.0.1:7890。读取这套设置的应用会把请求交给该地址;忽略设置的应用仍按原来的网络路径连接。
7890 在本文中只是配置示例,不是所有客户端的固定端口。先到客户端设置页核对“混合端口”或“HTTP 端口”。如果页面显示其他值,命令和应用代理设置也必须同步替换。不要把控制接口端口当作代理端口。
- 浏览器:通常可以读取系统代理,但浏览器内的单独代理设置可能覆盖系统设置。
- 命令行工具:不保证读取桌面系统代理,可能需要代理参数或环境变量。
- 游戏与实时通信:原生 UDP 通信通常不会因为打开 HTTP 系统代理就自动进入内核。
- 自行实现网络连接的应用:可能绕过系统代理,也可能只让登录页面走代理,主连接仍然直连。
用显式代理确认端口可用
下面的命令明确要求请求经过本地 HTTP 代理。Windows 终端可使用 curl.exe,避免部分终端环境中的同名命令产生歧义;其他系统通常使用 curl。
curl --head --proxy http://127.0.0.1:7890 https://clash67.com/
执行后查看客户端连接记录。能看到目标域名和规则命中,才说明该请求确实进入内核。返回状态码只反映该站点当时的响应,不能证明所有网站都可访问;这个测试也不能证明系统代理开关已经正确写入操作系统,因为命令已经显式指定了代理。
TUN 模式:通过虚拟网卡和路由接管连接
TUN 是三层虚拟网络接口。客户端创建接口并配置路由后,符合路由条件的 IP 数据包进入内核处理。应用不必主动理解 HTTP 或 SOCKS 代理,因此 TUN 更适合覆盖不遵守系统代理设置的程序。
这种接管通常需要更高的系统权限。桌面客户端可能通过后台服务或提权进程设置网卡与路由;安卓客户端常通过系统 VPN 授权接管选定应用的流量。不同平台的实现和开关名称并不完全相同,不能把桌面端参数机械地套到手机上。
mihomo 的 TUN 配置示例
以下片段展示常见入口参数,不包含节点、策略组和完整 DNS 配置。把它与当前有效配置合并,而不是直接替换整份订阅。若已有 tun 或其他同名顶层键,应修改原有字段,避免重复定义。
mixed-port: 7890
allow-lan: false
mode: rule
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
mixed-port:同一端口接受 HTTP 和 SOCKS 代理连接;启用 TUN 后仍可保留这个入口。allow-lan: false:不向局域网开放代理服务;本机使用 TUN 不需要因此开启局域网访问。stack: mixed:选择 mihomo 支持的混合协议栈,不表示“同时开启系统代理”。实际可用性以客户端所带内核为准。auto-route:让内核自动配置相关路由。仅创建虚拟网卡而没有正确路由,仍可能接不到目标流量。auto-detect-interface:自动检测出站接口。多网卡环境仍需检查日志和实际选中的出口。dns-hijack:接管匹配的传统 DNS 请求。这里包含 UDP 53 和 TCP 53,不会直接解密应用内的加密 DNS。
系统代理与 TUN 的适用场景对比
| 使用场景 | 优先方式 | 需要检查 |
|---|---|---|
| 浏览器访问网页 | 系统代理 | 浏览器是否跟随系统设置,是否存在独立代理配置 |
| 临时命令行请求 | 显式代理参数 | 工具支持的参数、实际端口及环境变量 |
| 多个不读代理设置的工具 | TUN | 路由是否生效,进程或域名规则是否命中 |
| 使用 UDP 的游戏 | TUN | 节点和服务端是否支持 UDP,是否误命中直连 |
| UWP 应用 | 先测试系统代理,再考虑 TUN | 应用网络实现、回环限制与系统策略 |
| 单位内网与其他隧道并用 | 先用系统代理 | 内网路由、专用 DNS、其他虚拟接口的优先级 |
游戏:接管 UDP 不代表节点支持 UDP
TUN 可以让游戏数据进入内核,但出口仍必须支持相应传输。若节点或服务端不支持 UDP,切换 TUN 不能补齐这项能力。先在连接面板查找游戏连接,确认网络类型、目标地址、命中规则和所选节点,再判断问题位于入口还是出口。
游戏启动器、登录服务和对局连接可能使用不同域名与地址。登录成功不能证明对局流量已走代理。也不要仅凭一次延迟测试断言 TUN 更快;延迟还取决于网络路径、节点负载和目标服务器位置。
命令行:单个工具优先显式配置
只运行一个支持代理参数的工具时,显式配置通常更容易追踪,也不会改变其他应用的路径。HTTP_PROXY、HTTPS_PROXY 和 ALL_PROXY 是否生效,由工具实现决定;变量名包含 HTTPS,也不意味着变量值必须使用 HTTPS 代理协议。
UWP:区分代理限制和沙箱回环限制
部分 UWP 应用访问本机代理时可能受回环限制影响。这与节点是否可用不是同一问题。若系统代理下无法连接,可以先用浏览器确认本地端口正常,再查看应用是否需要针对自身的回环授权,或改用 TUN 验证。不要为排查单个应用一次性放开所有应用的权限。
DNS 与 Fake-IP:TUN 能连接但打不开域名时先查这里
TUN 接管的是连接,DNS 负责把域名转换成可连接的地址。两条链路需要配合。典型症状是:开启后浏览器一直等待,日志出现解析超时,或同一域名在不同应用中表现不一致。此时继续切换节点,未必能解决入口 DNS 的问题。
- 确认 DNS 模块启用:检查当前运行配置中的
dns.enable,以及客户端是否通过自己的设置生成 DNS 配置。 - 检查端口 53 的接管:传统 DNS 通常使用 UDP 53,也可能使用 TCP 53;只检查其中一种不够完整。
- 识别应用内加密 DNS:应用通过 HTTPS 或 TLS 发送解析请求时,不会简单命中端口 53 的劫持设置。
- 检查解析上游可达性:确认 DNS 上游本身可以连接,避免上游依赖尚未建立的代理连接而形成循环依赖。
Fake-IP 会给符合条件的域名返回合成地址,由内核维护域名与地址之间的映射。常见示例地址池是 198.18.0.1/16。看到这类解析结果不一定是故障,但相关连接必须按预期回到内核,才能正确恢复目标。
关闭 TUN 后,如果应用仍缓存着合成地址,可能出现暂时无法访问。先重新建立应用连接,再按系统方式清理 DNS 缓存;Windows 可在终端执行 ipconfig /flushdns。浏览器自己的解析缓存可能需要另外清理。遇到局域网发现、设备管理或特定内网域名问题,应按实际需求检查 Fake-IP 过滤和直连解析策略,而不是把所有域名都加入过滤列表。
按四步验证:入口、规则、出口、回退
-
先建立可用基线。
关闭 TUN,确认订阅已启用,选择一个可用节点,用显式代理命令测试本地端口。在客户端连接面板记录目标域名、命中规则和策略组。基线不可用时,先处理订阅、端口或节点,不要叠加 TUN 排查。
-
单独验证 TUN 接管。
开启必要的服务或系统授权,启用 TUN,临时关闭系统代理,并确认测试工具没有继承代理环境变量。可执行
curl --head --noproxy "*" https://clash67.com/,再观察连接记录。这里的--noproxy "*"只是让 curl 不使用显式代理,不能绕过操作系统的 TUN 路由。 -
核对规则和出口。
找到刚才的请求,检查它是否命中预期规则,以及最终使用的是直连还是代理节点。能打开网页只能说明连接成功;若目标本来就能直连,单看页面结果无法证明代理出口生效。
-
测试回退和特殊网络。
关闭 TUN 后重新连接,确认普通网络恢复。再测试局域网设备、单位内网、IPv6 目标和游戏 UDP。每次只改一个选项,记录修改前后的差异,避免同时调整 DNS、路由和策略组后无法归因。
常见问题:双开、断网与局域网访问
系统代理和 TUN 可以同时开启吗?
可以,两个入口在不少客户端中能够共存。但同时开启会让排查更复杂:某个应用可能通过代理端口进入,另一个应用通过 TUN 进入。首次配置时建议分别验证,再决定是否保留双开。双开本身不会自动提高速度,也不能替代正确的出口路由。
开启 TUN 后全部断网,应该先关哪项?
先关闭 TUN,确认普通网络是否恢复。若恢复,依次检查服务权限、默认出口、DNS 和其他隧道冲突。重启客户端后观察是否创建虚拟接口以及路由添加是否报错。不要先关闭系统防火墙;应按日志定位需要放行的程序与连接。
TUN 会把局域网设备的流量也代理出去吗?
不一定。局域网连接是否进入 TUN、进入后是否直连,取决于路由和规则。测试设备实际地址,例如 192.168.1.1,并检查命中结果。需要直连时同时核对路由排除和规则,避免误把局域网管理页面交给远端节点。
电脑开启 TUN 后,手机会自动共用代理吗?
不会。电脑本机的 TUN 并不自动把电脑变成局域网网关。手机需要单独设置代理,或使用经过正确配置的网关方案。让手机连接电脑的代理端口,还涉及监听地址、局域网授权和防火墙规则,与本机 TUN 是不同事项。
IPv4 正常但某些应用仍然绕过代理怎么办?
检查这些连接是否使用 IPv6,并核对客户端的 IPv6、DNS 返回结果及 TUN 路由设置。只验证 IPv4 不能代表两种地址族都被接管。还应检查应用是否绑定了特定网卡,或被客户端的应用排除设置绕过。
最终选择以可验证的连接记录为准。系统代理满足需求时就保留简单入口;需要覆盖更多应用时启用 TUN,并逐项确认权限、路由、DNS 和 UDP 出口。关于内核与规则字段,可继续查阅本站协议参考中的 mihomo 内核说明。