AlickGuo +

好用到令人发指的 Surge 工具

Surge 这个是 iOS9 上的神器,作者虽然在官网说明 Surge 是开发者的网络调试工具,但是这个工具自打上架以来,其最广泛的应用场景绝对包括 iOS9梯子 这一刚需,iOS9 上有了 Surge 之后,iPhone 越狱的理由又少了一条。

写在最前面

如果只是想使用 Surge 来作 Shadowsocks 的梯子,而不想了解它的具体工作方式与配置,只需要四步操作:

操作完成之后,状态栏出现vpn字样,此时 iOS 设备即可以科学上网了,同时还自带各种视频客户端的广告过滤(媳妇刚需,码农泡妹必备)。

对 Surge 本身没有兴趣的同学,以下的内容可以直接忽略了。

主要功能

Surge 的主要功能包括以下:

与 iOS9之前需要越狱才能使用的 Shadowsocks 比较,Surge 在 iPhone 有强大的可配置性(过滤规则)、数据统计以及日志,较为遗憾的是由于 iOS 沙盘的限制,Surge 无法实现 应用内代理 功能,希望后续有对应的越狱插件可以弥补这个不足。

软件构架

为了让使用者能够更好地理解 Surge 的各项配置的作用,作者在官网上特意花了一个章节描述其软件构架

Surge Architecture

Surge 主要包括 Surge proxy serverSurge TUN interface 这两个组件,分别负责 HTTP/HTTPS 代理以及 IP 代理。

注意: 当前 Surge TUN interface 只能处理 TCP 流量,对于 ICMP、UDP 流量将被直接丢弃,因此需要通过配置 bypass-tun 选项来放行这些流量。

配置文件

Surge 可以通过 URL下载iTunes更新 这两种方式导入配置文件,配置文件由多个段(Section)构成,主要包括:General, Proxy, Rule等几个部分。

通用配置

通用配置段[general]的主要配置如下:

[General]
loglevel = verbose
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
loglevel

Surge输出的日志信息级别,按日志输出从多到少分别为 verbose,info,notify与warning,默认为 notify,一般情况下不要设置为 verbose ,这会大幅度降低 Surge 的性能,如果只是做为梯子使用,建议设置为输出最少的 warning 级别。

bypass-system

全局忽略配置,此配置列表中指定的服务器请求流量将不会被 Surge 所处理(包括 Proxy server 与 TUN interface),在一般使用中,请将以下服务器列入 bypass-system ,否则可能会出现一些奇怪问题(比如:应用程序的推送被延迟),添加 Apple 常用的服务器域名清单:

api.smoot.apple.com
configuration.apple.com
xp.apple.com
smp-device-content.apple.com
guzzoni.apple.com
captive.apple.com
*.ess.apple.com
*.push.apple.com
*.push-apple.com.akadns.net

同时也将 Apple 的服务器 IP 地址段过滤规则加上 IP-CIDR, 17.0.0.0/8, DIRECT, no-resolve

skip-proxy

skip-proxy 用于指定哪些服务器的域名和IP不被 Proxy server 代理,常用的有以下配置方式:

做梯子使用时,可以考虑在这里添加常用的应用的域名以及整个中国区域的 IP 地址段。

需要特别说明的是主流应用程序,特别是现象级的应用,一般都广泛采用 CDN 技术对服务器请求进行加速,这种情况下同个域名在不同的地区及同地区不同时间都可能会请求到不同 IP 地址,因此要通过添加域名的方式匹配,而不能采用简单地添加指定 IP 地址。

bypass-tun

bypass-tun 用于指定哪些服务器的域名/IP不被 TUN interface 转发,配置的方式同 skip-proxy,需要特别注意的是 Proxy server 所代理的流量不会被 TUNN interface 代理,因此在配置 bypass-tun 时需要结合 skip-proxy 进行综合考虑。

dns-server

dns-server 用于指定 iOS 设备所使用的域名解析服务器,iOS 本身是不允许修改蜂窝网络下的域名解析服务器,通过使用 Surge 的 dns-server 配置则可以达到修改蜂窝网络域名解析服务器的目的。

代理配置

代理配置段 [Proxy] 用于配置 HTTP, HTTPS 以及 SOCKS5 代理服务器(梯子的关键),配置的例子如下:

[Proxy]
ProxyA = socks5, example.server.com, 3129
ProxyB = http, example.server.com, 3128
ProxyC = https, example.server.com, 443, username, password

这个例子中,配置了三个服务器,分别对应于 HTTP, HTTPS 以及 SOCKS5 这三种代理机制,Surge 可以针对这三个代理指定多套不同的配置:

过滤规则

[Rule]段用来配置 Surge 的过滤规则,规则按序存储,匹配时从上到下,先匹配先生效,因此对于常用的规则应该放在前头,以提高性能,配置的例子如下:

[Rule]
DOMAIN-SUFFIX,company.com,ProxyA
DOMAIN-KEYWORD,google,DIRECT
GEOIP,US,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL ProxyB

Surge 支持 DOMAIN,DOMAIN-SUFFIX,DOMAIN-KEYWORD,GEOIP,IP-CIDR与FINAL 这六种规则,每条规则都由 类型,匹配域以及行为 这三个部分构成(除了 FINAL 类型外),每个部分使用逗号隔开,每条规则可指定的行为包括:代理(Proxy),不代理(DIRECT)和丢弃(REJECT)这三种。

六种过滤规则的配置如下:

注:REJECT 过滤规则结合广告域名匹配可以过滤掉应用程序内部广告,这个真的很棒。

no-resolve

当有 Rule 中有 GEOIP 和 IP-CIDR 配置时,Surge 将对所有基于域名的请求流量进行域名解析代理,通过可选配置no-resolve 可以指定特定流量不运行域名解析代理,如:

GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
force-remote-dns

基于 TCP 协议的应用程序在 TUN interface 模式中需要请求服务时,首先会发送域名解析请求,之后再发送 TCP 数据,如果域名无法在本地被解析,可以通过 force-remote-dns 配置域名在远程代理上进行解析,如:

DOMAIN,www.apple.com,Proxy,force-remote-dns
DOMAIN-SUFFIX,apple.com,Proxy,force-remote-dns
DOMAIN-KEYWORD,google,Proxy,force-remote-dns

注意: 这个仅对 TUN interface 有效,对于 Proxy Server 而言,所有的请求的 DNS 都是在远程代理上解析的。

保护配置

所有以#!REQUIRE-PROTECTED开头的配置都是保护配置,保护配置在 Surge 软件中将不会被显示,在你将私人配置发送给其他人共享时可以将私有信息设为保护配置。

注:这其也没啥用,配置文件本身是可读的,下载文件直接看就是了。

URL Scheme

Surge 支持 URL Scheme 满足重度/效率使用者的需求,不过按我估计,大概是作者不想被喷,于是就做了最基本的 URL Scheme,不然怎么会不支持切换配置文件的 URL Scheme,当前 Surge 仅支持三种行为以及一个选项:

Blog

Opinion

Project