先分清三类授权:系统代理、辅助服务与网络扩展
macOS 客户端里的「设置为系统代理」「安装服务模式」「启用 TUN」不是同一个开关。它们调用的系统能力不同,出现的弹窗也不同。把三者混在一起处理,常见结果是已经批准了网络扩展,却仍然无法修改代理;或者系统代理已经生效,又重复安装 TUN 服务。
| 功能 | 系统动作 | 常见授权 | 适用范围 |
|---|---|---|---|
| 系统代理 | 写入 HTTP、HTTPS 与 SOCKS 代理 | 可能要求管理员密码或辅助服务权限 | 遵循 macOS 代理设置的应用 |
| 服务模式 | 安装高权限辅助进程 | 管理员账户密码 | 稳定修改系统代理、启动内核或接管网络 |
| TUN 模式 | 建立虚拟网络接口并调整路由 | VPN 配置、网络扩展或辅助服务授权 | 不读取系统代理的应用与部分命令行流量 |
| 钥匙串访问 | 读取已保存的令牌、订阅凭据或服务密钥 | 当前 macOS 登录密码 | 只对应弹窗中列出的钥匙串项目 |
以常见的 Clash Verge Rev 2.x、ClashX.Meta 1.4.x 与基于 mihomo 内核的 macOS 客户端为例,界面名称可能写成「系统代理」「Service Mode」「Clash Core」「TUN Mode」或「增强模式」。具体实现并不完全一致。安装时应按实际需要逐项开启,不必为了完成安装一次性批准全部功能。
首次启动的正确顺序
第一步:把应用放进“应用程序”目录
下载完成后打开 DMG,将客户端拖到「应用程序」,再从访达的「应用程序」目录启动。不要长期从 DMG 映像、下载目录或解压后的临时目录运行。应用路径变化会影响登录项、辅助服务和钥匙串访问控制,升级后反复弹窗经常与路径或代码签名变化有关。
- 在访达打开下载的 DMG 或压缩包。
- 将应用拖入「应用程序」。
- 弹出安装映像,关闭仍在运行的旧副本。
- 从「应用程序」中打开客户端。
- 确认菜单栏或程序坞中只有一个客户端实例。
如果 macOS 提示应用来自互联网,确认文件来源与应用名称后选择「打开」。若系统直接阻止启动,可进入「系统设置」→「隐私与安全性」,在安全区域找到刚才被阻止的应用并选择「仍要打开」。旧版 macOS 12 Monterey 对应路径是「系统偏好设置」→「安全性与隐私」→「通用」。
第二步:导入配置并确认本地端口
在客户端的「配置」或「Profiles」页面导入订阅,等待配置解析完成,再选择一个策略组节点。mihomo 配置中常见混合端口是 7890,SOCKS 端口可能是 7891,外部控制端口常见为 9090;这些只是常用默认值,应以当前配置和客户端设置页显示的数值为准。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
如果另一个代理工具已经监听 7890,Clash 内核通常会启动失败或连续重启。退出其他代理应用后,可在终端检查端口占用:
lsof -nP -iTCP:7890 -sTCP:LISTEN
lsof -nP -iTCP:9090 -sTCP:LISTEN
第三步:先开启系统代理
打开客户端中的「系统代理」开关。部分客户端第一次执行会请求安装辅助服务,并弹出管理员认证窗口。这里输入的是当前 Mac 管理员账户密码,不是 Apple ID 密码。输入时窗口通常不会显示字符数量,这是 macOS 权限验证的正常行为。
开启后可通过终端确认当前网络服务的代理状态。无线网络服务通常名为 Wi-Fi,部分旧系统或自定义环境可能显示其他名称:
networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
scutil --proxy
输出中的 Enabled: Yes、服务器地址 127.0.0.1 与客户端端口一致,说明系统代理已经写入。此时浏览器仍无法访问,应优先检查节点、规则和 DNS,而不是继续重复安装网络扩展。
macOS 12 至 macOS 15 的网络扩展放行路径
TUN 模式可能通过 Network Extension、Packet Tunnel Provider、系统扩展或高权限辅助进程实现。不同客户端、安装方式和 macOS 版本会呈现不同提示。只有在开启 TUN、增强模式或安装网络服务时出现系统通知,才需要进入对应页面批准。
macOS 15 Sequoia
macOS 15 将扩展管理入口集中到了「登录项与扩展」。收到“系统扩展已被阻止”或网络扩展请求后,先打开「系统设置」→「通用」→「登录项与扩展」,检查页面底部的「网络扩展」。找到与当前客户端开发者或应用名称一致的项目,打开开关并按提示认证。
如果出现“添加 VPN 配置”对话框,确认请求来自刚刚操作的 Clash 客户端后选择「允许」。完成后返回客户端,关闭再重新开启 TUN。部分版本需要完全退出客户端并重新启动,系统才会重新加载 Packet Tunnel Provider。
macOS 13 Ventura 与 macOS 14 Sonoma
在 Ventura 13.7 与 Sonoma 14.7 上,被拦截的系统软件通常会在「系统设置」→「隐私与安全性」页面下方显示。点击「允许」后输入管理员密码,再按系统提示重新打开客户端或重启 Mac。若页面没有按钮,不要持续点击客户端里的“安装”;先退出应用,重新触发一次 TUN 或服务安装请求,再立即查看「隐私与安全性」。
VPN 配置可在「系统设置」→「VPN」查看。若存在同一客户端留下的多个失效配置,先关闭 TUN,再删除明确属于旧版本的重复项,然后由当前版本重新创建。公司设备上的 VPN 项可能由移动设备管理配置下发,不应自行删除。
macOS 12 Monterey
Monterey 12.7 使用旧版「系统偏好设置」。进入「安全性与隐私」→「通用」,点击左下角锁形按钮并完成认证,再批准被阻止的系统软件。网络服务和 VPN 状态可在「系统偏好设置」→「网络」中检查。批准后如果提示重新启动,应保存工作并正常重启,不要强制结束系统设置进程。
钥匙串弹窗应该选择“允许”还是“始终允许”
钥匙串弹窗会明确列出请求访问的应用与项目名称。Clash 客户端可能用钥匙串保存订阅认证信息、控制器密钥、服务令牌或安全存储项。处理前先核对弹窗顶部的应用名称是否与刚启动的客户端一致,并确认弹窗是在导入订阅、安装服务或升级后首次启动时出现。
| 按钮 | 结果 | 建议场景 |
|---|---|---|
| 拒绝 | 本次不提供该钥匙串项目 | 应用名称、来源或请求时机无法确认 |
| 允许 | 仅批准本次读取 | 首次验证功能,暂不建立长期授权 |
| 始终允许 | 为当前应用身份保存访问权限 | 确认是固定安装路径中的可信客户端,且需要后台自动启动 |
如果客户端需要随登录自动启动,且每次启动都读取同一个服务密钥,选择「始终允许」可避免后台启动被弹窗阻塞。这里仍然需要输入当前 macOS 登录账户密码。Touch ID 是否可用取决于系统版本、钥匙串项目和认证策略,弹窗要求密码时应使用本机账户密码。
若仅选择「允许」,下一次应用重启时再次询问属于预期行为。若已经选择「始终允许」仍然每次弹出,重点检查应用是否仍从 DMG 运行、升级时是否更换了发行渠道,以及系统中是否同时保留两个同名客户端。钥匙串访问控制会识别应用签名;同名并不代表是同一个授权主体。
网络扩展授权失败后的重置步骤
先做最小化重试
- 关闭客户端中的 TUN、系统代理和开机启动。
- 从菜单栏选择「退出」,再打开“活动监视器”确认客户端进程已结束。
- 进入「系统设置」→「网络」→「VPN」,删除明确属于当前客户端且状态异常的旧配置。
- 在 macOS 15 的「通用」→「登录项与扩展」→「网络扩展」中关闭旧项目,再重新打开。
- 重新启动 Mac,从「应用程序」启动客户端。
- 先开启系统代理测试,再单独开启 TUN。
可以使用系统命令查看已注册的系统扩展。该列表用于确认扩展是否存在,不代表 Clash 流量一定已经通过:
systemextensionsctl list
scutil --nwi
ifconfig | grep -E "utun[0-9]"
看到 utun0、utun1 等接口也不能直接判定它属于 Clash,因为 iCloud Private Relay、企业 VPN 和其他网络软件都可能创建 utun。更可靠的方法是关闭 Clash TUN 前后对比接口、路由与客户端日志,并确认日志中没有 permission denied、operation not permitted 或 route setup failed。
再重装辅助服务
很多客户端在「设置」→「服务模式」或「设置」→「Clash Core」中提供卸载与重新安装入口。先执行卸载,完全退出客户端,重新打开后再安装。认证成功后,应回到客户端确认服务状态显示为运行,而不是只看管理员密码窗口是否消失。
不要从网上复制不明的 sudo rm 命令批量删除 LaunchDaemon、系统扩展或网络配置。不同客户端的 bundle identifier 和辅助服务名称不同,删错项目会影响其他 VPN。优先使用客户端自带卸载入口;客户端已无法启动时,再根据其项目文档核对准确服务名称。
钥匙串持续弹窗的安全重置办法
打开「应用程序」→「实用工具」→「钥匙串访问」,左侧选择「登录」钥匙串,再选「所有项目」。使用客户端名称、开发者名称或弹窗中显示的项目名搜索。双击目标项目,打开「访问控制」,可以看到哪些应用被允许访问。
- 记录弹窗显示的钥匙串项目全名。
- 退出 Clash 客户端及其菜单栏进程。
- 在“钥匙串访问”中只定位对应项目,不要删除整个“登录”钥匙串。
- 若访问列表指向旧路径,可移除旧应用条目并保存。
- 若项目明显属于已卸载的旧客户端,可删除该单项。
- 从「应用程序」重新启动当前客户端,让它重新创建或申请访问。
- 核对应用名称后选择「允许」;功能稳定后再决定是否使用「始终允许」。
删除订阅凭据类项目后,客户端可能要求重新登录或重新导入订阅。操作前应确认订阅链接仍可获取。不要删除证书、Wi-Fi 密码、浏览器安全存储或名称无法确认的通用密码项目。
授权完成后仍无法上网的检查顺序
网络扩展显示已启用,只说明 macOS 接受了扩展,不代表节点可用、规则正确或 DNS 已完成解析。建议严格按下面的顺序检查,避免把所有故障都归到系统权限。
- 内核状态:确认 mihomo 或 Clash Meta 内核处于运行状态,日志没有端口占用和配置解析错误。
- 订阅状态:手动更新配置,确认订阅未过期,策略组中已选择具体节点而非不可用的占位策略。
- 系统代理:使用
scutil --proxy检查地址和端口,确保与客户端的 mixed-port 一致。 - 运行模式:日常使用优先选择 Rule。Global 会让更多请求走单一策略,Direct 则不会按代理规则转发。
- DNS:检查配置中的 nameserver、fallback 或 fake-ip 设置。修改后重启内核,而不是只切换系统代理。
- TUN 冲突:退出其他 VPN、抓包工具和同类代理客户端,再单独开启 Clash TUN。
- 防火墙与过滤器:进入「系统设置」→「网络」→「VPN 与过滤器」,检查是否存在同时启用的内容过滤器。
系统代理测试正常而 TUN 打开后断网,故障通常集中在路由、DNS 劫持、MTU 或其他 VPN 冲突。可先关闭 TUN 的自动路由与 DNS 接管选项逐项测试。配置使用 Fake-IP 时,还要确认局域网设备、企业域名和本地域名是否需要加入 fake-ip-filter。不要在不了解规则含义时直接把所有域名改成直连。
反过来,如果 TUN 正常但浏览器在关闭 TUN 后无法访问,应检查系统代理是否真的写入。某些客户端的服务模式安装失败后,界面开关会短暂亮起,但系统代理没有变化。此时重新安装辅助服务,并再次用 networksetup 或 scutil 验证。
升级与卸载时避免权限残留
升级前先关闭系统代理和 TUN,再退出客户端。使用应用内更新时保持应用位于「应用程序」;手动替换时,应先退出旧版本,再用新版本覆盖,不要同时保留“客户端”“客户端 2”和下载目录副本。更换不同分支或发行版时,先导出本地配置,并使用旧客户端的服务卸载功能。
卸载应用图标不会自动清理系统代理。如果退出前系统代理仍指向 127.0.0.1:7890,删除客户端后浏览器可能无法联网。可在「系统设置」→「网络」→「Wi-Fi」→「详细信息」→「代理」中关闭网页代理、安全网页代理与 SOCKS 代理,也可以重新安装客户端、开启后再正常关闭系统代理。
完成卸载后,再检查「系统设置」→「通用」→「登录项与扩展」、「系统设置」→「网络」→「VPN」以及“钥匙串访问”。只清理能够确认属于旧客户端的项目。准备继续使用同一客户端时,不必为了升级删除全部配置,保留订阅与规则文件通常更稳妥。