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中。
配置文件中服务器的部分需要填写,如果不知道服务器的地址和端口是多少,不妨打开 GoagentX 停止服务后选择不同的服务器并查看具体地址,你既可以直接在 Surge 中填写,也可以直接编辑 .conf 配置文件最后再导入到 Surge。
对于大多数人来说,基于范例文件编辑加上自己的服务器(Proxy)地址 Surge 就可以开始工作了。规则部分可以借鉴范例文件进行补充,规则并不是越多越好,除了利用 DNS 缓存对经常访问的网站进行加速外,仅需要补充本地 DNS 无法正常解析的域名到规则中。
如果您使用的是 HTTPS 代理,Surge 会校验服务器证书名称,请使用域名进行配置,不要直接使用 IP。
多个服务器配置(服务器覆盖文件)
注意:1.2.0(476) 版本后改为和Mac 版一致的群组(Proxy Group)方式,直接跳到下一节。
配置文件的 Proxy 部分可以写入多个服务器地址,Surge 会将当前命名为「Proxy」的地址作为当前使用地址,这种方式每次想切换代理服务器时比较麻烦,例如我想使用香港代理服务器,需要找到 HK 条目,并将现有「 Proxy = 」中的 Proxy 改成别的名字,然后将「 HK = 」中的 HK 改成 Proxy,说起来都比较绕。
多个服务器切换更简单的方式是单独写「服务器配置覆盖文件」,在这种覆盖文件中只需要指向自定义配置的主文件(如图示中HK(HKG3).conf 第一行),然后写上服务器地址的部分(Proxy 定义部分)即可。
服务器覆盖文件不同于完整的 Main.conf 文件,需要在电脑上编辑并导入 Surge,不支持在 iPhone 里进行编辑。
主文件(如,Main.conf)是个独立的标准文件,所以其中 Proxy 部分是必须的,服务器覆盖配置文件(如,HK.conf、TYO.conf)中只写一个服务器地址,并且这个地址不需要和 Main.conf 的中 Proxy 部分形成对应关系,如果你打算使用 5 个服务器切换,Main.conf 的 Proxy 部分可以写 1 ,然后其他覆盖配置文件里分别写 2、3、4、5 的地址,在 Surge 主界面中选中哪个使用哪一个。
多个服务器配置(Proxy Group)
1.2.0 (476) 版本以后,iOS 版和 Surge Mac 的配置文件再度得到了统一,在一个配置文件中就可以方便的定义多个可供选择的服务器。通过新增加的 [Proxy Group] 参数来定义。
采用 Proxy Group 的方式后,原来的「服务器配置覆盖文件」就没有必要再保留了。
为了显示上的直观,图示服务器覆盖文件的文件名加入了表情符号(原生拼音输入法输入香港??)。 Dropbox 目前还不支持同步文件名包含表情符号的文件,所以如果要传到 Surge 里请使用 iTunes 或 iCloud Drive 方式。
Proxy Group 方式每个配置文件是相对独立的,可以包含各自的服务器地址和不同的规则。例如,按不同的规则的定义来命名区分成不同的配置文件,或者用不同的命名区分服务器提供商。
[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 loglevel = notify
[Proxy] # 自行修改服务器地址、端口、用户名、密码 DIRECT = direct ??HK = https,1.2.3.4,443,username,password ??SG = custom,1.2.3.4,443,rc4-md5,password,http://custom/ss.module ??JP = https,1.2.3.4,443,username,password ??US = https,1.2.3.4,443,username,password
[Proxy Group] Proxy = select,DIRECT,??HK,??SG,??JP,??US
[Rule] # 规则部分请参照范例补充完善,此处仅示意 DOMAIN-KEYWORD,umeng.co,REJECT DOMAIN-KEYWORD,google,Proxy,force-remote-dns
GEOIP,CN,DIRECT FINAL,Proxy
[Proxy Group] 配置群组命名应和 [Rule] 规则中调用的一致,如:Proxy。
通过 URL 更新配置文件时需要注意,Surge「Download Conf from URL」下载地址要复制完整地址而不是短链方式,否则名称会被识别为短链而不是 Main.conf。
具体配置和规则
# 通用设置 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
- 记录日志的几种方式: verbose、info、notify、warning。默认是 notify,分析(Analytics)模块中可以查看具体的 Logs,日志对分析 Surge 的使用状况很有帮助,打开具体日志能看到 Surge 的行为和动作,如果遇到异常情况可以打开具体日志并通过右上角的分享将日志通过邮件发送给作者
- 除非是在调试 Bug 的时候,平时请不要启动 verbose 级别的日志,因为日志需要保证完整写入,使用的是同步式地写入,性能上会有严重问题
# 代理设置 [Proxy] Proxy = https,127.0.0.1,3120,username,password ProxyA = socks5,127.0.0.1,3129 ProxyC = http,127.0.0.1,3120
- 可以创建多个代理服务器条目,规则中可以指定某条规则走哪个代理
- 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 的规则时可以开启。
规则按照顺序执行,注意不要出现先后矛盾的地方,同一个域名或后缀的规则定义不要重复,使用文本编辑器编辑时注意每条规则间的分隔逗号是英文标点。
高级设置中的选项
最右侧的图是分析模块中的统计(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 接口。
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 1.2.0 (471) 版本新加入 URL Rewrite 功能
[URL Rewrite]
^http://www.google.cn http://www.google.com
每行两个参数,以空格分隔,第一个是匹配用的正则表达式,第二个是替换的内容。正则的输入字符串是完整的 URL(包含 http://),输出的字符串也必须以http:// 开头。该功能只对非 https 请求有效。
分析网络活动
Surge 分析模块中能直观看到 Surge 启动后最近地访问请求(Recent Requests)。
还可以通过规则结果测试(Rule Test Results)临时调整规则(点击某条记录),REJECT、DIRECT 或者指定它走某个代理。
通过规则结果测试(Rule Test Results)可以方便地跟踪当前 App 的网络访问,临时改变规则后可以观察 App 的实际运行情况,如果有效随后就能补充到主配置文件中。
在 iPad 分屏模式的使用场景中,我经常干的一件事就是打开某个国产应用,然后分屏查看 Surge 里 Test Results 的网络访问情况,侦查那些和应用功能无关的隐私或广告请求,然后记录下来添加到自己的规则列表中。更多规则设置的内容可以阅读《Surge -定制自己的规则配置》
如果说 Surge 最吸引人的地方在哪里,估计就是这种透明的网络访问方式,在轻松访问各种网络服务以外还是一个强有力地调试工具。安全和隐私已经变成只有少数人才能掌控的东西,学习掌握一款这样的工具还是很重要的。
版本更新
- 1.1.3 More 标签中摇一摇获取 Mac Beta 版本。
- 1.2.0 (471) 版本加入 URL Rewrite 功能,用于解决 Google.cn 跳转问题。
- 1.2.0 (476) 版本加入 Proxy Group 特性,废弃原「服务器覆盖文件方式」,解决了持续已久的 UDP 问题,Bypass-tun 设置只需保留内网段即可,不再需要加入中国段的全部 IP。
常见问答
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。
更多问答:https://trello.com/b/qy4sDvxg/surge
Surge — Web Developer Tool and Proxy Utility 是一款开发者调试和流量跟踪工具,需要一定的专业背景知识才可使用,购买前推荐先阅读作者写的《Surge App Store 购买前说明》。
问题反馈请将日志(verbose 级别)发送到 surge-support@surge.run,并在邮件中注明使用的版本和配置文件地址。请注意不要把服务器地址泄露到网上,服务提供商可能会因此禁用你的账号。发送截图、log 请务必隐去服务器地址和用户密码。
参考文章:
- @scavin:Surge — 牛逼的网络开发与调试工具
- @Paveo:Surge, the missing tool for iOS
- @soolby:Surge 「人话版」功能介绍
- @Surge:官方使用手册
本文档适用于:Surge 1.2.0(Bulid 478)
内容制作软件:Ulysses、OmniGraffle、Snagit
原创文章,作者:彩虹,如若转载,请注明出处:https://www.somebear.com/archives/978