Surge for Mac 是针对 Surge for iOS 用户的一项「福利」,这意味着你首先必须是 Surge for iOS 的用户才可以激活和使用 Mac 版,两者一脉相承,除了配置文件的命名和保存位置不同,在使用体验上非常一致。
Mac 版的下载地址和激活都需要通过 iOS 版来实现,打开 Surge for iOS,切换到「More」标签页,展开「Surge Mac Beta」就能看到具体的激活步骤。需要注意的是下载地址区分大小写:http://surge.run/Surge-Mac.zip。
Mac 版配置文件和 iOS 版配置文件基本一致,配置文件可以参考这里 https://gist.github.com/scomper/。
- Mac 配置文件增加了 interface 、port、socks-port 几个字段,用来定义缺省的 IP 地址和端口,默认是 0.0.0.0 和 6152、6153(不写入 0.0.0.0 的话会影响 Parallels Desktop 通过代理访问);
- 因为 Mac 下 Find Friends (fmfd 进程的 sandbox 描述)强制限定了只允许连接到 80, 443, 8888 这 3 个端,Surge 默认的 6152 端口会影响查找朋友中正常的定位,可以将 Surge Mac 配置中的端口定义为 8888;
- 配置文件需要命名成 .surge.conf 放在「个人」目录下(也可以通过前往文件夹~/ 定位);
配置文件命名成包含 . 前缀的文件 .surge.conf 会被视为隐藏的系统文件,所以要复制和修改它首先需要 Finder 显示系统文件。Alfred 用户安装上 Finder Settings 的 Workflows,可以很简单的切换显示 Finder 的隐藏文件。
Surge Mac 1.0.2开始支持自动更新,1.2.1 增加了偏好设置面板和「Set as System Proxy」选项,方便定义是否启用网络切换通知、顶栏图标是否显示动态的网速。运行过程中如果修改了配置文件可以点击「Reload Configuration」重新加载。
和 iOS 版一样,Recent Requests 窗口中可以直观的查看到网络访问的情况,点击具体的条目弹出详细内容窗口。Surge for Mac 的日志保存在 ~/Library/Logs/Surge/ 目录下,通过偏好设置中的「Reveal Logs in Finder」可以直接定位到日志目录(Helper 的日志保存在 /tmp/SurgeHelper.log)。
Set as System Proxy
启用 Surge 后勾选下拉菜单中的 Set as System Proxy 即可自动向系统网络设置添加必要的参数,因为需要修改系统网络设置,首次勾选时需要输入管理员密码进行确认,去掉 Set as System Proxy 的勾选,会清除网络设置中的代理相关设置。
1.2.0 加入 Helper,能够自动修改系统代理设置(注意 Bypass Proxy 是通过配置文件进行设置的,请确保 .surge.conf 中 skip-proxy 有正确条目),网络设置中代理设置的部分会做如下修改:
- 启用「系统偏好设置 — 网络」 HTTP 和 HTTPS 代理: 127.0.0.1:6152 ,SOCKS 代理中设置为 127.0.0.1:6153。
- 添加忽略这些主机与域的代理设置(Bypass Proxy):127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local
设置 SOCKS 代理可以有效的解决 Mail.app 应用收发 Gmail 邮件的问题。
多个服务器配置(Proxy Group)
1.0.7 版本以后配置文件可以方便的定义多个可供选择的服务器。通过新增加的 [Proxy Group] 来显示 [Proxy] 中的多个服务器。
[Proxy Group] 配置群组命名应和 [Rule] 规则中调用的一致,如:图示中 A、B、C 三处的名称应一样。
Proxy Group 方式每个配置文件是相对独立的,可以包含各自的服务器地址和不同的规则。例如,按不同的规则的定义来命名区分成不同的配置文件,或者用不同的命名区分服务器提供商。
配置文件中的主要参数
配置文件很多部分随着你升级 Surge 会自动更新,例如 [URL Rewrite] 网址后的参数「header」,[General] 字段部分自动添加 ipv6 = true、replica = 0,[Proxy] 字段部分 HTTPS 代理后的「tls=true」参数等。
还有些特性需要手动添加才可以,如:SSID 群组的支持、Surge-Cli 命令行的支持。
Proxy & nProxy
Proxy GROUP 和 nProxy GROUP群组的作用:Proxy(Group 1)、nProxy(Group 2),正常情况(国内直连)下 Proxy 选代理,nProxy 选 DIRECT 直连;Proxy、nProxy 都选代理服务器就是全走代理。这样配置可以方便的切换成全局代理(主要是指 Mac 版)。
AUTO-GROUP
AUTO-GROUP 通过测速来自动选择定义的线路,能最大限度的避免因个别线路故障或者过慢而影响使用。
当 Proxy 中选择使用 Auto Group 时,Surge 会并发尝试通过该 Group 下所有的服务器去发起到目标 url 的请求,并根据最优结果选择哪个服务器将被使用。默认间隔 600 秒后需要重新发起测试,更多详细的参数介绍可以参阅这里 trello.com。
- 默认配置中的 URL 不要修改成其他地址;
- 为保证测速的基本公平,默认 URL 目标设置的是 gstatic.com 这样的在全球都有节点的 URL 作为测试目标;
- 基于性能考虑,只支持使用 http 协议的 URL;
- 为了避免资源浪费,Auto Group 中不应放入太多的线路,2–3 个即可。如 US 这样的线路不应该放入,因为几乎不可能赢得测试;
- 不要使用 google.com 作为测试目标,这么做可能导致 proxy 服务器 ip 被加入黑名单,导致各种操作需要输入验证码;
SSID-GROUP
SSID-GROUP 的作用则是让 Surge 根据不同的网络环境自动切换,判断是处在 Wi-Fi 网络还是蜂窝移动网络,通过 Wi-Fi 的 SSID 的判断选择使用不同的代理设置,可以和 Auto 搭配使用。
Scene = ssid, default = Auto, cellular = SG, “SSID NAME1” = HK, “SSID NAME2” = JP
Proxy = select,Auto,Scene,JP,US
SSID GROUP 的定义中,default 是默认和必须的,定义没有匹配到 SSID 时网络代理的选择,cellular 是可选项,如果不写走 default 的设置,后面的SSID NAME 改成你想要定义的 SSID 的名称,支持多个。
SSID 名称如果存在空格需要用英文引号标注。
※ Mac 上的文本编辑器推荐 TextWrangler。
[General]
# warning, notify, info, verbose
loglevel = notify
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
bypass-tun = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
interface = 0.0.0.0
port = 8888
socks-port = 8889
external-controller-access = pw@0.0.0.0:6155[Proxy]
HK = http,adc-hk.com,443,username,password,tls=true
SG = custom,1.2.3.4,443,chacha20,password,http://abc.com/ss.module,ota=true
JP = http,adc-jp.com,443,username,password,tls=true
US = http,adc-us.com,443,username,password,tls=true
TW = http,adc-tw.com,443,username,password,tls=true[Proxy Group]
Auto = url-test,HK,SG,JP,url = http://www.gstatic.com/generate_204
nProxy = select,DIRECT,TW
Scene = ssid, default = Auto, cellular = JP, "SSID NAME" = HK
Proxy = select, Auto,Scene,US[Rule]
# 规则部分请参照范例补充完善,此处仅示意
DOMAIN-KEYWORD,umeng.co,REJECT
DOMAIN-KEYWORD,google,Proxy,force-remote-dnsGEOIP,CN,nProxy
FINAL,Proxy[URL Rewrite]
^http://www.google.cn http://www.google.com header
ShadowSocks 服务器地址的添加可以参照 SG 那一行,其中 custom 不可更改,ss.module 的地址必须有效。
[URL Rewrite]每行两个参数,以空格分隔,第一个是匹配用的正则表达式,第二个是替换的内容。正则的输入字符串是完整的 URL(包含 http://),输出的字符串也必须以 http:// 开头。该功能只对非 https 请求有效。
Launch Surge at login
如果希望开机自动加载 Surge,可以到「系统偏好设置-用户与群组」中将 Surge 添加到「登录项」,update:1.3.0 版本之后,偏好设置中已经支持开机加载(Launch Surge at login)的勾选设置。
※ 注意,登录项的设置中不要勾选 Surge 前的「隐藏」。
和 iOS 版使用同一个配置文件
关键词:iCloud 同步、软链接
通过给文件创建软链接的方式,可以令 Mac 版和 iOS 版的 Surge 共用同一个文件,这样后期维护和编辑会方便很多。Mac 的配置中多几句端口的设定语句,不过这并不妨碍 iOS 版的 Surge 直接使用相同的配置。
这里以 /iCloud Drive/Surge 文件夹中 Surge.conf 为主体,为其创建软链接(软链接的链接名称可以和源不一样)。
- 确认 Surge iOS 中已经启用 「iCloud Drive Sync」
- Mac 上打开终端窗口,直接复制如下 ls 命令并运行:
ln -sfv "/Users/$(whoami)/Library/Mobile Documents/iCloud~run~surge/Documents/Surge.conf" "/Users/$(whoami)/.surge.conf"
Surge-Cli 命令行
Surge Mac 1.4.0 版本增加了命令行模式,可以通过命令行对 Surge 进行控制。
conf 配置文件中需要增加一行:
external-controller-access = password@0.0.0.0:6155
这里的 password 可以可以改成你自己的密码。
[General]
# warning, notify, info, verbose
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
interface = 0.0.0.0
port = 8888
socks-port = 8889
loglevel = notify
external-controller-access = password@0.0.0.0:6155
利用 ln 命令为 Surge 程序中包含的 Surge-cli 创建一个「符号链接」就可以在终端中直接调用了。
ln -s /Applications/Surge.app/Contents/Applications/surge-cli /usr/local/bin/surge-cli
软链接创建完成后就可以在终端中运行对应的命令来获取结果。
surge-cli 默认会根据 ~/.surge.conf 中的配置,自动连接本机的 Surge。如果你想控制另一台设备上的 Surge (包括 iOS),请使用 -h 选项。
surge-cli -h password@192.168.1.10:6155 COMMAND
这里的 password 可以可以改成你自己的密码,COMMAND 改成最终的命令.
基于命令的格式,范例中 apw 是配置中我设定的密码字符串,192.18.0.2 填写的是 iPhone 在 Wi-Fi 网络中获取的 IP (设置-无线局域网,点 ⓘ 查看 iPhone 的 IP 地址),COMMAND 部分填写 watch request 命令查看 iPhone 上的网络请求。
支持的命令列表:
watch request:执行该命令后持续输出最新收到的请求
test-rule :测试 hostname 对应的 rule(test-rule example.com)
dump dns:显示目前的 DNS 缓存和 DNS 条目
dump policy:显示所有可用的策略名称
dump active:显示目前活动的连接
dump request:显示最近的请求
dump rule:显示目前所有生效的规则
set-policy:设置针对某个 hostname 的策略(set-policy yach.me DIRECT),相当于在 0 位置插入了条 DOMAIN 或者 IP 规则
insert-rule:在特定 index 插入一条规则,index 和 dump rule 的结果一致(insert-rule DOMAIN-SUFFIX,yach.me,Proxy 10)
reload:重新加载配置(仅限 OSX)
flush dns:强制清除本地 DNS 缓存
flush rule:强制清除规则匹配缓存
更多关于 Surge-cli 的使用可以访问作者写的具体介绍。
Surge Dashboard
Surge Mac 2.0 提供了更加直观的 Dashboard 界面,用来查看最近的访问、DNS 解析记录以及规则。
Dashboard 中不仅可以查看 Surge Mac 的访问情况,也支持访问 iOS 设备中的 Surge 数据,前提是配置文件中包含 external-controller-access 的定义。如果要连接到 iOS 设备,填入 IP、端口和密码即可,IP 在 Wi-Fi 属性中去查询,端口和密码取决于你的 external-controller-access 的定义。
Dashboard 可以临时调整规则(Rule),同样可以保存到配置文件中,不过保存后注释的部分不会被保留。
Surge TUN 模式
Surge 2.1.0 (311) 增加了 TUN 模式,用来处理部分应用不走 HTTP、SOCK 代理的问题,通过勾选菜单项中的「 Enhanced Mode」启用。之前的 Surge,使用词典无法使用其中的维基百科进行查询、终端也无法走代理,通常我们会选择再安装一个 Proxifier 来接管这些不走常规代理的应用,Surge 支持 TUN 模式后这些问题就都解决了。
使用增强模式前必须先配置 dns-server 参数,因为启动 TUN 后不能获取到系统的 DNS 配置,不管是 TUN 全局模式还是部分模式 dns-server 参数都是必需的。
配置文件中如果不包含 enhanced-mode-by-rule 参数 ,菜单项中勾选 Enhanced Mode 就是全局模式,如果在配置中添加 enhanced-mode-by-rule = 1 就是 TUN 规则匹配模式,规则匹配模式中具体的规则后需要添加 enhanced-mode 参数。
Parallels Desktop 中,如果使用部分 TUN 模式(enhanced-mode-by-rule = 1),可以使用共享网络模式,如果是 TUN 全局模式的话就只能选桥接模式才能正常访问网络。
版本更新
- 1.0.2 +自动更新
- 1.0.4 +新特性:可以指定本地的出口 interface
- 1.0.5 +Proxy Group 和 URL Rewrite 特性
- 1.1.0 +SOCKS5 代理的支持,解决 Mail.app 等应用不走 HTTP 代理的问题
- 1.2.0 +加入 Helper(Set as System Proxy)和偏好设置面板,能够自动修改系统代理设置(请注意 Bypass Proxy 是通过配置文件进行设置的,请确保 .surge.conf 中有正确条目)
- 1.3.0 +AutoGroup,增加自动切换服务器群组,自动根据测速结果切换服务器
- 1.3.2 +Shadowsocks 协议加入 OTA 支持
- 1.4.0 +增加了命令行模式,可以通过命令行对 Surge 进行控制
- 2.0.0 +增加了 Dashboard 面板,方便查看请求和编辑规则,可以连接到 Surge iOS
- 2.1.0 +Surge 2.1.0 (311) 增加了 TUN 模式
Surge Mac Beta 测试版最新动态请关注作者的 Twitter 账户: @Blankwonder,更多问答:https://trello.com/b/qy4sDvxg/surge
本文档适用于:Surge for Mac 2.0.0,Surge for iOS 2.1.0
内容制作软件:Ulysses、OmniGraffle