
我一直比较在意网络安全,就是想知道我电脑上的所有请求到底是从什么出口出去的。起因是有一天我发现搜狗输入法每天都在频繁请求外部接口,我当时就想,一个破输入法凭啥老是请求网络。于是我先下载了LuLu,在LuLu之前我其实还用过另外一款防火墙软件Little Snitch 6,不过那个软件我一直没玩太明白。用了LuLu之后,我把搜狗输入法的联网权限直接禁掉了,但发现貌似还是没什么效果,于是继续研究,后来发现可以用 Surge 来查看网络请求。
用了Surge之后我发现搜狗输入法还是在大量上传数据,于是我又把搜狗输入法的所有请求都 REJECT 了。但REJECT之后搜狗输入法会一直重试请求,结果反而把电脑搞得有点卡顿,所以最后我干脆把搜狗输入法卸载了,换成了微信输入法,还有一款开源的 RIME 输入法,这个是后话。不过在这个过程中我体验到了 Surge 的爽点,它本身既可以作为一个网络分流工具,也可以用来抓包,更绝的是还能用来 Mock。这一点就很有意思了,一款软件基本上可以覆盖我之前使用的 Charles 和各种 Mock 工具。虽然价格有点小贵,官方差不多 50刀,不过某宝上一百多就能买到,于是我就果断拿下了。
为什么一定要用 Surge?其实在用这个软件之后我也一直在思考这个问题,到底有没有必要。但仔细想了想,我觉得还是有必要的。比如我在使用代理软件的时候,公司有一些内网系统是屏蔽外部网络的,我以前经常需要自己在代理软件里写规则,而且有时候访问不了的时候,我就很想知道自己到底是用什么 IP 在请求。所以有段时间我专门安装了 Little Snitch 6,不过这个软件有个比较坑的地方,就是默认所有流量都会经过它,而且我当时甚至不知道这个软件该怎么退出,用起来挺折腾的。我们公司的 UAT 环境还要求必须连接指定的 WiFi,并且不能经过代理,反正软件虽然买了,但一直没玩明白,后来干脆就卸载了。
后来买了 Surge 之后才发现,使用门槛确实挺高的,很多新手其实很难上手。我刚开始的时候以为很简单,直接导入配置就能用,结果发现压根不行,它的自定义程度确实太高了。后来我通过各种请教 AI,再加上自己不断实操,最后发现 sub-store + Surge 其实是最简单、最快捷的一种解决方案。
我刚下载surge之后,也是网上随便找了教程,包括github高星的项目,把配置下载下来发现根本搞不定,所以很多像我一样的小白就弃用了,实际上只需要搞懂这款软件的本质,那就是先有配置,然后是策略。然后很多新手卡主的点基本上都是自己的订阅地址在surge中无法导入,然后就卡主走不下去了。所以我们把问题简化,只做两步,那就一定能搞定。
- 第一步:安装sub-store,这一步要解决的就是小白卡主的最大难题,不会把订阅解析到配置里面,很多网上的配置写的天花乱坠,都不如这个插件,只要搞定这一步,直接成功90%;
- 第二部:配置surge,有了第一步之后,直接复制第二部的配置文件,然后替换掉订阅地址,然后就直接可用了。
准备工作
- 下载好surge:可以免费试用7天,我下载的是surge6;
- 准备好网络环境:第一次安装的时候需要从github拉取插件,没搞定网络可能会失败;
- 电脑环境:macOS,iOS手机上其实也大差不差,可以同理类推;
⚠️ 准备工作中网络环境如果没准备好,那么下一步直接就会失败,因为接下来的sub-store安装就需要用到网络。
安装Sub-Store
就记住一点,Sub-Store就是为了解析代理成surge可用的格式就完事儿了,别的都不用学,本文也就以只有一个代理的模式来进行演示。
- 打开surge,找到更多>模块:

- 进入模块之后复制这个地址下面的地址,然后点击
从URL安装模块进行安装。
https://raw.githubusercontent.com/sub-store-org/Sub-Store/master/config/Surge.sgmodule

⚠️ 如果网络没有问题,这里会正常安装成功并且没有任何异常,然后点击启用,然后应用即可。
- 接着需要做两步,分别是开启HTTPS解密与重写,这两步一定要完成,不然会失败,在这里检查这3项是否开启。
- 首先是开启MitM,在解密栏目下开启,需要生成新证书,然后将证书安装到系统,只有出现CA证书已被系统信任才算完成,还有顶部的解密一定要开启,我因为这个没开启还失败了半天。

- 然后就是开启重写与脚本了,重写在重写里面打开或者菜单栏下面打开都行。

- 做完以上的步骤,然后把Surge设置为系统代理,然后打开浏览器,地址栏输入
sub.store,会重定向到https://sub-store.vercel.app/subs这个地址,是正常的,如果没有冲定想这个地址都是失败的。

⚠️ 如果出现错误,请重复检查以下步骤
- 重启surge;
- 将surge设置为代理;
- 检查HTTP解密是否开启;
- 检查脚本是否开启;
- 检查重写是否开启;
- 附上一个错误页面:我关闭了重写跟脚本之后的错误页面,只要开启了,一定是正常的页面。

- 到能正常打开sub-store之后,已经成功50%了,接着添加订阅即可,只需要填3个地方,不管你的订阅连接是什么类型的,添加这3个地方即可。

- 添加完成之后点击保存,然后回到订阅管理的页面点击刚刚添加的订阅,复制转化的Surge(macOS)订阅地址,到这一步成功80%,这个订阅地址一般长这样
https://sub.store/download/Surge?target=SurgeMac,然后自己可以打开看下,能不能打开以及被正常请求。

Surge配置
有了上面的订阅地址之后,复制下方我的小白级别配置,上手就能用,只需要替换其中的订阅地址即可,我这个配置文件可以实现自动测速切换以及每日定时更新订阅地址。
[General]
# > 日志级别
loglevel = notify
show-error-page-for-reject = true
# > Wi-Fi 访问
allow-wifi-access = false
# > All Hybrid 网络并发
all-hybrid = false
# > IPv6 支持(默认关闭)
ipv6 = false
# > 测试超时(秒)
test-timeout = 3
# > Internet 测试 URL
internet-test-url = http://www.baidu.com
# > 代理测速 URL
proxy-test-url = http://www.gstatic.com/generate_204
# > GeoIP数据库
geoip-maxmind-url = https://github.com/Hackl0us/GeoIP2-CN/raw/release/Country.mmdb
# > 排除简单主机名
exclude-simple-hostnames = true
# > DNS 服务器
dns-server = 223.5.5.5, 119.29.29.29
hijack-dns = 8.8.8.8:53, 8.8.4.4:53
# > 从 /etc/hosts 读取 DNS 记录
read-etc-hosts = true
# > 远程控制器
http-api-web-dashboard = false
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, 17.0.0.0/8, localhost, *.local, *.crashlytics.com, seed-sequoia.siri.apple.com, sequoia.apple.com
# > 跳过代理
always-real-ip = *.srv.nintendo.net, *.stun.playstation.net, xbox.*.microsoft.com, *.xboxlive.com, *.battlenet.com.cn, *.battlenet.com, *.blzstatic.cn, *.battle.net
# > Always Real IP Hosts
[Proxy Group]
🚀 节点选择 = select, "🌏 手动切换", "♻️ 自动选择", "🇭🇰 香港节点", "🇨🇳 台湾节点", "🇸🇬 狮城节点", "🇯🇵 日本节点", "🇺🇲 美国节点", "🇬🇧 英国节点", "🇺🇳 小众节点", DIRECT
🌏 手动切换 = select, policy-path=替换成你自己的订阅地址, update-interval=86400
♻️ 自动选择 = url-test, policy-path=替换成你自己的订阅地址, update-interval=86400, lazy=true, url=http://www.gstatic.com/generate_204, interval=300, tolerance=50
📲 电报消息 = select, "🚀 节点选择", "🌏 手动切换", "♻️ 自动选择", "🇭🇰 香港节点", "🇨🇳 台湾节点", "🇸🇬 狮城节点", "🇯🇵 日本节点", "🇺🇲 美国节点", "🇬🇧 英国节点", "🇺🇳 小众节点", DIRECT
💬 OpenAI = select, "🚀 节点选择", "🌏 手动切换", "♻️ 自动选择", "🇭🇰 香港节点", "🇨🇳 台湾节点", "🇸🇬 狮城节点", "🇯🇵 日本节点", "🇺🇲 美国节点", "🇬🇧 英国节点", "🇺🇳 小众节点", DIRECT
Ⓜ️ 微软服务 = select, "🚀 节点选择", "🌏 手动切换", "♻️ 自动选择", "🇭🇰 香港节点", "🇨🇳 台湾节点", "🇸🇬 狮城节点", "🇯🇵 日本节点", "🇺🇲 美国节点", "🇬🇧 英国节点", "🇺🇳 小众节点", DIRECT
🔍 谷歌服务 = select, "🚀 节点选择", "🌏 手动切换", "♻️ 自动选择", "🇭🇰 香港节点", "🇨🇳 台湾节点", "🇸🇬 狮城节点", "🇯🇵 日本节点", "🇺🇲 美国节点", "🇬🇧 英国节点", "🇺🇳 小众节点", DIRECT
📺 国外媒体 = select, "🚀 节点选择", "🌏 手动切换", "♻️ 自动选择", "🇭🇰 香港节点", "🇨🇳 台湾节点", "🇸🇬 狮城节点", "🇯🇵 日本节点", "🇺🇲 美国节点", "🇬🇧 英国节点", "🇺🇳 小众节点", DIRECT
🎯 全球直连 = select, DIRECT, "🚀 节点选择", "♻️ 自动选择"
🛑 广告拦截 = select, REJECT, DIRECT
🍃 应用净化 = select, REJECT, DIRECT
🐟 漏网之鱼 = select, "🚀 节点选择", "🌏 手动切换", "♻️ 自动选择", "🇭🇰 香港节点", "🇨🇳 台湾节点", "🇸🇬 狮城节点", "🇯🇵 日本节点", "🇺🇲 美国节点", "🇬🇧 英国节点", "🇺🇳 小众节点", "🎯 全球直连", DIRECT
# > 匹配到关键字,自动收纳为节点组
🇭🇰 香港节点 = url-test, policy-path=替换成你自己的订阅地址, update-interval=86400, lazy=true, policy-regex-filter=(🇭🇰)|(港)|(Hong)|(HK)
🇨🇳 台湾节点 = url-test, policy-path=替换成你自己的订阅地址, update-interval=86400, lazy=true, policy-regex-filter=(🇨🇳)|(台)|(Tai)|(TW)
🇺🇲 美国节点 = url-test, policy-path=替换成你自己的订阅地址, update-interval=86400, lazy=true, policy-regex-filter=(🇺🇸)|(美)|(States)|(US)
🇯🇵 日本节点 = url-test, policy-path=替换成你自己的订阅地址, update-interval=86400, lazy=true, policy-regex-filter=(🇯🇵)|(日)|(Japan)|(JP)
🇸🇬 狮城节点 = url-test, policy-path=替换成你自己的订阅地址, update-interval=86400, lazy=true, policy-regex-filter=(🇸🇬)|(新)|(Singapore)|(SG)
🇺🇳 小众节点 = url-test, policy-path=替换成你自己的订阅地址, update-interval=86400, lazy=true, policy-regex-filter=(喀麦隆)|(冰岛)|(土耳其)|(阿根廷)|(俄羅斯)|(菲律賓)|(越南)|(印尼)|(马来西亚)|(韓國)|(德國)|(英國)
[Rule]
# 广告拦截
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanAD.list,"🛑 广告拦截","update-interval=86400"
DOMAIN-SUFFIX,api.adguard.org,REJECT
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanProgramAD.list,"🍃 应用净化","update-interval=86400"
# 局域网 & 基础直连
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/LocalAreaNetwork.list,"🎯 全球直连","update-interval=86400"
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/UnBan.list,"🎯 全球直连","update-interval=86400"
# 国内规则
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaDomain.list,"🎯 全球直连","update-interval=86400"
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaCompanyIp.list,"🎯 全球直连","update-interval=86400"
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaIp.list,"🎯 全球直连","update-interval=86400"
# Telegram
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Telegram.list,"📲 电报消息","update-interval=86400"
# AI 服务
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/OpenAi.list,"💬 OpenAI","update-interval=86400"
# Google
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/GoogleCN.list,"🎯 全球直连","update-interval=86400"
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/GoogleFCM.list,"🔍 谷歌服务","update-interval=86400"
# Microsoft
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Microsoft.list,"Ⓜ️ 微软服务","update-interval=86400"
# Apple (建议直连)
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Apple.list,"🎯 全球直连","update-interval=86400"
# 国外媒体
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/YouTube.list,"📺 国外媒体","update-interval=86400"
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/Netflix.list,"📺 国外媒体","update-interval=86400"
# GFW 代理规则
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ProxyGFWlist.list,"🚀 节点选择","update-interval=86400"
# 下载直连
RULE-SET,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Download.list,"🎯 全球直连","update-interval=86400"
# GeoIP CN
GEOIP,CN,"🎯 全球直连",no-resolve
# 最终规则
FINAL,🐟 漏网之鱼
- 替换完成之后可以在本地新建配置文件,比如
surge.conf,也可以在surge里面的配置模块直接新建空配置,然后把上面的配置文件复制进行,最后应用即可。

然后很多小白看这份配置如同看天书,说实话我刚拿到也是一样,我看了很多教程都是直接给你一份文档,也不说咋用,默认小白都会了呗,我这里就说明下这份配置文件,看着挺玄乎,实际就3个模块,我用表格整理在下面了。
| 模块名称 | 说明 |
|---|---|
| [General] | 基本不用管,就是一些通用的配置 |
| [Proxy Group] | 最核心的模块,策略组。我提供的这份配置文件的策略组解决了两个事儿,一是设置一些分组,比如手动切换,自动切换、openAI节点这些。本质上是为了不同应用,不同网站进行分流使用的 |
| [Rule] | 这个说实话可有可无,但是有了据说体验很好,就是满足这个规则走哪个节点,比如广告拦截的规则直接走广告拦截的策略,可以看到广告拦截的策略是REJECT,这样也就起到了广告拦截的作用 |
然后再说几个非常重要但是没有几个教程说的参数,明白这些参数的意义非常重要,会了之后就可以按照自己的需求来进行配置,而不是网上找一个配置文件就用,实际也不知道他们到底有啥区别:
| 参数名 | 说明 |
|---|---|
| select/url-test | 对应的就是手动选择跟自动选择的区别,如果策略设置为select,则当前策略下的节点都可以手动选择,如果是url-test,则该节点会自动测速并且选择最快的那个节点 |
| policy-path | 订阅的地址,就是会请求这个地址来获取代理的节点 |
| update-interval | 自动更新的时间,单位是秒,一般设置为86400,也就是一天更新一次 |
| url | 测速节点,这个可以自行替换 |
| interval | 测速的间隔,300就是5分钟 |
| tolerance | 延迟容忍度,要当前节点跟最优的节点相差为该值时才会自动切换,避免IP频繁切换 |
| DIRECT | 代表添加一个直连节点,直连代表走本地的网络,不经过代理 |
| REJECT | 拒绝访问,一般为广告或者应用净化添加,用于过滤广告,原理就是在RULE里面获取广告显示的url,然后分流到这个策略下然后返回REJECT,用了这个之后我发现我的百度搜索都干净了很多 |
后记
以上就是surge的完全教程了,相信小白看完应该都能立马上手了,刚上手的时候确实是一头雾水,感觉太难了都想放弃了,但是后来也是网上不停的找教程,然后问AI,甚至去看这个配置到底是什么含义,最后发现其实也没那么难。而且用上了之后感觉确实舒服,自动测速,然后切换网速最快的节点,针对不同的网站可以设置不同的分流规则,确实是好用啊,还有抓包跟mock,很多年前我就一直用Charles来抓包,这个能抓包我也是蛮心动的,尤其是想看到底哪些网站,应用在后台偷偷的跑流量,然后上传我的数据,我就可以抓包看下到底上传我的什么数据了,这个还是挺方便的。
参考资料
- Surge 官方教程:https://yqqy.top/efficiency/mac/surge
- Sub-Store 订阅服务:https://github.com/sub-store-org/Sub-Store
- Surge 订阅链接示例:https://v2rayssr.com/surge-sub.html

