Support | 微信 & TG: @scomper

Surge 新手使用指南

2015.10.13 08:46

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。

服务器配置(Proxy Group)

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

采用 Proxy Group 的方式后,原来的「服务器配置覆盖文件」就没有必要再保留了。

.conf 文件需要在电脑上编辑并导入 Surge,不支持在 iPhone 里进行编辑。

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

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

Main.conf

    [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
    # ShadowSocks,custom不要变,修改服务器地址、端口、加密方式、密码、Shadowsocks 模块URL
    🇸🇬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

SSLEdge 和 ShadowSocks 的差别只是 Proxy 代理服务器那一行,服务器覆盖配置中同理,「Proxy Group」配置群组命名应和 Rule规则中调用的一致,如:Proxy。

具体配置和规则

    [General] # 通用设置
    loglevel = notify
  • 记录日志的几种方式: 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 接口。

Skip Proxy 和 Bypass TUN 选项的功能与区别(By @Blankwonder)
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或者指定它走某个代理。

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

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

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

常见问答

Q:为什么 Surge 一直显示是下载状态没有安装成功?
A:不能开启 Surge 的同时更新它自己,需要先停用 Surge,等更新完成后再打开 Surge。

Q:修改配置文件中的规则后会立即生效吗?
A:不会,需要到 Surge 中停止(Stop)后重新开始(Start)。

Q:编辑服务器覆盖文件的时候提示「不能解析Final」是什么原因?
A:服务器覆盖配置文件不同于完整的 Main.conf 文件,需要在 Mac 上编辑好以后导入到 Surge 中才可以,目前还不支持直接在 iPhone 里进行编辑。

Q:Surge 的配置文件中的服务器该如何填写?
A:Surge 是一个网络调试工具,并不提供代理服务器,需要另行购买或自行搭建服务器,具体的服务器地址和端口可以咨询服务器提供商。

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


Surge - Web Developer Tool and Proxy Utility 是一款开发者调试和流量跟踪工具,需要一定的专业背景知识才可使用,购买前推荐先阅读作者写的《Surge App Store 购买前说明

请注意不要把服务器地址泄露到网上,服务提供商可能会因此禁用你的账号。发送截图、log 请务必隐去服务器地址和用户密码。

参考文章:
@scavin:Surge — 牛逼的网络开发与调试工具
@Paveo:Surge, the missing tool for iOS
@soolby:Surge 「人话版」功能介绍
@Surge:官方使用手册

Comments
Write a Comment