前言

前几天 Instagram 更新,让我想起了这个很久没开的 App, 进去一看发现图片不能显示。研究了一下 Surge 的 log 发现是更换了图片的网址,那就好办了,新建一条规则就搞定。

DOMAIN-SUFFIX,cdninstagram.com,Proxy,force-remote-dns,然后这些关键字都是什么意思?之前一直不明白规则是怎么回事,正好没什么事就仔细研究了一下 Surge 的官方教程: Surge 新手使用指南Surge for Mac 简明指南,终于明白的差不多了,之前看的教程很多坑啊,很多地方没说明白,用法也不是正确的,今天就写一下容易出错的地方,同时实现了 iPhone 和 Mac 上自由切换直连、代理还是全局上网。如果这俩教程你打不开不要奇怪,那是因为 Medium 刚刚被墙了。所以好好配置科学上网的工具更是当务之急了。

iOS 教程

首先你应该已经买了 Surge,并且已经有了 Shadowsocks 的 账号

图1

[General]

这是我配置好的规则截图。[General]部分你可以直接把下边的拷贝到你的规则里,具体怎么回事就不解释了,作者教程里有写。(这里一定要通过 iCloud 或者别的方式同步到电脑上编辑,手机上不支持下边的custom这种方式)。

1
2
3
4
5
[General]
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, ::ffff:0:0:0:0/1, ::ffff:128:0:0:0/1
bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
dns-server = 119.29.29.29, 223.5.5.5, 114.114.114.114
loglevel = notify

[Proxy]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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

这是官方给出的示例

  • 第一条中的direct是系统保留字,不能写错,DIRECT是别名,可以任意写,跟下边 [Proxy Group] 中对应
  • 注意看第这一条:🇸🇬SG = custom,1.2.3.4,443,rc4-md5,password,http://custom/ss.module

这是用 ss 方式必须遵守的格式。开头必须是 custom,其中 custom 在手机上是选不了的,只能在电脑上用编辑器编写(手机上的 Edit mode 也可以但是打字太麻烦了)。然后填写你的地址端口什么的。然后看最后这里:http://custom/ss.module,这个是 ss 模块,这里只是示例所以不起作用,所以按照图片里我填的这个:http://nat.pw/ss.module才会起作用,网上也有其他的请自行搜索。

这是其中的一个服务器地址的规则。如果你的 ss 服务商提供了多个地址,那么每一条都必须遵照这种规则,就像图片里那样。我之前以为只要一条规则填写过 module 模块就可以其实是不行的。

[Proxy Group]

这个是新功能。配合这个功能就可以实现自由选择是走直连、代理或者全局的方式了。

图2

这个是我配置完的界面,结合图1可以看到分为两个组:PROXY 和 DIRECT(会自动显示为全大写),每个组里是自己设置的服务器。你可以自己给组取名字,比如FUCKGFWFREEDOM

这里要注意:

  1. 每个组都要有select,这个代表当前选中的服务器。
  2. [Proxy Group] 中罗列的服务器必须在 [Proxy] 字段进行了具体的定义,而且可用,但是反过来 [Proxy]字段中可以写很多服务器, [Proxy Group] 可以只包含其中几个。
  3. 如果你配置了多个组,每个组包含不同的代理,可以在规则后填入对应的组名来实现按不同的规则的定义来命名区分成不同的配置文件,或者用不同的命名区分服务器提供商。
  4. 如果你用了 emoji 图标,注意图标和字母中间不要有空格

配置完之后如果想:

  • 直连,就是完全不走代理,该撞墙撞墙,那么就 PROXY 和 DIRECT 组都选择DIRECT
  • 按照规则被墙的走代理不被墙的直连,那就第一组选择除了 DIRECT 之外的服务器组别,第二组选择 DIRECT
  • 全部走代理,那就两组都不要选DIRECT

注意这里可能会产生困惑,我再啰嗦两句:第一个 DIRECT 是组名,第二个是代理名。两个都可以任意起名,只不过要对应好我之前说的。

如果想要以上的不出现问题,那么在 [Rule] 字段必须正确配置,所有需要走代理的规则后填写第一个组名,然后倒数第二行GEOIP,CN,第二个组名这样。注意第一张图片里我的配置截图没截取到,只显示了[Host],这个以后再说。

[Rule]

这里就是主要起作用的部分了。你可以配置适合自己的规则,也可以在网上下载别人配好的。但是建议自己弄明白方便以后 DIY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 规则设置
[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
  • 结尾必须是FINAL,指的是如果之前所有规则都不匹配的话应该如何处理,形成了一个闭环。
  • 注意看规则里的Proxy, 这个是要跟你之前的 [Proxy Group] 里对应的。如果你起了别的名字,那么在[Rule]的相应规则里要对应那个名字。

图3

  • 注意倒数第二行GEOIP,CN,DIRECT,指的是国内网站直连。这里DIRECT要跟你 Group 中的第二组名字相同。

到这里基本就结束了。以后如果有什么打不开的网页,可以关闭 Surge 再打开把日志清空后,进入打不开的 App 或网址,然后去 Surge->Analytics->Recent Requests 找到疑似请求的网址,添加一条新规则。就像文章开头Instagram那样。

你也可以在 FINAL 的后边添加这样一条:

1
2
[URL Rewrite]
^http://www.google.cn http://www.google.com

添加之后 iPhone 上如果设置 Google 为默认搜索引擎之后就可以正常搜索而不是出来一个需要点击 g.cn 那个框了。

Mac 教程

Mac 版 Surge 首先要 下载, 安装之后创建 ~/.surge.conf。以.开头的文件是隐藏文件,方式如下:

  • 首先打开 Finder,侧边栏选择个人文件夹,或者最上方 Menubar 点击前往->前往文件夹,输入~之后点回车。
  • 找到终端,复制并粘贴 defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder;,回车,就能在 Finder 中看到隐藏文件了。想恢复的话就再复制一下,注意把 true 改成 false。
  • 用文本编辑器创建并打开一个文档,把 iOS 版的规则文件通过iCloud 同步后里面的内容复制过来。 新建文档命名为.surge.conf

打开电脑上的 Surge,然后在 iOS 上的 More->Surge Mac Beta 标签中 Tap to activate 激活 Mac 版,注意手机和电脑要在同一个无线网内,或者都打开蓝牙。激活后请点击 Set as System Proxy 就可以正常使用了。

至此 iPhone 和 Mac 都配置好了,如果有什么问题欢迎留言。

Enjoy the free world.