深度评测

macOS 代理工具常见问题排查手册:连不上、速度慢、DNS 泄漏

整理了 macOS 代理工具最常见的 10 类问题及解决方案,包括连接失败、速度慢、DNS 泄漏、证书错误等,一文解决 90% 的故障。

大家好,我是阿明。

在 macOS 上使用代理工具(如 ClashX、Surge、Shadowsocks 等)已经成为很多开发者、设计师和重度互联网用户的日常。虽然这些工具能帮我们访问更广阔的网络空间,但由于 macOS 系统架构的复杂性、网络环境的多变性以及工具本身的配置门槛,大家经常会遇到各种各样的“玄学”问题。

今天,我把自己多年折腾 macOS 网络的经验总结成这篇排查手册。如果你正遇到代理失效、网页打不开或者速度慢如蜗牛的情况,希望这篇文章能帮你一站式解决。

建议大家首选 ClashX 作为主力客户端,它的稳定性和 macOS 系统的兼容性经过了长时间验证,很多本文提到的底层配置问题在 ClashX 中都有更直观的解决方式。


1. 连接超时/节点不通

这是最基础也最常见的问题。现象通常是浏览器显示“连接超时”或“连接已重置”。

深度排查:

  1. 检查订阅更新:很多时候是因为节点服务器地址发生了变更,或者你的套餐流量耗尽。在客户端中点击“更新订阅”,确保获取的是最新的服务器列表。如果更新订阅都失败了,那说明你的本地网络连不上机场的订阅服务器,这时建议先关掉代理,换个网络环境(比如手机热点)试试。
  2. Ping 测速:在 ClashX 或其他工具中运行延迟测试。如果所有节点都显示 Timeout(超时),那大概率是你的本地网络或者订阅连接本身有问题。注意,有些节点可能禁用了 ICMP 协议(即无法 Ping 通),但实际是可以连接的,所以最好用 TCP 或连接测试来判断。
  3. 更换节点:如果只有一个节点不通,那是单点故障;如果全都不通,请检查你的基础宽带是否正常。有时候重启一下光猫或者路由器能解决 50% 的断连问题。
  4. 时间同步:这是很多新手会忽略的一点。代理协议通常依赖于严格的时间校验(如 VMess 协议),如果你的 macOS 系统时间与标准时间误差超过 90 秒,连接会直接被服务器拒绝。请前往“系统设置 -> 日期与时间”,确保“自动设置日期与时间”已开启。如果你发现时间总是对不上,可能需要更换 NTP 服务器,比如改为 time.apple.com 或者阿里云的 NTP 服务器。

2. 系统代理没生效

有时候代理软件显示“已连接”,节点测速也正常,但浏览器依然无法加载目标网页,甚至显示的依然是你的真实 IP。

详细步骤:

  1. 检查系统偏好设置
    • 打开“系统设置 -> 网络 -> (当前连接的 Wi-Fi 或以太网) -> 详细信息 -> 代理”。
    • 检查“网页代理 (HTTP)”和“安全网页代理 (HTTPS)”是否已勾选。
    • 通常代理工具会自动修改这里。如果发现没勾选,手动勾选后填入正确的本地监听端口(Clash 默认通常是 7890)。如果勾选了但总是被系统自动取消,说明有其他软件在篡改你的网络配置。
  2. 第三方拦截软件:检查是否有其他防火墙或安全软件(如 Little Snitch 或 Hands Off!)拦截了代理客户端的网络连接。如果你安装了这些监控软件,务必给代理客户端(如 ClashX)放行所有的出站流量。
  3. 重新启动系统代理开关:在 ClashX 菜单中关闭“设置为系统代理”再重新打开,强制系统重载配置。在 macOS 13 (Ventura) 及以后版本,这个过程可能会因为权限问题变得迟钝,多试几次。

3. 某些应用不走代理

明明浏览器能看 YouTube,但 Terminal(终端)或者某些 Electron 应用(如 VS Code 插件更新、Slack 等)却死活连不上网。

核心解决方案:

  1. 终端 (Terminal/iTerm2): macOS 终端默认是不走系统代理的。你需要手动在 shell 配置文件(如 .zshrc.bash_profile)中添加以下命令:
    # 临时生效
    export https_proxy=http://127.0.0.1:7890
    export http_proxy=http://127.0.0.1:7890
    
    # 永久生效建议在 .zshrc 里写个 alias
    alias proxy='export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890'
    alias unproxy='unset https_proxy http_proxy'
    
    添加后执行 source ~/.zshrc 生效。
  2. Electron 应用: 部分应用有独立的网络配置。例如 VS Code,你可以在设置中搜索 proxy 并填入 http://127.0.0.1:7890。有些应用甚至完全忽略系统代理,这种情况下你只能靠“暴力手段”。
  3. 增强模式 (TUN 模式): 如果你希望全系统所有流量(包括那些不支持代理设置的 App、游戏、甚至是终端)都通过代理,推荐在 ClashX Pro 中开启 Enhanced Mode (TUN)。它会创建一个虚拟网卡,强制接管系统内核级的流量。这是解决“顽固 App”的最佳方案。

4. 速度慢:节点延迟 vs 带宽

延迟(Ping 值)和带宽(下载速度)是两个完全不同的物理指标。

优化思路:

  1. 区分需求:如果你是在线看 4K 视频,你应该选带宽大的节点(通常是标注了 BGP 或专线的节点);如果你是玩游戏或远程桌面,你应该选 Ping 值低的节点(最好低于 50ms)。
  2. 测速工具:不要只看软件里的数字,那是瞬间的握手延迟。实际速度请使用 Speedtest.net。如果你发现测速很快但打开网页慢,那可能是 DNS 解析延迟太高或者浏览器缓存的问题。
  3. 协议建议:在弱网环境下(如酒店 Wi-Fi 或移动 4G),传统的 TLS 协议可能因为多次握手而显得缓慢。此时可以尝试使用 Hysteria2 或 TUIC 等基于 UDP 的协议,它们在丢包较高的环境下表现更好。
  4. MTU 调优:如果你使用 TUN 模式感到明显的网页加载“卡顿”(图片加载一半就停了),可能是 MTU(最大传输单元)设置过大导致拆包。在配置文件中尝试将 mtu 设置为 1400 或更小,这能显著改善某些网络环境下的吞吐量。

5. DNS 泄漏:保护你的数字足迹

DNS 泄漏是指你的域名解析请求没有走代理通道,而是直接通过本地运营商 (ISP) 的 DNS 服务器发出的。

风险点:

  • 隐私曝光:即使你的实际访问内容被加密了,运营商依然知道你访问了哪些网站。
  • 连接被劫持:如果运营商的 DNS 返回了一个错误(污染)的 IP,你的代理软件会顺着这个错误的 IP 去连接,自然导致访问失败。

如何排查与解决:

  1. 深度检测:访问 dnsleaktest.com 点击 Standard Test。如果你人在北京,结果里却出现了“China Telecom”,那就说明泄漏了。
  2. Fake-IP 模式:这是目前 macOS 上最主流的解决办法。在 Clash 配置中开启 enhanced-mode: fake-ip。它会拦截系统的 DNS 请求并返回一个假的内网 IP(如 198.18.x.x),等流量进入代理软件后,软件再在远程节点上进行真实的 DNS 解析。
  3. 配置加密 DNS:不要使用系统默认的 DNS。在代理工具里配置 DNS Over HTTPS (DoH) 或 DNS Over TLS (DoT)。例如:https://1.1.1.1/dns-query

6. 证书错误:MITM 的门槛

当你尝试去广告、破解某些 App 的 VIP 权限或进行网络抓包时,通常需要开启 MITM(中间人攻击)。

必做步骤:

  1. 安装证书:在代理软件设置中生成一个自签名的 CA 证书,并保存到本地。
  2. 信任证书:这一步最关键。打开 macOS 的“钥匙串访问 (Keychain Access)”,在“登录”或“系统”分类下找到你刚才导入的证书。双击它,展开“信任”选项,将“使用此证书时”改为“始终信任”。如果不改,浏览器会报错 NET::ERR_CERT_AUTHORITY_INVALID
  3. 注意隐私:开启 MITM 意味着你的所有加密流量(包括银行、支付等)都可以被代理软件查看。如果你不是专业开发者,强烈建议平时关闭此功能

7. 规则不生效

“明明设置了国内流量直连,结果看视频还是走代理,导致加载很慢。”

逻辑分析:

  1. 顺序至上:代理规则是从上到下逐条匹配的。如果你把 MATCH, Proxy 放在了最前面,那后面的所有直连规则都会失效。务必确保 DIRECT(直连)规则排在前面,最后才是兜底的 MATCH 规则。
  2. 日志排查:在 ClashX 的控制台中,可以看到每一个请求的具体走向。如果你发现访问 baidu.com 命中了 Proxy,你就该检查你的规则集(Rule Set)是否包含了错误的关键词,或者 GeoIP 数据库是否过时。
  3. 关键词匹配 vs 全域名匹配DOMAIN-KEYWORD, google 会匹配所有包含 google 的域名,这有时会误伤。建议尽量使用 DOMAIN-SUFFIX(后缀匹配)。

8. 开机后代理失效

很多用户反馈 Mac 重启后就上不了网,必须要手动点一下软件才行。

排查方案:

  1. 自动启动:在软件设置里勾选“开机启动”。如果无效,手动去“系统设置 -> 通用 -> 登录项”检查是否被系统禁用了。
  2. 清理残留代理:如果在关机时代理软件崩溃了,它可能没来得及把系统的代理设置改回来。此时系统依然在尝试连接 127.0.0.1:7890,但代理软件还没运行,导致全系统断网。这种情况下,你需要手动进入网络设置,把代理选项全部勾掉。
  3. 网络位置切换:如果你经常在公司和家之间切换,macOS 的“网络位置”功能可能会导致设置不同步。建议固定使用一个网络位置。

9. macOS 更新后失效

苹果每次大版本更新(如从 Sonoma 到下一代系统)都会对网络底层和权限管理动刀。

应对策略:

  1. 重新授权内核扩展/帮助程序:很多代理软件依赖一个“Helper”进程来修改系统设置。系统更新后,这些进程的权限往往会被撤回。在软件菜单里找到“安装帮助程序”重新点一下即可。
  2. 重置网络堆栈:如果升级后网络完全无法访问,尝试在终端输入:
    sudo networksetup -setwebproxy "Wi-Fi" "" 0
    sudo networksetup -setsecurewebproxy "Wi-Fi" "" 0
    
    这能强制清空当前网卡的代理设置。
  3. 版本匹配:老版本的 ClashX 或是 Surge 往往不兼容新系统的 API,及时去官网下载最新测试版。

10. 多个代理工具冲突

如果你是个“工具控”,装了 ClashX 又装了 Surge,甚至还有一堆公司用的 VPN(如 Cisco AnyConnect)。

冲突预防:

  1. 端口分配:这是最常见的冲突。Clash 用了 7890,Surge 如果也想用 7890,就会有一个软件启动失败。给每个工具分配独立的端口(比如 7890, 8888, 6152)。
  2. 系统代理争夺战:千万不要同时开启两个软件的“设置为系统代理”。这会导致系统注册表里的代理地址跳来跳去,最终谁都连不上。
  3. 虚拟网卡冲突:如果你开了 VPN 又开了 Clash 的 TUN 模式,两套虚拟网卡逻辑会产生路由冲突。在这种情况下,建议将 Clash 设置为“规则模式”而非“全局模式”,并让 VPN 流量通过 Clash 的 SKIP-PROXY 排除。

阿明的“三板斧”通用调试流程

如果你试了所有的细节还是解决不了,别慌,试试这套终极流程:

  1. 杀进程:打开“活动监视器”,搜索所有带代理名字的进程,全部强制退出。
  2. 还原网络:在“系统设置 -> 网络”里手动把所有代理开关关掉。
  3. 清缓存:在终端输入 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder 清理系统 DNS 缓存。
  4. 重启大法:重启 Mac 和你的路由器。

结语

折腾代理工具本质上是在研究网络协议和 macOS 的底层原理。虽然过程有时很痛苦,但一旦搞定,那种如丝般顺滑的上网体验是值得的。

如果你追求稳定和省心,我个人最推荐的方案依然是 ClashX + 优秀的规则集。它足够简单,却又在控制台和日志方面给了进阶用户足够的权限。

如果你在排查过程中发现了什么新奇的问题,欢迎在评论区留言交流。我是阿明,咱们下期教程见!


(本文由阿明原创,首发于 MacProxyHub,转载请注明出处)