Surge完全使用指南
Surge这个是iOS9上的神器,作者虽然在官网说明Surge是开发者的网络调试工具,但是这个工具自打上架以来,其最广泛的应用场景绝对包括 iOS9梯子 这一刚需,iOS9上有了Surge之后,iPhone越狱的理由又少了一条。Surge会接管全局的(几乎)所有通信,所以所有网络方面的电量消耗都会被算在Surge头上,实际上Surge的运行功耗很少,使用中也不会感到Surge对电量有明显影响。
一、
主要功能
Surge的主要功能包括以下:
截获 iOS 上的所有应用程序的 HTTP/HTTPS/TCP 流量,将其重定向到 HTTP/HTTPS/SOCK5 代理服务器转发。
重载 iOS 蜂窝网络下的 DNS 服务器配置,使得 iOS 设备工作在蜂窝网络之下时,开发者也能够配置 DNS 服务器。
记录设备所发出/接收的 HTTP 请求/应答首部信息。
配置基于 domain, domain suffix, domain keyword, CIDR IP 以及 GeoIP 的过滤规则。
对设备上 WIFI、蜂窝网络以及代理连接会话的流量进行统计以及测速。
从 URL 或 iTunes 导入/导出配置文件。
重度使用场景下有很高的性能以及适应性。
基于 domain 规则屏蔽广告。
完全兼容蜂窝网络。
二、
软件构架
为了让使用者能够更好地理解Surge的各项配置的作用,作者在官网上特意花了一个章节描述其软件构架
Surge主要包括 Surgeproxy server 与 SurgeTUN interface 这两个组件,分别负责HTTP/HTTPS代理以及IP代理。
Surge Proxy server:Surge 功能开启后将自动代理 iOS 设备上所有的 HTTP/HTTPS ,同时对所有的 HTTP/HTTPS 代理使用同一个代理会话,以最高限度提高 Surge 的代理性能。Surge 可以通过 skip-proxy 指定哪些流量不被 proxy server 所代理
Surge TUN interface:iOS 上大部分应用程序的网络交互使用 HTTP/HTTPS,但也存在部分应用程序(如:iOS邮件客户端、Facebook客户端)等应用程序使用其他的通讯方式(如:SPDY等),这些应用无法被 Proxy server 所代理,这就需要使用更为底层的TUN interface 隧道方式。Surge 可以通过 bypass-tun 指定哪些数据流量不送 TUN interface 处理
注意:当前SurgeTUN interface 只能处理TCP流量,对于ICMP、UDP流量将被直接丢弃,因此需要通过配置 bypass-tun 选项来放行这些流量。
三、
配置文件
Surge可以通过 URL下载 、 iTunes更新 、iCould共享、Dropbox分享等多种方式导入配置文件——.conf(UncodeUTF-8),配置文件由多个段构成,主要包括:General、Proxy、Rule、Host等几个部分。
1.General——通用配置
通用配置段[general]的主要配置如下:
[General]loglevel = verbosebypass-system = trueskip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.localbypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12dns-server = 8.8.8.8, 8.8.4.41)loglevel
这个是记录日志的几种方式,按日志输出从多到少分别为verbose> info > notify > warning,默认为notify。Analytics 模块中可以查看具体的Logs,日志对分析Surge的使用状况很有帮助,打开具体日志能看到Surge的行为和动作。
一般情况下不要设置为verbose,这会大幅度降低Surge的性能,如果只是做为梯子使用,建议设置为输出最少的warning级别。
2)bypass-system
全局忽略配置,此配置列表中指定的服务器请求流量将不会被Surge所处理(包括Proxyserver 与TUNinterface),在一般使用中,请将以下服务器列入bypass-system,否则可能会出现一些奇怪问题(比如:应用程序的推送被延迟),添加Apple常用的服务器域名清单:
api.smoot.apple.comconfiguration.apple.comxp.apple.comsmp-device-content.apple.comguzzoni.apple.comcaptive.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 。
3)skip-proxy
skip-proxy用于指定哪些服务器的 域名 和 IP 不被Proxyserver 代理,常用的有以下配置方式
顶级域名,如 apple.com
包含特定关键字的域名,如 *apple.com
特定子域名,如 store.apple.com
特定的IP地址以及IP地址段,如 192.168.2.11,192.168.2.*,192.168.2.0/24
做梯子使用时,可以考虑在这里添加常用的应用的域名以及整个中国区域的IP地址段。
需要特别说明的是主流应用程序,特别是现象级的应用,一般都广泛采用CDN技术对服务器请求进行加速,这种情况下同个域名在不同的地区及同地区不同时间都可能会请求到不同IP地址,因此要通过添加域名的方式匹配,而不能采用简单地添加指定IP地址。
4)bypass-tun
bypass-tun用于指定哪些服务器的域名/IP不被TUNinterface 转发,配置的方式同skip-proxy,需要特别注意的是Proxyserver 所代理的流量不会被TUNNinterface 代理,因此在配置bypass-tun时需要结合skip-proxy进行综合考虑。
5)dns-server
dns-server用于指定iOS设备所使用的域名解析服务器,iOS本身是不允许修改蜂窝网络下的域名解析服务器,通过使用Surge的dns-server配置则可以达到修改蜂窝网络域名解析服务器的目的。
2.Proxy——代理配置
代理配置段 [Proxy] 用于配置HTTP、HTTPS以及SOCKS5代理服务器(梯子的关键),配置的例子如下:
[Proxy]ProxyA = http, 1.2.3.4, 3128ProxyB = https, 1.2.3.4, 443, username, passwordProxyC = socks5, 1.2.3.4, 3129ProxyD = custom,1.2.3.4,443,chacha20,password,module,ota=true这个例子中,配置了四个服务器,分别对应于HTTP、HTTPS、SOCKS5、SS这三种代理机制,Surge可以针对这四个代理指定多套不同的配置:
指定 HTTP/HTTPS 代理的用户名与密码(可选)
指定 HTTPS 代理的加密机制,如 ProxyC = https, example.server.com, 443, username, password, cipher=TLS_RSA_WITH_AES_128_GCM_SHA256
指定 TLS 会话重传,HTTPS 代理默认打开 False Start与ECN功能。(未来版本将支持 on/off 配置)
如今最流行的shadowsocks,不必多说
3.Rule——过滤规则
[Rule]段用来配置Surge的过滤规则,规则按序存储,匹配时从上到下,先匹配先生效。因此对于常用的规则应该放在前头,以提高性能,配置的例子如下:
[Rule]//基于域名判断并屏蔽(REJECT)请求DOMAIN,pingma..com,REJECT //基于域名后缀判断屏蔽(REJECT)请求DOMAIN-SUFFIX,flurry.com,REJECT//基于关键词后缀判断走代理(Proxy),强制不尊重系统代理的请求走 Packet-Tunnel-ProviderDOMAIN-KEYWORD,google,Proxy,force-remote-dns//基于域名后缀判断请求走代理A(Proxy)DOMAIN-SUFFIX,google.com,ProxyA //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 //其他的走代理BFINAL ProxyBSurge支持DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL这六种规则,每条规则都由类型、匹配域、行为 这三个部分构成(除了 FINAL类型外),每个部分使用逗号隔开,每条规则可指定的行为包括:代理(Proxy),不代理(DIRECT)和丢弃(REJECT)这三种。
六种过滤规则的配置如下:
DOMAIN,精确指定域名,DOMAIN,www.apple.com,Proxy,匹配所有发往 www.apple.com 的流量
DOMAIN-SUFFIX,按域名后缀匹配,DOMAIN-SUFFIX,apple.com,Proxy,匹配所有发往以 apple.com 结尾的流量,如 store.apple.com,mail.apple.com等,但不包括 issue-apple.com
DOMAIN-KEWORD,按域名关键字匹配,DOMAIN-KEYWORD,google,Proxy,匹配所有域名中包含 google 的流量,如: www.google.com, issue-google.cn 等
IP-CIDR,按 IP 地址五类匹配,IP-CIDR, 192.168.0.0/16,DIRECT,匹配所有到内网 192.168.0.0/16 的流量
GEOIP,按地理位置IP匹配,GEOIP,US,DIRECT 匹配所有美国IP的流量
FINAL,最终匹配的行为,这个必须放在最后,指定不能在前面任意一个规则匹配的流量行为
规则配置的高级选项中,「ForceRemote DNS」的作用主要是用来解决本地DNS解析受到污染的问题,在添加针对Google、Twitter的规则时可以开启。
注:REJECT过滤规则结合广告域名匹配可以过滤掉应用程序内部广告,这个真的很棒。
1)no-resolve
当有Rule中有GEOIP和IP-CIDR配置时,Surge将对所有基于域名的请求流量进行域名解析代理,通过可选配置no-resolve 可以指定特定流量不运行域名解析代理,如:
GEOIP,US,DIRECT,no-resolve IP-CIDR,172.16.0.0/12,DIRECT,no-resolve2)force-remote-dns
基于TCP协议的应用程序在TUNinterface 模式中需要请求服务时,首先会发送域名解析请求,之后再发送TCP数据,如果域名无法在本地被解析,可以通过 force-remote-dns 配置域名在远程代理上进行解析,如:
DOMAIN,www.apple.com,Proxy,force-remote-dnsDOMAIN-SUFFIX,apple.com,Proxy,force-remote-dnsDOMAIN-KEYWORD,google,Proxy,force-remote-dns注意:这个仅对TUNinterface 有效,对于ProxyServer 而言,所有的请求的DNS都是在远程代理上解析的。
4.保护配置
所有以#!REQUIRE-PROTECTED开头的配置都是保护配置,保护配置在Surge软件中将不会被显示,在你将私人配置发送给其他人共享时可以将私有信息设为保护配置。
注:这其实也没啥用,配置文件本身是可读的,下载文件直接看就是了。
5.URL Scheme
Surge支持URLScheme 满足重度/效率使用者的需求,不过按我估计,大概是作者不想被喷,于是就做了最基本的URLScheme,不然怎么会不支持切换配置文件的URLScheme,当前Surge仅支持三种行为以及一个选项:
行为:start,stop,toggle
surge:///start,使用预先选定的服务器配置开启 Surge 服务
surge:///stop,关闭 Surge 服务
surge:///toggle,打开/关闭 Surge 服务
选项:autoclose=true,当行为执行完毕时,自动退出 Surge 软件surge:///toggle?autoclose=true
四、
分析网络活动
Surge分析模块中能直观看到Surge启动后最近的访问请求(RecentRequests)。
还可以通过规则结果测试(RuleTest Results)临时调整规则(点击某条记录),REJECT、DIRECT或者指定它走某个代理。临时调整的规则会在停用Surge并再次打开Surge后失效。
通过规则结果测试(RuleTest Results)可以方便地跟踪当前App的网络访问,临时改变规则后可以观察App的实际运行情况,如果有效随后就能补充到主配置文件中。
在iPad分屏模式的使用场景中,我经常干的一件事就是打开某个国产应用,然后分屏查看Surge里TestResults的网络访问情况,侦查那些和应用功能无关的隐私或广告请求,然后记录下来添加到自己的规则列表中。更多规则设置的内容可以阅读《Surge-如何抓包定制规则》
如果说Surge最吸引人的地方在哪里,估计就是这种透明的网络访问方式,在轻松访问各种网络服务以外还是一个强有力的调试工具。安全和隐私已经变成只有少数人才能掌控的东西,学习掌握一款这样的工具还是很重要的。
五、
DumpTraffic to Disk
Surge2.0 版本Replica已经被完全合并入Surge中,在设置中启动DumpTraffic to Disk 后,所有HTTP协议的流量将会被抓取并存储。再也不用因为Request中只显示20条记录而担心采集不到想跟踪的URL了。
DumpTraffic to Disk 启用后,对应的配置文件中的replica= 0 会变成replica= 1,如果不想通过Edit来启用Dump模式,也可以通过修改配置文件的方式来启用它。
启动DumpTraffic to Disk 后,请求列表中,可以直接看到图片缩略图。
六、AUTOGROUP
当Proxy中选择使用AutoGroup 时,Surge会并发尝试通过该Group下所有的服务器去发起到目标url的请求,并根据最优结果选择哪个服务器将被使用。默认间隔600秒后需要重新发起测试,更多详细的参数介绍可以参阅这里 trello.com。
不建议修改默认配置中的 URL 测试地址;
为保证测速的基本公平,默认 URL 目标设置的是 gstatic.com 这样的在全球都有节点的 URL 作为测试目标;
基于性能考虑,只支持使用 http 协议的 URL;
为了避免资源浪费,Auto Group 中不应放入太多的线路,2–3 个即可。如 US 这样的线路不应该放入,因为几乎不可能赢得测试;
不要使用 google.com 作为测试目标,这么做可能导致 proxy 服务器 ip 被加入黑名单,导致各种操作需要输入验证码。
七、
Surge2.0 配置上的变化
Surge2.0 在功能上有了很多变化,配置文件很多部分会随着你升级自动更新,例如[URLRewrite] 网址后自动添加上「header」,[General]字段部分自动添加ipv6= true、replica= 0,[Proxy]字段部分自动给HTTPS代理添加「tls=true」等等。
还有些特性需要手动添加才可以,如:SSID群组的支持、Surge-Cli命令行的支持。
版本更新
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 可以删掉了)