客户端问题 · 故障排查

TUN 模式开启失败怎么解决

作者:机场a 编辑部 更新: 阅读约 3 分钟

TUN 模式开启失败,最常见的原因是客户端没有足够的系统权限(没装服务模式,也没以管理员身份运行),其次是与其他 VPN 或虚拟网卡冲突。最快的办法是:在客户端里安装并启用「服务模式」,退出其他 VPN 和加速器后再开启 TUN。

问题表现

  • 点击 TUN 开关后自动弹回关闭,或提示「权限不足」「需要服务模式」;
  • 日志出现 configure tun interface: Access is denied、operation not permitted 等错误;
  • TUN 显示已开启,但所有网站都打不开,或只有部分软件能上网;
  • 开启 TUN 后局域网里的打印机、NAS 等设备无法访问。

TUN 模式需要什么条件

TUN 模式会在系统中创建一块虚拟网卡并修改路由表,从而接管所有程序的流量,因此需要系统级权限:

系统 常见要求
Windows 管理员权限或客户端的服务模式;Wintun 虚拟网卡驱动
macOS 客户端的服务模式或辅助程序授权(需输入一次系统密码)
Linux root 权限,或为内核程序授予 CAP_NET_ADMIN 能力
Android / iOS 通过系统 VPN 接口实现,首次需允许添加 VPN 配置

TUN 的原理与适用场景见《TUN 模式详解》。

可能原因与对应处理

原因 典型表现 处理方法
未安装或未启用服务模式 开关自动弹回、提示权限不足 安装服务模式或以管理员身份运行
其他 VPN / 加速器冲突 开启成功但无法上网、路由混乱 退出其他 VPN 工具
虚拟网卡驱动异常 日志提示创建设备失败 重装客户端、检查安全软件
DNS 未劫持 能连 IP 但域名解析失败 开启 DNS 劫持和内置 DNS
协议栈不兼容 部分程序不通或频繁断流 切换 stack

排查方法

  1. 查看日志:TUN 失败时日志通常写明是权限、设备创建失败还是路由冲突。
  2. 检查服务模式:在 Clash Verge Rev 设置中确认「服务模式」显示已安装并启用。
  3. 检查其他虚拟网卡:Windows 在 PowerShell 中列出所有网卡,留意多余的 TAP、Wintun、WireGuard 网卡;macOS 查看 utun 虚拟接口;Linux 查看接口和默认路由。
Get-NetAdapter | Select-Object Name, InterfaceDescription, Status
ifconfig | grep utun
ip link show
ip route show default
  1. 检查安全软件:查看是否拦截了驱动安装或服务启动。
  2. 确认 DNS 设置:TUN 下一般需要让 DNS 请求进入内核,例如 mihomo 配置里的 tun.dns-hijack 设为 any:53,同时开启 dns.enable。

解决步骤

Windows

  1. 在客户端中点击「安装服务模式」,按提示授权,完成后启用服务模式;
  2. 不使用服务模式时,右键客户端选择「以管理员身份运行」;
  3. 重新开启 TUN,如果失败,可在 tun.stack 的 system、gvisor、mixed 之间切换再试;
  4. 驱动异常时,卸载并重装最新版客户端以重新安装 Wintun。

macOS

  1. 在客户端中安装服务模式或辅助程序,按提示输入系统密码;
  2. 系统提示「后台项目已添加」或要求在「隐私与安全性」中允许时,选择允许;
  3. 在「系统设置 → VPN」中断开其他已连接的配置后,重新开启 TUN。

Linux

  1. 以 root 运行内核,或为内核文件授予网络能力(路径换成实际位置):
sudo setcap cap_net_admin,cap_net_bind_service=+ep /usr/local/bin/mihomo
  1. 确认系统存在 /dev/net/tun,不存在时执行 sudo modprobe tun。

通用

  • mihomo 内核一般同时开启 tun.auto-route 和 tun.auto-detect-interface;tun.strict-route 会更严格地防止流量绕过 TUN,但可能导致局域网访问异常,出问题时可先关闭。
  • 局域网设备无法访问时,让 192.168.0.0/16、10.0.0.0/8 等私有网段走直连,或在 tun.route-exclude-address 中排除。
  • 开启客户端 DNS 后若出现部分网站或游戏异常,可能与 fake-ip 有关,参见《DNS 设置教程》和《代理 DNS 问题》。

验证结果

  1. TUN 开关保持开启,日志中没有报错;
  2. 在没有设置代理环境变量的终端执行下面的命令能返回状态码(Windows PowerShell 写成 curl.exe):
curl -I https://www.google.com
  1. 客户端连接页能看到非浏览器程序的连接。

其他方案

TUN 始终无法稳定运行时,可以先使用系统代理模式(参见《系统代理错误》),只为个别程序单独配置代理。也可以把代理部署在路由器上,参考《路由器使用机场教程》。如果连内核都启动不了,先处理《客户端无法启动》。TUN 开启失败属于本地软件与系统问题,通常不需要联系机场客服。

常见问题

开了 TUN 还需要开系统代理吗?

不需要。TUN 已经接管了所有程序的流量,系统代理可开可不开。两者同时开启时,确保系统代理端口与客户端设置一致即可。

TUN 开启后国内网站变慢或打不开?

多半是规则或 DNS 设置问题,国内域名被解析到了远端或走了代理。检查分流规则中国内域名和 IP 是否走直连,并确认 dns.nameserver 使用了可用的国内 DNS。

协议栈选 system 还是 gvisor?

system 使用系统网络栈,性能通常较好;gvisor 在用户态处理,兼容性更好但开销更高;mixed 是两者结合。哪个能稳定工作就用哪个,没有绝对优劣。

公司 VPN 和 TUN 能一起用吗?

两者都会修改路由表,同时运行很容易冲突。建议用时只开一个,或者在规则里把公司内网网段设为直连,并只在需要时连接公司 VPN。

相关阅读

按 ⌘K / Ctrl+K 打开搜索