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 的配置文件,点击左上角的群组,可以查看和添加更多的其他配置,通过「Download Configuration from URL」也可以直接从网络下载范例配置(后缀为 .conf)。

点击 Config 主界面下方的「Edit」对配置进行修改:配置名称、日志模式(Log Level)的设定、代理服务器(Proxy)的设置、规则(Rules)的设置以及代理服务器群组(Proxy Group)。一条一条添加内容是困难的,而且对刚接触这一块的用户来说也不明所以,所以简单的方法是从网上复制一份现成配置内容下来,保存成后缀为.conf 的文本(Uncode UTF-8)文件,最后连接数据线通过 iTunes 导入到 Surge中。

> 如果在 Surge 中启用了 iCloud,通过 iTunes 连接 iPhone 后,在应用文稿中可能看不到任何文件,但是这不影响你使用 iTunes 向 Surge 复制配置文件。

通过 iCloud 同步配置文件

1.2.0 版新增了 iCloud Drive Sync 同步特性,在 Surge 中启用后可以通过 iCloud 同步配置文件,这意味着你可以在 Mac 上访问 iCloud Drive 里的 Surge 文件夹,直接将配置文件复制到这里,甚至直接在这里打开配置进行编辑,保存后 iCloud 会自动同步到 iPhone 上。

> 通过 iCloud 同步配置文件时,如果 Surge 发现正在使用的配置已经更新,Surge 自动重新启动。

如果是从网上下载的配置文件,都需要打开代理服务器的配置部分验证并输入自己的代理服务器地址、端口、用户名和密码。GoagentX 用户可以停止服务参照不同的服务器并查看具体地址。多个服务器的输入如果觉得在 Surge 软件界面中这样一条一条的操作过于繁琐,可以直接以「Edit in Text Mode」的方式在文本模式下进行编辑。

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

* Option 中无法直接配置 Shadowsocks,需要在电脑上编辑配置文件,例如:「Proxy = custom,1.2.3.4,443,chacha20,password,http://abc.com/ss.module,ota=true」,其中 custom 不可更改,ss.module 的 URL 地址必须有效。有些 shadowsocks 服务提供商可能不支持 chacha20 加密,改成 rc4-md5。

如果您使用的是 HTTPS 代理,Surge 会校验服务器证书名称,请使用域名进行配置,不要直接使用 IP。

多个服务器配置(Proxy Group)

1.2.0 (476) 版本以后,iOS 版和 Surge Mac 的配置文件再度得到了统一,在一个配置文件中就可以方便的定义多个可供选择的服务器,用到的参数是新增加的 [Proxy Group] 。

采用 Proxy Group 的方式后,原来的「服务器配置覆盖文件」就没有必要再保留了,从旧版本升级到 1.2.0 版本时 Surge 会自动合并原有的配置,但是主界面看上去会很「简陋」,Proxy 下面空白的一片,这是因为 [Proxy Group] 的部分还没有配置多个服务器。

相对于原来的配置,新的配置中多了 [Proxy Group] 的描述字段,它和上方的 [Proxy] 是对应关系,也就是说你在 [Proxy] 字段中每行写入一个服务器,然后在 [Proxy Group] 中罗列这些服务器的定义名称,这样就能实现服务器群组的效果,方便在软件界面中实时切换。 [Proxy Group] 中罗列的服务器必须在 [Proxy] 字段进行了具体的定义,而且可用,但是反过来 [Proxy]字段中可以写很多服务器, [Proxy Group] 可以只包含其中几个。

Proxy Group 方式每个配置文件是相对独立的,可以包含各自的服务器地址和不同的规则。例如,按不同的规则的定义来命名区分成不同的配置文件,或者用不同的命名区分服务器提供商。

为了显示直观,图示服务器文件名加入了表情符号(原生拼音输入法输入香港🇭🇰)。 Dropbox 目前还不支持同步文件名包含表情符号的文件,所以如果要传到 Surge 里请使用 iTunes 或 iCloud Drive 方式。

供参考的配置文件,配置名称包含的链接可用于「Download Configuration from URL」。

Surge.conf(Auto Group)
[General]
# warning, notify, info, verbose
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, localhost, *.local
bypass-tun = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
loglevel = notify
[Proxy]
# 自行修改服务器地址、端口、用户名、密码
🇭🇰HK = http,1.2.3.4,443,username,password,tls=true
🇸🇬SG = custom,1.2.3.4,443,chacha20,password,http://abc.com/ss.module,ota=true
🇯🇵JP = http,1.2.3.4,443,username,password,tls=true
🇺🇸US = http,1.2.3.4,443,username,password,tls=true
[Proxy Group]
Auto = url-test,🇭🇰HK,🇸🇬SG,🇯🇵JP,url = http://www.gstatic.com/generate_204
Scene = ssid, default = Auto, cellular = 🇯🇵JP, "MOTO-3347" = 🇭🇰HK
Proxy = select, Auto,Scene, 🇺🇸US
[Rule]
# 规则部分请参照范例补充完善,此处仅示意
DOMAIN-KEYWORD,umeng.co,REJECT
DOMAIN-KEYWORD,google,Proxy,force-remote-dns
GEOIP,CN,DIRECT
FINAL,Proxy
[URL Rewrite]
^http://www.google.cn http://www.google.com.sg header
[SSID Setting]
"Apple store" suspend=true
[Proxy Group] 配置群组命名应和 [Rule] 规则中调用的一致,如:Proxy。
SG 这一行是示范 Shadowsocks 配置,例如:「Proxy = custom,1.2.3.4,443,chacha20,password,http://abc.com/ss.module,ota=true」,其中 custom不可更改,ss.module 的 URL 地址必须有效。有些 shadowsocks 服务提供商可能不支持 chacha20 加密,改成 rc4-md5

通过 URL 更新配置文件时需要注意,Surge「Download Conf from URL」下载地址要复制完整地址而不是短链方式,否则名称会被识别为短链而不是 Surge.conf。

具体配置和规则

Config 页面中点击「Edit」,滑动具体的配置内容直到 Rules 部分,点击展开即可对具体的规则进行编辑,当然在电脑上编辑规则会更方便直观一些。在 iPhone 上以「Edit in Text Mode」方式也能以文本的方式整体编辑规则,和在电脑上编辑比较就是复制和粘贴不太方便。

# 通用设置
[General]
loglevel = notify
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, localhost, *.local
ipv6 = false
[SSID Setting]
WiFi-SSID suspend = true
  • 记录日志的几种方式: verbose、info、notify、warning。默认是 notify,分析(Analytics)模块中可以查看具体的 Logs,日志对分析 Surge 的使用状况很有帮助,打开具体日志能看到 Surge 的行为和动作,如果遇到异常情况可以打开具体日志并通过右上角的分享将日志通过邮件发送给作者
  • 除非是在调试 Bug 的时候,平时请不要启动 verbose 级别的日志,因为日志需要保证完整写入,使用的是同步式地写入,性能上会有严重问题
  • IPv6 的支持,使用参数启用 IPv6 支持
  • WiFi suspend 功能,在特定 SSID 下停止 Surge。在这个 WiFi 下直接开启 Surge 不会被 suspend,只有从其他网络切换到这个网络时才会触发
# 代理设置
[Proxy]
Proxy = http,127.0.0.1,3120,username,password,tls=true
ProxyA = socks5, server.com, 1080, username, password, tls=true
ProxyC = http,127.0.0.1,3120
ProxyD = custom,1.2.3.4,443,chacha20,password,http://abc.com/ss.module,ota=true
#
Shadowsocks 配置中 custom不可更改,ss.module 的地址必须有效。
  • 可以创建多个代理服务器条目,规则中可以指定某条规则走哪个代理
  • SSLedge 使用 HTTPS,老式 APNp 用 HTTP
  • Surge 支持 HTTP, HTTPS 和 SOCKS5 的代理服务器,代理支持验证(用户名、密码)
# 规则设置
[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 的规则时可以开启。
规则按照顺序执行,注意不要出现先后矛盾的地方,同一个域名或后缀的规则定义不要重复,使用文本编辑器编辑时注意每条规则间的分隔逗号是英文标点。

高级设置中的选项

最右侧的图是分析模块中的统计(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 接口。

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)的多服务器并发查询。

对于一般用户,不建议开启 DNS Override 选项 (dns-server)。第三方 DNS 不一定比 ISP 的要好,还容易造成 CDN 缓慢。

分析网络活动

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

还可以通过规则结果测试(Rule Test Results)临时调整规则(点击某条记录),REJECT、DIRECT 或者指定它走某个代理。临时调整的规则会在停用 Surge 并再次打开 Surge 后失效。

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

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

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

Dump Traffic to Disk

Surge 2.0 版本 Replica 已经被完全合并入 Surge 中,在设置中启动 Dump Traffic to Disk 后,所有 HTTP 协议的流量将会被抓取并存储。再也不用因为 Request 中只显示 20 条记录而担心采集不到想跟踪的 URL 了。

Dump Traffic to Disk 启用后,对应的配置文件中的 replica = 0 会变成 replica = 1,如果不想通过 Edit 来启用 Dump 模式,也可以通过修改配置文件的方式来启用它。

启动 Dump Traffic to Disk 后,请求列表中,可以直接看到图片缩略图。

启用通知中心 Widget

1.2.0 版本进一步完善了通知中心插件,并新增了服务器的测速。启用通知中心的 Widget 后,可以便捷的通过通知中心开启和关闭 Surge,并能直接切换服务器。More 设置页中能定义在通知中心显示几个服务器项。

AUTO GROUP

当 Proxy 中选择使用 Auto Group 时,Surge 会并发尝试通过该 Group 下所有的服务器去发起到目标 url 的请求,并根据最优结果选择哪个服务器将被使用。默认间隔 600 秒后需要重新发起测试,更多详细的参数介绍可以参阅这里 trello.com

  • 不建议修改默认配置中的 URL 测试地址;
  • 为保证测速的基本公平,默认 URL 目标设置的是 gstatic.com 这样的在全球都有节点的 URL 作为测试目标;
  • 基于性能考虑,只支持使用 http 协议的 URL;
  • 为了避免资源浪费,Auto Group 中不应放入太多的线路,2–3 个即可。如 US 这样的线路不应该放入,因为几乎不可能赢得测试;
  • 不要使用 google.com 作为测试目标,这么做可能导致 proxy 服务器 ip 被加入黑名单,导致各种操作需要输入验证码;
增加 Auto 自动群组后与原来的配置之间的差别
Proxy & nProxy
Proxy GROUP 和 nProxy GROUP群组的作用:Proxy(Group 1)、nProxy(Group 2),正常情况(国内直连)下 Proxy 选代理,nProxy 选 DIRECT 直连;Proxy、nProxy 都选代理服务器就是全走代理。这样配置可以方便的切换成全局代理(主要是指 Mac 版)。

Surge 2.0 配置上的变化

Surge 2.0 在功能上有了很多变化,配置文件很多部分会随着你升级自动更新,例如[URL Rewrite] 网址后自动添加上「header」,[General]字段部分自动添加 ipv6 = true、replica = 0,[Proxy] 字段部分自动给 HTTPS 代理添加「tls=true」等等。

还有些特性需要手动添加才可以,如:SSID 群组的支持、Surge-Cli 命令行的支持。

Surge 2.0 配置上的变化

上图所示 scene 所在的一行就是添加对 SSID 群组的支持,SSID-GROUP 的作用是让 Surge 根据网络环境自动切换,可以和 Auto 搭配使用。

Scene = ssid, default = Auto, cellular = SG, “SSID NAME1” = HK, “SSID NAME2” = JP
Proxy = select,Auto,Scene,JP,US

示例说明:连接到公司的 Wi-Fi “MOTO-3347”时自动选择代理(Auto),在 4G 环境下走 SS,SSID 不匹配的其他 Wi-Fi 环境里连接 JP。SSID 名称如果存在空格需要用英文引号标注。

针对 Wi-Fi 环境,还有另一个参数 SSID Setting,和上面的 SSID GROUP 参数不同,SSID Setting 用来处理的状况是遇到特定的 Wi-Fi 时关闭 Surge。

[SSID Setting]
“Apple store” suspend=true

那些场景需要用到 SSID Setting?例如,连接到行车记录仪的 Wi-Fi,或者无线路由器已经自带翻墙,这些情况下都不需要启用 Surge。SSID Setting 中可以定义 Surge 自动连接到这些网络时关闭(从其他网络切到这个 WiFi 才会触发),示例中的 Apple store 可以替换成你要定义的 Wi-Fi SSID 名称。

replica = 0

配置文件中的 replica = 0 对应是 Dump Traffic to Disk 功能,默认为 0 是不启用状态,启用后会变成 replica = 1,Dump 模式可以保存所有 HTTP 协议的访问,便于跟踪和分析。

external-controller-access = apw@0.0.0.0:6158

添加对 Surge-Cli 命令行的支持后,可以在 Mac 端运行命令行来访问 Surge,具体配置介绍可以阅读《Surge for Mac 简明指南》。

版本更新

  • 1.1.3 More 标签中摇一摇获取 Mac Beta 版本。
  • 1.2.0 (471) 版本加入 URL Rewrite 功能,用于解决 Google.cn 跳转问题。
  • 1.2.0 (476) 版本加入 Proxy Group 特性,废弃原「服务器覆盖文件方式」,解决了持续已久的 UDP 问题,Bypass-tun 设置只需保留内网段即可,不再需要加入中国段的全部 IP。
  • 1.2.0 (494) 版本加入服务器测速,修复 Cannot alloc memory 问题,界面变的更扁平化
  • 1.2.0 (497) 版本可以在通知中心切换服务器
  • 1.2.0 (508) 如果正在使用的配置文件通过 iCloud 被更新,Surge 会主动退出
  • 1.2.3 (545) 增加 Auto Group 群组,自动测速切换服务器。
  • 1.2.3 (560) Shadowsocks 协议加入 OTA 支持
  • Surge 2.0,Surge iOS 有了很多变化,具体细节可以看这里
  • Surge 2.0 (610),GEOIP 规则可以正确作用于 IPv6 和 IPv6 Mapped IPv4 地址了(解决最近微信刷新缓慢问题,之前 skip-proxy 加入的 ::ffff 可以删掉了)

常见问答

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

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

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

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

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

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

更多问答:https://trello.com/b/qy4sDvxg/surge

参考文章:

本文档适用于:Surge 2.0(Bulid 629)
内容制作软件:Ulysses、OmniGraffle、Snagit