Support | 微信 & TG: @scomper

Surge iOS 3 的变化和设置

2018.01.13 09:51

Surge 3 新版本来了,一如既往的稳定和优雅。Surge 3 除了功能和界面上的变化以外,付费方式也改成 iAP 内购的方式。Surge iOS 3 采用类似于 Adobe Cloud 的授权方式,可以在最多三台 iDevice 设备上同时使用。应用中新增的授权管理允许用户随时的进行激活与反激活,方便设备更新换代时的授权迁移。

相对 Surge 2 来说,UI 上的变化是最直观的,首页改成了 iOS 11 里 App Store 相似的卡片风格,启用和停止从屏幕中间移到了右上角,首页的卡片也清晰的体现了 Surge 的主要功能点:便捷的出站模式切换、流量抓取、MitM 解密 HTTPS 流量、Rewrite 重定向 URL、DNS 服务器和映射。


对于大多数只是用来上网的用户而言,选择「配置文件」启用并选择「出站模式」就可以开始使用了,高级用户才需要用到数据的抓取分析、重定向、DNS 等功能。

快速上手

通过 iOS 应用的界面能添加代理和完成各种设置,不过操作效率不高,所以,初期使用建议还是从下载现成的 conf 配置文件开始,修改配置文件中的代理服务器部分就可以开始使用,大多数服务运营商也提供 Surge 的配置文件下载。

  • 启用 Surge iOS 「更多」设置里的「iCloud Drive 配置同步」①,如此一来,Mac 端的 iCloud Drive 文件夹中会自动生成名为 Surge 的文件夹,将下载的配置文件移到到这里;
  • 在 Mac 端使用文本编辑器编辑 iCloud Drive/Surge 文件夹中的配置文件;
  • Surge iOS 首页左上角选择配置文件 ②,如果没用在 Mac 上修改,下载范例配置后也可以在 iOS 端修改代理 ③,另外习惯文本编辑模式的可点击进入「配置列表」使用「在文本模式中编辑」;
  • 「出站模式」的卡片上选择「规则模式」④ 就能使用配置中的规则访问网络,预置的「直连模式」「全局代理」会忽略配置中规则设定,实现全局性的直连访问和代理访问。

Surge 3 的授权能同时在 3 台设备上使用,如果更换新的手机或者临时在第 4 台设备上使用 Surge,可以在授权管理中「反激活当前设备」腾出对授权的占用名额。

配置代理和策略组

访问 GitHub scomper/surge3.conf 下载范例配置,修改其中的代理服务器部分为自己的代理。

范例中包含了多条服务器示例,主要是为了演示策略组(Proxy Group)的使用,代理(Proxy)中每一行是一个代理服务器的设置,代理的名称(图示中绿色的部分)可以随便定义,策略组中调用的时候输入对应的名称即可。


如果只有一个服务器,,可以按照图示里单个服务器的方式配置,删除多余的代理条目和策略组。策略组中调用的代理服务器名称必须是 Proxy 部分已经定义存在的,策略组中写入不存在的代理名称会报错,这也是很多人经常会出现的问题。

随着 Surge Mac 3 的发布 Surge iOS 3.4.0 也增加了对 GroupList 特性的支持,服务器部分的写法比以前更简洁。

GroupList 文件和配置文件都保存在本地 iCloud/Surge 文件夹中。可以按代理服务器所在的地域分别新建了几个 .list 文件,并以 policy-path=groupAuto.list 的方式进行调用。

groupAuto.list 的内容就是一行一个服务器地址内容如下所示,其它的 groupUS.list、groupHK.list 类似:

1
2
3
HK01 = https, abc-hk.com, 443, username=username, password=123456
SG02 = https, abc-sg.com, 443, username=username, password=123456
JP01 = ss, abc-jp.com, 443, encrypt-method=aes-128-gcm, password=123456
  • Auto 组支持自动测速,会自动在多个代理之间切换,url 指向的网址 bing.com 不建议自行修改。
    • URL 延迟自动测试,url-test,默认 600s 访问一次 URL 网址,切换到连接速度最佳的线路
    • URL 可用性自动测试,fallback,默认 600s 访问一次 URL 网址,按所列服务器的顺序切换到可用的线路
  • SSID 组可用在连接到 Wi-Fi设备时自动判断和连接,除了修改其中的代理名称外,SSID NAME 也需要修改成你自己的 Wi-Fi 设备的 SSID 名称,每一组删除多余的 SSID NAME 定义时请注意同时删除末尾的逗号。

在 Surge iOS 界面中修改策略组、代理可以避免出现语法上的错误,UI 界面中填空的方式也有助于你理解定义语句中的参数含义。

抓取流量

默认「抓取流量」是关闭的,开启后才会保存请求的数据,并能在「分析」页面的「已保存的抓取数据」中查看到。

Surge 启用后就可以在「分析」页面查看「最近请求」,「最近的请求」和抓取是各自独立的,并不受「抓取流量」开关的影响,在「过滤器」中可以隐藏 Apple 和 Crashlytics 的请求,如果启用「使用关键词过滤器」,「最近请求」中将只显示 URL 中包含关键词的访问。

有针对性的分析某个域名或应用的访问时可以启用关键词过滤的方式来显示尽可能少的请求记录,从而避免被其他应用的访问记录所埋没。另外,Surge 3 中有个细节上的变化,最近请求记录里可以显示「国家」,会以国旗图标的方式显示目标 IP 的位置。

如果没有启用 MitM,抓取流量无法抓取保存 HTTPS 的访问,所以遇到 HTTPS 的访问时如果要保存抓取数据,需要先配置好 MitM。

MitM 配置

需要抓取和分析 HTTPS 数据时才需要配置和启用 MitM(Man-in-the-middle attack 简称 MitM),使用 MitM 前需要配置好证书并添加了需要解密的域名。

第一次启用 MitM 时先「配置根证书」,并在系统设置中(通用 - 关于 - 证书信任设置)信任这个生成的证书。

  1. 配置根证书,点击「生成新的 CA 证书」;
  2. 点击生成证书后,界面里会多出一项「安装证书」;
  3. 安装证书,允许「此网站尝试打开“设置”以向您显示一个配置描述文件。您要允许吗?」
  4. 安装描述文件界面里点击右上角的「安装」,输入手机的密码完成安装。安装成功后 Surge 会自动修改 conf 配置文件,增加 [MITM] 部分。
  5. 到系统的「通用 - 关于 - 证书信任设置」中信任证书;
  6. 点击「主机名」添加需要解密的 HTTPS 网站的域名。

证书 OK,域名也添加了,如此再打开「抓取流量」才能保存访问这个域名的数据。

添加新的证书会自动替换掉旧的证书,但是旧的描述文件(设置 - 通用 - 描述文件)需要自行删除。如果你的配置和 Surge Mac 使用的是同一个,那么 Surge iOS 端更新证书后,Mac 端也需要重新将证书添加到系统。

打开 Surge Mac 的「配置」界面,在 HTTPS 页面中点击「将证书安装到系统」,安装成功后界面里证书下方会显示为:CA 证书已被系统信任。如果反过来,先在 Surge Mac 添加了证书,那么 Surge iOS 端只需要执行第 5、6 步信任证书即可。

这里 hostname 中的 * 通配符的工作方法与其它地方略有不同(如 Local DNS Mapping),进行的是简单的字符串后匹配。

即 *facebook.com 可对 facebook.com,www.facebook.com,abcfacebook.com 生效。

部分应用使用了 Certificate Pinning,只相信特定的证书或者来自特定的 issuer 的证书。该情况下 MitM 无法正常工作。(如 iOS 系统对 apple.com 和 icloud.com 的相关请求)

Rewrite 重定向

「Header 修改」可配置规则对 HTTP/HTTPS 请求的 Header 进行修改,支持增加、删除以及替换字段,可按正则匹配特定 URL 进行修改。具体的规则范例可以参阅 Surge 帮助 里的 Header Rewrite 部分。

在广告和隐私拦截的处理案例中,可以用 header-del 的参数删除没有域名的 Cookie。


URL 重定向的应用示例里,用它来解决 Google.cn 的跳转问题。同时也可以利用 REJECT 参数以正则的方式拦截部分网页中的广告。

  • Header,修改请求的 Header,客户端不会感知到这次重定向。
  • HTTP 307,返回一个 307 响应,用于对 POST 请求进行重定向,如果启用了主机名的 MitM,可以对 HTTPS 请求使用。
  • HTTP 302,返回一个 302 响应,如果启用了主机名的 MitM,则可以重定向 HTTPS 请求。
  • 当 URL 匹配时拒绝请求,如果启用了主机名的 MitM,可以对 HTTPS 请求使用。

Header 替换的一个实例,在 iPhone 上以网页而不是 App 形式打开「知乎」。

1
2
3
4
5
[Header Rewrite]
^https://www\.zhihu\.com header-replace User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15

[MITM]
hostname = www.google.cn, *.zhihu.com

Header Rewrite 部分需要添加一行 header-replace,因为涉及到 HTTPS,同时需要启用 MitM 并添加知乎的域名。

DNS 和高级设置

DNS 服务器里可以定义多个 DNS IP 地址,访问域名时,Surge 将并发对所有 IP 地址发起 TCP 连接,优先使用第一次连接时速度最快的 IP 地址。

DNS 服务器中的定义会强制使用特定的 DNS 服务器,多个 DNS 服务器地址之间用半角逗号区隔开,dns-server = 8.8.8.8, 8.8.4.4dns-server = system,8.8.8.8, 8.8.4.4的区别是后者还会读取当前系统中设定的 DNS 地址。

本地 DNS 映射,有两种用法,一种和 Host 类似,为域名或泛域名指定解析的 IP 地址,例如:*.dev = 6.7.8.9
还有一种是给指定的域名或泛域名分配特定的 DNS 服务器,例如 *.taobao.com = server:223.5.5.5


功能卡片的最下方还包含了一些不常用的「高级设置」,其中值得提到的主要是两个:

  • 允许外部访问(allow-wifi-access = true),启用后可以作为局域网中的代理服务器分享给其他设备上网,具体的设置可以参阅《局域网其他设备共享上网》。
  • 外部控制器,范例配置中已经包含和启用了「外部控制器」的设定external-controller-access = password@0.0.0.0:6170,需要注意的是,这里的 password 需要修改成你自己的密码。启用外部控制器后可以在 Surge Mac 的控制台中访问和显示 Surge iOS 的访问数据,调试起来更方便。

其他细节变化

  • Surge 3 增加了 Safari 扩展,可以更便捷的将当前域名添加成规则;
  • 配置管理界面可以在配置上右滑进行强制 iCloud 同步;
  • 规则策略里新增了 TINYGIF 拒绝(REJECT-TINYGIF),将会返回一个 1px 的透明 GIF 图片,用于特定情况的广告屏蔽。
  • App icon 可以更换


更多具体的变化可以阅读Surge 3 的主要变化


参考文章
Surge iOS 3 发行计划
Surge Trello 看板
官方配置范例和释义 zhHans.conf

Comments
Write a Comment