Mac端一直都用Surge作为Proxy工具,也很稳定,但是唯独不支持酸酸乳(Vmess和Trojan都原生支持了) 可偏偏现在优秀的中转JC使用酸酸乳居多,故当前有如下两个需求:
- 让Surge也支持酸酸乳(并非采用前置代理的方式)
- 因为手头有多个JC,并不想一个个订阅配置,想整合多个JC的订阅
Surgio正好完美解决了我的需求,下面记录使用其解决需求的过程。
快速安装
surgio推荐使用now.sh在线托管服务,具体安装教程官方已经写的很详细了,这里直接搬运:

配置Provider
根目录下的surgio.conf.js
是全局配置文件,我们找到artifacts
,Surgio会根据Artifact
的值来生成相应的配置文件,Artifact
的基本格式如下:
{ name: Surge_ziyong.conf, template: template_demo, provider: provider_demo, }
其中template
和provider
的值必须填写在template
和provider
文件夹下切实存在的js文件。 我的目的是定制一个特殊的surge配置文件,所以我首先配置一个Provider:服务提供者。 在provider文件夹下创建一个clash_subscribe_demo.js
,由于我的JC订阅链接是clash的,所以type
选择clash
,其他支持的订阅类别请参考下图:

use strict; const { utils } = require(surgio); module.exports = { url: 此处填写你的订阅链接, // 我的JC订阅链接是clash type: clash, // 定义所有的节点都支持 udpRelay udpRelay: true, // 添加国旗 emoji addFlag: true, // 自定义过滤器,此处使用合并过滤,过滤出香港、台湾和新加坡的节点地址 customFilters: { usCunstomFilter: utils.mergeFilters( [utils.hkFilter, utils.taiwanFilter, utils.singaporeFilter], false // true代表同时满足上述条件的地址; false代表只需满足一项 ), }, };
自定义Template
配置完服务提供者后需要自定义一个template模板,此处我要自定义一个Surge的配置文件模板。 首先找到一个常规的配置文件,我使用了nzw9314收集的配置文件,这里自由选择不做限制。 然后在template文件夹下新建一个surge_ziyong.tpl
文件(Surgio为了能够灵活定义模板而引入了 Nunjucks)。 此处以官方提供的surge_v3
模板作为例子,如下:
#!MANAGED-CONFIG {{ downloadUrl }} interval=43200 strict=false {% import './snippet/direct_rules.tpl' as direct_rules %} {% import './snippet/apple_rules.tpl' as apple_rules %} {% import './snippet/youtube_rules.tpl' as youtube_rules %} {% import './snippet/us_rules.tpl' as us_rules %} {% import './snippet/blocked_rules.tpl' as blocked_rules %} [General] # 日志等级: warning, notify, info, verbose (默认值: notify) loglevel = notify # 跳过某个域名或者 IP 段,这些目标主机将不会由 Surge Proxy 处理。(在 macOS # 版本中,如果启用了 Set as System Proxy, 那么这些值会被写入到系统网络代理 # 设置中.) skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, 100.84.0.0/10, localhost, *.local # 强制使用特定的 DNS 服务器 dns-server = system, 119.29.29.29, 223.5.5.5, 1.1.1.1 # 将特定 IP 段跳过 Surge TUN,详见 Manual bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12 # 是否截取并保存 HTTP 流量 (启用后将对性能有较大影响) (默认值: false) replica = false # 是否启动完整的 IPv6 支持 (默认值: false) ipv6 = false # 以下参数仅供 macOS 版本使用(多端口监听仅 Surge 3 支持) http-listen = 0.0.0.0:6152 socks5-listen = 0.0.0.0:6153 # 测速地址 internet-test-url = {{ proxyTestUrl }} proxy-test-url = {{ proxyTestUrl }} # 其它 # external-controller-access = password@0.0.0.0:6170 show-primary-interface-changed-notification = true proxy-settings-interface = Primary Interface (Auto) menu-bar-show-speed = false allow-wifi-access = true hide-crashlytics-request = true [Proxy] {{ getSurgeNodes(nodeList) }} [Proxy Group] ? Proxy = select, {{ getNodeNames(nodeList) }} ? Netflix = select, {{ getNodeNames(nodeList, netflixFilter) }} ? YouTube = select, ? Proxy, US, HK ? Apple = select, DIRECT, ? Proxy, US, HK ? Apple CDN = select, DIRECT, ? Apple US = url-test, {{ getNodeNames(nodeList, usFilter) }}, url = {{ proxyTestUrl }}, interval = 1200 HK = url-test, {{ getNodeNames(nodeList, hkFilter) }}, url = {{ proxyTestUrl }}, interval = 1200 [Rule] {{ apple_rules.main('? Proxy', '? Apple', '? Apple CDN', 'DIRECT', 'US') }} {{ remoteSnippets.netflix.main('? Netflix') }} {{ remoteSnippets.hbo.main('? Netflix') }} {{ remoteSnippets.hulu.main('? Proxy') }} {{ youtube_rules.main('? YouTube') }} {{ us_rules.main('US') }} {{ remoteSnippets.telegram.main('? Proxy') }} {{ blocked_rules.main('? Proxy') }} {{ direct_rules.main('DIRECT') }} # Rulesets RULE-SET,SYSTEM,DIRECT # LAN RULE-SET,LAN,DIRECT # GeoIP CN GEOIP,CN,DIRECT # Final FINAL,? Proxy,dns-failed [URL Rewrite] ^https?://(www.)?g.cn https://www.google.com 302 ^https?://(www.)?google.cn https://www.google.com 302
其中几个关键点说明:
{% import './snippet/direct_rules.tpl' as direct_rules %}
:引入分流规则集,具体分流规则定义在./template/snippet
下,import
后使用{{ direct_rules.main('DIRECT') }}
引入。{{ getSurgeNodes(nodeList) }}
:获取Surge格式的节点列表{{ getNodeNames(nodeList, usFilter) }}
:获取节点名称,第二个参数为使用的过滤器。
配置完template
后,在surgio.conf.js中修改相应配置即可。
{ name: Surge_ziyong.conf, template: surge_ziyong, provider: clash_subscribe_demo, }
git提交后,在托管服务上可看到配置已经生成,可以下载和预览:
如何打开酸酸乳支持
找到 surgio.conf.js
,补充如下字段:
module.exports = { // ... binPath: { shadowsocksr: '/usr/local/bin/ssr-local', // v2ray: '/usr/local/bin/v2ray', v2ray已原生支持 }, surgeConfig: { // 添加该项后Surgio会在生成配置的时候解析域名 resolveHostname: true, }, }
酸酸乳建议安装在/usr/local/bin/ssr-local
下,使用下面命令安装即可:
curl -L https://github.com/tindy2013/shadowsocks-static-binaries/raw/master/shadowsocksr-libev/macos/ssr-local -o /usr/local/bin/ssr-local && chmod +x /usr/local/bin/ssr-local
如何让surge界面更简洁
如果整合了多家JC的订阅,surge for mac的代理界面是非常臃肿的,那么我们如何才能达到下面的简洁效果呢?

我们需要使用到policy-path
,只需要在上述自定义模板中的[Proxy Group]
下添加如下配置,在[Proxy]
下删除{{ getSurgeNodes(nodeList) }}
。
JC1 = select, policy-path=[surge类型节点订阅地址], url = http://www.qualcomm.cn/generate_204, interval=300
有人说上述surge类型节点订阅地址不想通过第三方API来转换,那怎么办?
我们同样可以通过surgio来完成,新建一个模板文件surge_node_list.tpl
,在其中输入:
{{ getSurgeNodes(nodeList, customFilters.usHkAndTwFilter) }}
然后同样用其生成一个artifact
并获取相关地址,然后在policy-path
后填入该地址即可,这样不用借助任何第三方订阅转换工具就能实现,是不是很方便?
向云樾进行回复 取消回复