在 macOS 上,Surge 的 UI 交互、Dashboard 抓包和基于 SSID 的策略切换确实好用。但它的一个痛点是协议支持太保守,目前仍不支持 VLESS (Vision/Reality) 或 Hysteria2 等协议。
如果你手头有这些高性能节点,又不想放弃 Surge 的体验,最直接的办法就是用 sing-box 做后端转发。
方案逻辑
Surge 负责策略控制(分流规则、SSID 切换、抓包),sing-box 负责底层传输。Surge 将流量通过 SOCKS5 转发给本地运行的 sing-box,再由 sing-box 建立真正的加密连接。
架构图
graph LR
subgraph Surge_Control [Surge - 控制面]
Rules{规则分流}
Dashboard((Dashboard))
Scripts((脚本/SSID 策略))
end
subgraph SingBox_Data [sing-box - 数据面]
Inbound[SOCKS5 入站: 7891]
Outbound[协议封装: VLESS / H2 / Reality]
end
App[应用流量] --> Rules
Rules -- "DIRECT" --> Direct[直接出站]
Rules -- "SOCKS5 转发" --> Inbound
Inbound --> Outbound
Outbound --> Remote[远程服务器]
核心配置
1. sing-box 配置
sing-box 仅作为本地代理运行,监听 7891 端口。
~/.config/sing-box/config.json:
{
"inbounds": [
{
"type": "mixed",
"tag": "mixed-in",
"listen": "127.0.0.1",
"listen_port": 7891
}
],
"outbounds": [
{
"type": "vless",
"tag": "proxy-node",
"server": "your-server.com",
"server_port": 443,
"uuid": "your-uuid",
"flow": "xtls-rprx-vision",
"tls": { "enabled": true, "server_name": "your-server.com" }
}
]
}
2. Surge 配置
在 Surge 的 [Proxy] 段添加 sing-box 节点。
[Proxy]
# 桥接到本地 sing-box
SingBox = socks5, 127.0.0.1, 7891
[Rule]
# 走 sing-box 转发的规则
DOMAIN-SUFFIX, google.com, SingBox
FINAL, DIRECT
为什么不直用 sing-box?
虽然 sing-box 协议全,但它在 macOS 上的日常使用体验还是不如 Surge:
- Dashboard:Surge 的实时流量监控和请求审计非常直观,排查网络问题很快。
- 自动化:Surge 可以根据当前连接的 WiFi (SSID) 自动切换出站策略(比如在公司直连,在家里代理)。
- 脚本能力:Surge 的 JS 脚本可以处理很多复杂的逻辑。
总结
这种分层架构的核心优势在于解耦。底层协议更新再快,你只需要维护轻量的 sing-box 后端,而上层复杂的 Surge 规则和脚本逻辑可以保持不动。这是一种兼顾交互体验与连接能力的方案。