Surge 新手使用指南

Surge 是基于 iOS 9 的新特性 Network Extension 开发的一款网络调试工具,工作原理是使用 Packet Tunnel Provider 给系统套上一个代理,Surge 有两个主要组件:Surge 代理服务器和 Surge TUN 接口。程序运行之后,Surge 会将自身设置为默认的 HTTP/HTTPS 代理服务器来处理所有的 HTTP/HTTPS 流量。针对一些不服从系统代理设置(如 Mail.app )的应用程序 ,将由 Surge 的 TUN 接口来进行处理。

Surge 会接管全局的(几乎)所有通信,所以所有网络方面的电量消耗都会被算在 Surge 头上,实际上 Surge 的运行功耗很少,使用中也不会感到 Surge 对电量有明显影响。

添加配置文件

打开 Surge,默认包含有一个 Default 的配置文件,点击右上角的编辑(Edit)可以打开了解配置文件的基本结构:日志模式(Log Level)的设定、代理服务器(Proxy)的设置以及规则(Rules)的设置。

一条一条添加内容是困难的,而且对刚接触这一块的用户来说也不明所以,所以简单的方法是从网上复制一份现成配置内容下来,保存成后缀为.conf 的文本(Uncode UTF-8)文件,最后连接数据线通过 iTunes 导入到 Surge中。

image

配置文件中服务器的部分需要填写,如果不知道服务器的地址和端口是多少,不妨打开 GoagentX 停止服务后选择不同的服务器并查看具体地址,你既可以直接在 Surge 中填写,也可以直接编辑 .conf 配置文件最后再导入到 Surge。

image

对于大多数人来说,基于范例文件编辑加上自己的服务器(Proxy)地址 Surge 就可以开始工作了。规则部分可以借鉴范例文件进行补充,规则并不是越多越好,除了利用 DNS 缓存对经常访问的网站进行加速外,仅需要补充本地 DNS 无法正常解析的域名到规则中。

如果您使用的是 HTTPS 代理,尽量设置 SSL 加密(Cipher)以减少内存占用,推荐 GCM 模式加密算法,例如:TLS_RSA_WITH_AES_128_GCM_SHA256。

使用单独的服务器配置文件

配置文件的 Proxy 部分可以写入多个服务器地址,Surge 会将当前命名为「Proxy」的地址作为当前使用地址,这种方式每次想切换代理服务器时比较麻烦,例如我想使用香港代理服务器,需要找到 HK 条目,并将现有「 Proxy = 」中的 Proxy 改成别的名字,然后将「 HK = 」中的 HK 改成 Proxy,说起来都比较绕。

多个服务器切换更简单的方式是单独写「服务器配置覆盖文件」,在这种覆盖文件中只需要指向自定义配置的主文件(如图示中HK(HKG3).conf 第一行),然后写上服务器地址的部分(Proxy 定义部分)即可。

image

主文件(如,Main.conf)是个独立的标准文件,所以其中 Proxy 部分是必须的,服务器覆盖配置文件(如,HK.conf、TYO.conf)中只写一个服务器地址,并且这个地址不需要和 Main.conf 的中 Proxy 部分形成对应关系,如果你打算使用 5 个服务器切换,Main.conf 的 Proxy 部分可以写 1 ,然后其他覆盖配置文件里分别写 2、3、4、5 的地址,在 Surge 主界面中选中哪个使用哪一个。(点击示范代码名称后的链接下载配置文件范例,导入后修改服务器地址、端口、用户名和密码部分)

Main.conf (for SSLEdge)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[General]
# warning, notify, info, verbose
skip-proxy = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,localhost,*.local
bypass-tun = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
dns-server = 119.29.29.29,223.5.5.5,114.114.114.114
loglevel = notify
[Proxy]
# SSLEdge,自行修改 Proxy 中的服务器地址、端口、用户名、密码
Proxy = https,1.2.3.4,443,username,password
[Rule]
# 规则部分请参照范例补充完善,此处只列出几条示意
DOMAIN-KEYWORD,umeng.co,REJECT
DOMAIN-KEYWORD,google,Proxy,force-remote-dns
GEOIP,CN,DIRECT
FINAL,Proxy

Main.conf (for ShadowSocks)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[General]
# warning, notify, info, verbose
skip-proxy = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,localhost,*.local
bypass-tun = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
dns-server = 119.29.29.29,223.5.5.5,114.114.114.114
loglevel = notify
[Proxy]
# ShadowSocks,custom不要变,修改服务器地址、端口、加密方式、密码、Shadowsocks 模块URL
Proxy = custom,$IP,$PORT,$METHOD,$PASSWORD,$MODULE_URL
[Rule]
# 规则部分请参照范例补充完善,此处只列出几条示意
DOMAIN-KEYWORD,umeng.co,REJECT
DOMAIN-KEYWORD,google,Proxy,force-remote-dns
GEOIP,CN,DIRECT
FINAL,Proxy
> 🇭🇰HK(HKG3).CONF

#!PROXY-OVERRIDE:Main.conf

[Proxy]
Proxy = https,2.2.3.5,6556,username,password

1
2
> 🇯🇵JP(TYO2).CONF

#!PROXY-OVERRIDE:Main.conf

[Proxy]
Proxy = https,3.2.3.6,15560,username,password

1
2
3
4
5
6
7
8
SSLEdge 和 ShadowSocks 的差别只是 Proxy 代理服务器那一行,服务器覆盖配置中同理,SSEncrypt.module 模块的下载链接请自行 Google。
为了显示上的直观,图示服务器覆盖文件的文件名加入了表情符号(原生拼音输入法输入香港🇭🇰)。 Dropbox 目前还不支持同步文件名包含表情符号的文件,所以如果要传到 Surge 里请使用 iTunes 或 iCloud Drive 方式。
### 具体配置和规则
![image](https://cloud.githubusercontent.com/assets/1845119/10934808/fabd4508-831c-11e5-9baf-f335e473a1c9.png)

通用设置

loglevel = notify
bypass-system = true
skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local
bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
dns-server = 8.8.8.8, 8.8.4.4

1
2
3
- 记录日志的几种方式: verbose、info、notify、warning。默认是 notify,分析(Analytics)模块中可以查看具体的 Logs,日志对分析 Surge 的使用状况很有帮助,打开具体日志能看到 Surge 的行为和动作,如果遇到异常情况可以打开具体日志并通过右上角的分享将日志通过邮件发送给作者
- 除非是在调试 Bug 的时候,平时请不要启动 verbose 级别的日志,因为日志需要保证完整写入,使用的是同步式地写入,性能上会有严重问题

代理设置

[Proxy]
Proxy = https,127.0.0.1,3120,username,password,cipher
ProxyA = socks5,127.0.0.1,3129
ProxyC = http,127.0.0.1,3120

1
2
3
4
- 可以创建多个代理服务器条目,规则中可以指定某条规则走哪个代理
- SSLedge 使用 HTTPS,老式 APNp 用 HTTP
- Surge 支持 HTTP, HTTPS 和 SOCKS5 的代理服务器,当前仅 HTTP/HTTPS 代理支持验证(用户名、密码)

规则设置

[Rule]

基于域名判断并屏蔽(REJECT)请求

DOMAIN,pingma.qq.com,REJECT

基于域名后缀判断屏蔽(REJECT)请求

DOMAIN-SUFFIX,flurry.com,REJECT

基于关键词后缀判断走代理(Proxy),强制不尊重系统代理的请求走 Packet-Tunnel-Provider

DOMAIN-KEYWORD,google,Proxy,force-remote-dns

基于域名后缀判断请求走直连(DIRECT)

DOMAIN-SUFFIX,126.net,DIRECT

Telegram.app 指定“no-resolve”Surge 忽略这个规则与域的请求。

IP-CIDR,91.108.56.0/22,Proxy,no-resolve

判断是否是局域网,如果是,走直连

IP-CIDR,192.168.0.0/16,DIRECT

判断服务器所在地,如果是国内,走直连

GEOIP,CN,DIRECT

其他的走代理

FINAL,Proxy
```

规则配置的高级选项中,「Force Remote DNS」的作用主要是用来解决本地 DNS 解析受到污染的问题,在添加针对 Google、Twitter 的规则时可以开启。
规则按照顺序执行,注意不要出现先后矛盾的地方,同一个域名或后缀的规则定义不要重复,使用文本编辑器编辑时注意每条规则间的分隔逗号是英文标点。

高级设置中的选项

image

最右侧的图是分析模块中的统计(Statistics)数据,可以直观的看到当前连接(Surge 断开后统计重置)的时长以及Wi-Fi 和蜂窝移动网络的流量使用情况。

主配置文件设置高级选项中的「Bypass System Related」不要关闭,Surge 通过这个开关和内置规则放行系统层面的通讯请求。如果禁用此选项,它可能会导致一些系统问题,如推送通知的延迟。

高级选项中的其他两项设置「SKIP PROXY」和「BYPASS TUN」是为了解决一些应用的兼容性问题,通过指定具体域名(apple.com或者apple.com)或者 IP(192.168.2. 或 192.168.2.0/24)让这类请求绕过 Surge 代理服务器和 TUN 接口。

image

Skip Proxy 和 Bypass TUN 的功能与原理(By @Blankwonder )
Surge 能作为 DNS Client 使用,「DNS OVERRIDE」中填写的 DNS 地址将覆盖缺省的 DNS,针对较差的网络环境 Surge 能进行更高频率地重发,并同样适用于蜂窝数据网络,支持设置中(如:119.29.29.29,223.5.5.5,114.114.114.114)的多服务器并发查询。

分析网络活动

Surge 分析模块中能直观看到 Surge 启动后最近地访问请求(Recent Requests)。

image

还可以通过规则结果测试(Rule Test Results)临时调整规则(点击某条记录),REJECT、DIRECT 或者指定它走某个代理。

image

通过规则结果测试(Rule Test Results)可以方便地跟踪当前 App 的网络访问,临时改变规则后可以观察 App 的实际运行情况,如果有效随后就能补充到主配置文件中。

在 iPad 分屏模式的使用场景中,我经常干的一件事就是打开某个国产应用,然后分屏查看 Surge 里 Test Results 的网络访问情况,侦查那些和应用功能无关的隐私或广告请求,然后记录下来添加到自己的规则列表中。

如果说 Surge 最吸引人的地方在哪里,估计就是这种透明的网络访问方式,在轻松访问各种网络服务以外还是一个强有力地调试工具。安全和隐私已经变成只有少数人才能掌控的东西,学习掌握一款这样的工具还是很重要的。

常见问答

Q:为什么 Surge 一直显示是下载状态没有安装成功?

A:不能开启 Surge 的同时更新它自己,需要先停用 Surge,等更新完成后再打开 Surge。

Q:修改配置文件中的规则后会立即生效吗?

A:不会,需要到 Surge 中停止(Stop)后重新开始(Start)。

Q:Surge 的配置文件中的服务器该如何填写?

A:Surge 是一个网络调试工具,并不提供代理服务器,需要另行购买或自行搭建服务器,具体的服务器地址和端口可以咨询服务器提供商。

Q:如何快速启动或关闭 Surge ?

A:Surge 提供了通知中心扩展 Widget,加载后由通知中心就能快速切换 Surge 状态。如果使用 Launcher 这类软件,可以通过 URL Scheme 命令surge:///toggle来控制 Surge 的切换,更多命令参见 surge.run。

Q:网上分享和供参考的配置中为什么规则都不一样 ?

A:配置文件中 [Rule] 的部分可以根据各自的使用环境进行定制,合并或借鉴时注意不要前后冲突或重复即可。

Surge 是一款开发者调试和代理工具,需要一定的专业背景知识才可使用,请在仔细阅读 AppStore 说明且理解软件功能后再进行购买。

后续版本可能还会有功能、界面上的变化,如有必要本文会进行补充和更新。

本文档适用于:Surge 1.0.1(Bulid 300)