Total Pageviews

Saturday, 20 February 2016

Surge2.0 for Mac 简明指南

Surge for Mac 是针对 Surge for iOS 用户的一项「福利」,这意味着你首先必须是 Surge for iOS 的用户才可以激活和使用 Mac 版,两者一脉相承,除了配置文件的命名和保存位置不同,在使用体验上非常一致。Surge for Mac 目前还是 Beta 版,所以只有 TestFlight 用户和内测用户才能体验到,后续更新到 App Store 以后所有 Surge for iOS 才能使用 Mac 版。
Mac 版的下载地址和激活都需要通过 iOS 版来实现,打开 Surge for iOS,点击右下角的“更多”- “surge mac" - "获取你的surge mac授权“,准确输入你的email地址,点击“完成”。
(点击iphone屏幕上的surge图标->点击右下角的“更多”->在iphone屏幕上,用手指朝上滑动->就会出现“surge mac" 菜单。点击该菜单。)
Surge for Mac的下载地址: http://dl.nssurge.com/mac/Surge-latest.zip(用浏览器访问此地址)
cd ~/downloads
 unzip Surge-latest.zip
mv Surge.app /applications 
这样,程序就装好了。


Mac 版配置文件和 iOS 版的配置文件可以通用,不过 Mac 版不支持多服务器配置的#!PROXY-OVERRIDE 参数,所以需要在配置文件中写好具体的代理服务器地址,具体内容和 iOS 版的 配置文件(xyz.conf )基本一致,配置文件可以参考这里 https://gist.github.com/scomper/843577fe581c1d6df974。
  • 配置文件增加了 interface 和 port 两个字段,用来定义缺省的 IP 地址和端口,默认是 0.0.0.0 和 6152;
  • 默认的配置文件Default.conf示例:
  • [General]
    loglevel = notify
    bypass-system = true

    skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 127.0.0.1, localhost, *.local
    bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
    ipv6 = false
    interface = 0.0.0.0
    port = 6152
    socks-interface = 0.0.0.0
    socks-port = 6153


    [Proxy]
  • some-name = custom, your-vps-ip, 8989, aes-256-cfb, your-password, https://github.com/stoneChen/Surge-config/raw/master/SSEncrypt.module
    [Proxy Group]
    Proxy = select,some-name

    [Rule]
    GEOIP,CN,DIRECT
    FINAL,Proxy
  • 配置文件参考自https://github.com/stoneChen/Surge-config/blob/master/surge.conf
  • 首次打开Surge2.0 for Mac,会让我们选择配置文件的存储位置,推荐选择『Store in User Documents』,Surge程序会在~/documents目录下,创建带有示例配置的Surge目录。(配置文件将出现在~/documents/surge目录里。[Proxy Group]是一个组策略配置,它的某一项配置可以引用[Proxy]中的配置,也可以引用其他的组策略配置。这里有select, url-test, ssid三种策略可以用,具体请阅读example-chinese.conf中的注释。
    简单讲:
  • select:在菜单上手动选择ss节点
  • url-test:定时轮询向指定的地址发起请求,哪个节点响应时间最短,则切换到哪个ss节点
  • ssid: 根据wifi名字进行切换ss节点)
  • 点开状态栏上的Surge菜单,选择『Set as System Proxy』,顾名思义是使Surge成为系统代理,然后点击状态栏中的Surge,再点击Switch profiles , 右侧会出现~/Documents/Surge下的配置文件列表,选择default. (此时打开safari-偏好设置-高级-更改设置-“代理”中,发现http代理/https代理/socks代理都设置好了,分别为127.0.0.1:6152, 127.0.0.1:6152, 127.0.0.1:6153 ;取消http代理和https代理,仅使用socks代理即可或者选择http代理和https代理,不选择socks代理也可翻墙,设置http代理和https代理为127.0.0.1:6152,http代理和https代理都要选择;如果只选择http代理,翻墙速度会很慢。然后用safari即可翻墙)
  • 如果你使用firefox浏览器,则点击preferences -advanced-network-settings,将socks5代理服务器设置为127.0.0.1:6153,firefox浏览器即可翻墙。

  • 网络设置中设置 SOCKS5代理为 127.0.0.1:6153 即可解决 Mail.app 的代理访问问题。( Gmail 收发无障碍了)
 
Surge 运行过程中如果修改了配置文件,一定要记得点击「Reload profile from file」,重新加载配置文件

注意:需把操作系统的dns解析服务器设为8.8.8.8,方可翻墙在mac系统下,设置dns解析服务器的方法:点击屏幕左上角的苹果图标-"系统偏好设置"-网络-高级-dns,按+号,添加dns服务器8.8.8.8 ,然后点击“好”-“应用”即可。
不过奇怪的是在mac系统下,把机盖合上或者重启系统,系统的dns服务器又会恢复为isp的dns服务器,这样我只好重复一遍上面的流程详见http://briteming.blogspot.com/2017/06/blog-post_87.html


让shell也能出墙:
默认情况下,shell不会被代理,我们需要设置shell的环境变量,将代理服务指向Surge的端口。
将以下代码复制到/etc/profile的底部:
proxy=http://127.0.0.1:6152
export http_proxy=$proxy
export https_proxy=$proxy
export ftp_proxy=$proxy (此行可以不要)

然后运行source /etc/profile

和 iOS 版一样,Recent Requests 窗口中可以直观的查看到网络访问的情况,点击具体的条目弹出详细内容窗口。另外状态栏图标包含流量显示,看起来又可以少装一个 iStat Menus 的应用了。Surge for Mac 的日志保存在 ~/Library/Logs/Surge/ 目录下,通过系统的「控制台」可以进行具体的查看和排错定位。
如果希望开机就自动加载 Surge,可以到「系统偏好设置-用户与群组」中将 Surge 添加到"登录项"。
※ 注意,登录项的设置中不要勾选 Surge 前的'隐藏'.
from https://medium.com/@scomper/surge-for-mac-%E7%AE%80%E6%98%8E%E6%8C%87%E5%8D%97-f6f357b8f09c
(我测试成功,不过 mac上的surge并不是像iphone上的surge那样的全局代理!

高阶用法

代理转发网络请求

这个功能,基于URL Rewrite配置实现,简单讲,就是写正则。举个栗子:






1
2
[URL Rewrite]
^http://a.net/m/(.*) http://b.net:9999/m/$1
意思就是,所有以http://a.net/m/开头的url全部代理到http://b.net:9999/m/下(注意中间的空格)。
用代码解释就是:






1
2
let regStr = new RegExp('^http://a.net/m/(.*)')
let proxyUrl = url.replace(regStr, 'http://b.net:9999/m/$1')
当有请求匹配该规则,就会被代理转发,在Surge Dashboard上会看到代理后的记录.
规则可以设置多条。
这样写,默认是header模式,客户端不会感知到当前请求被代理了。上面配置的等价写法是:






1
^http://a.net/m/(.*) http://b.net:9999/m/$1 header
还有一种模式是302重定向,客户端是可感知的,302模式这样写:





1
^http://aaa.com http://bbb.cn 302
这样http://aaa.com就被重定向到http://bbb.cn了。
如此一来,只要你正则玩的溜,各种代理转发随你翻转~
有时候,通过域名规则过滤广告太暴力,有时候只是想屏蔽指定域名下个别请求,那么URL Rewrite就能实现,针对不想看到的东西,撸一个正则,转发到不可响应的地址即可(比如loclahost)。

连接移动设备代理转发请求

用过charles的童鞋会知道, 它也是一种网络调试工具,我们平常用的最多的就是代理静态资源。
其实单单对网络调试而言,charles足够了。但自从有了Surge,科学上网+网络调试就可以合体了~
起初,我并不确定Surge支持这样的功能,但理论上应该是支持的,于是按照我自己的想法,像使用charles一样使用Surge:
打开手机设置,将代理指向Surge默认的6152端口,然后用微信随意打开一张网页,发现迟迟加载不出来,我瞬间懵逼了。。。
Surge你作为一款所谓的 神器,这点功能都不支持吗?!
我不甘心,于是上知乎,开了个问题,咨询Surge作者。令我惊喜的是,作者当天下午就回复我了,详见 surge for MAC 不支持 像Charles那样的http代理吗?
原来答案如此简单,想想自己本该想到的囧。然后兴奋的把监听ip设置为0.0.0.0,手机连上代理,打开网页,搞定!再一看Dashboard,有记录了!
现在,连接上Surge代理,就能够查看手机上的请求和响应数据包了!那如何实现url代理转发呢?其实就是上一小节中的URL Rewrite,这些规则配置适用于所有被Surge接管的请求。
如此一来,charles最常用的功能,Surge也具备了,一般情况下就不需要开启charles去调试移动设备的开发了,完美。
---------------------------------------------------------

让人耳目一新的 Surge Mac 2.0

Surge Mac 2.0 的变化不仅来自功能迭代上的不断完善,在功能和定位上也有了比较大的变化,将作为一个独立产品单独发售。1.0 当初是作为 Surge iOS 用户的一种福利提供的,从而让用户在 iOS 和 Mac 两个平台上有趋于一致的使用体验,基于配置文件的共享来实现顺畅的网络访问。2.0 的演进不再只是解决网络访问的基础问题,新增的 Surge Dashboard 控制台不仅能直观查看网络访问,还可以方便的控制网络访问。







Surge Mac 2.0 参数的配置和编辑基本都可以在 UI 界面中完成,比起 1.0 的文本编辑模式直观了很多。不过从效率上说,技术流可能还是更喜欢配置文件的文本编辑模式。初次使用建议先下载 surge.conf 范例配置,然后到 Dashboard 的界面中进行参数的调整。










Surge Mac 2.0 安装后,使用步骤可以分为 5 步:
  1. Set as System Proxy,设置系统的代理;
  2. Change Configuration Folder,改变配置的存储文件夹;
  3. 建议设置存储配置的文件夹为 iCloud Drive;
  4. 通过 Finder 定位到 iCloud Drive 的文件夹,下载复制范例配置到其中,用文本编辑器打开配置,修改其中的代理服务器部分;
  5. 由 Surge Mac 的下拉菜单中切换配置。
如果配置文件没有问题,加载好配置文件后,Surge Mac 就可以开始工作了,后期针对参数的细节调整可以在 Surge Dashboard 中完成,由菜单中选择 Dashboard,点击 Surge Dashboard 的工具栏上选择齿轮 ⚙ 图标。










General 部分和配置文件中的 [General] 的部分是对应的,HTTPS Decryption 对应的是配置文件中的 [MITM]部分,URL Rewrite 部分对应的是[URL Rewrite]部分。










UI 界面上调整完参数后保存(工具栏上的磁盘图标),将会保存到你指定的存储位置。需要注意的是,Dashboard 中保存配置后只会保留行后的注释。
Surge Mac 2.0 最大的变化是新增加的 Surge Dashboard,在这个界面上可以直观的查看网络的访问情况,点击具体的条目进一步查看其具体请求的数据,在条目或应用上右键通过菜单项添加规则或者退出应用。










默认打开 Dashboard 时加载的是本地应用(Local Clients)的访问和请求页面,局域网的其他计算机或者虚拟机如果也是通过 Surge Mac 代理上网,会显示在 Remote Clients 下方。
除了可以查看本机的网络访问情况,Surge Mac 还能查看处在同一个局域网环境下的其他 Surge 的访问情况,或是 USB 数据线连接的 iOS 设备上 Surge 的访问情况。要实现远程的访问,必要条件是:
  • 远端设备上安装有 Surge 并处于运行状态;
  • 远端设备 Surge 的配置文件中包含 external-controller-access 的具体定义;
  • 知道远端设备的局域网 IP 和及其配置文件中定义的密码、端口。
通过菜单项选择「File — New Dashboard」(⌘N)新建 Dashboard 窗口,如果选择局域网 IP 的方式连接,需要被访问设备的 IP 地址,例如,iPhone 在 Wi-Fi 网络中获取的 IP (设置-无线局域网,点 ⓘ 查看 iPhone 的 IP 地址)。USB 连接方式比局域网连接更简单,只需要输入 external-controller-access 中定义的端口号和 @ 符号前定义的密码。










在 Dashboard 访问记录上右键可以直接添加规则,同样的方式在 Proxy 面板中也能很方便的编辑现有的规则,具体的参数其实和配置文件中的项目都是对应的,习惯用那种方式来调整取决于个人的习惯。










具体参数含义可以访问 zhHans.conf.ini 进行查看。
Surge Mac 2 还增加了 MitM(即 Man-in-the-middle attack 简称 MitM,用于解密 HTTPS 的流量)的支持 ,通过 Dashboard 的「参数配置」界面能方便的创建 MitM 证书或者安装由 iOS 端创建的证书。
  • Generate New Certificate,创建证书
  • Import Certificate from PKCS#12 File,由 PKCS 文件导入证书
  • Install This Certificate to System,安装配置文件中包含的证书到系统










如果 iOS 版的 Surge 和 Mac 版是通过 iCloud Drive 共享配置,配置好 MitM 的配置文件同步到 Surge for iOS 后还需要多走一步,将证书安装到 iOS 的系统中。
打开 Surge for iOS 的 Config 页面,选择 Edit Configuration,滑动到配置页面底部,点击 HTTPS Decryption 进入 HTTPS 的配置页面。
因为配置文件中已经包含 Mac 上配置好的证书的 base64 编码内容,所以界面上你能看到 Surge MitM 的证书,只不过这里还不被系统信任(Not Trusted by System),点击 Install CA to System,按照向导安装描述文件到系统就可以了。










描述文件安装后,只要 Surge Mac 上的证书不变更,Surge iOS 上以后不用重新配置。Surge Mac 或者 Surge iOS 只要一方创建好 MitM 证书另一方直接安装证书 (Install This Certificate to System) 即可,如果重复创建先前的证书会作废。
Surge Mac 2.0 试用下载:Download Trial,以及价格体系说明.
from  https://medium.com/@scomper/%E8%AE%A9%E4%BA%BA%E8%80%B3%E7%9B%AE%E4%B8%80%E6%96%B0%E7%9A%84-surge-mac-2-0-bb7cf735b1b8

新版中增加了 MitM(Man-in-the-Middle Attack,即中间人攻击)HTTPS 流量解密功能,用于保护我们上网时的数据接收安全, 可在 「Dashboard – HTTPS Decryption」中快捷的创建 MitM 证书或安装由 iOS 端创建的证书。
使用时我们只需点击第一项“创建证书”,然后在右侧将需要保护的数据接收网络地址添加进去,最后选择第三步安装证书到系统即可,别忘了勾选“Enable HTTPS Decrytion”,同时 MitM 证书还可以通过 iCloud Drive 在 Mac 版与 iOS 版之间同步共享,具体的操作可参考 @scomper 这篇文章,里面有提到具体的流程.

Surge for Mac 2.0 发行及销售说明:https://trello.com/c/V7lHHJWW/34-surge-mac
Surge iOS FAQ
-----------------------------

Surge for MAC版 使用方法

使用方法
首先要做好以下准备工作:
1、Surge IOS升级到最新版本
2、Surge IOS版中使用的配置文件
2、Surge MAC 客户端文件

附录:
Surge mac 一键换服务器
       Surge 的Mac版在换服务器配置文件时,必须通过修改配置文件变成“   . “开头的文件并拖进个人文件夹,现在通过Alfred这个软件把换配置文件,这一系列的操作变成一个工作组(workflows)的模式来进行一键操作,需要准备PJ版的Alfred2,已经编程组的Alfred动作文件
软件拖进白色框内即可,
然后把动作文件拖进Alfred
(还有记得千万不要升级,不然就PJ失效了)

无论配置文件下载那里,呼出Alfred ,输入激活这个配置的命令"sg+空格",然后这个输入你配置文件的名字,选择一个你要的,就行了。Surge会自动重启,并且换好配置文件,实行一键操作。
-------------

Surge mac 使用体验


由于Surge mac目前并未上架AppStore,只提供给已购买Surge iOS版的用户使用。

使用说明


  • 将系统偏好设置 - 网络 - 高级 - 代理 - HTTP 和 HTTPS 的代理设置为127.0.0.1,端口设置为6152。
  • 如果需要,可以在系统偏好设置 - 用户与群组 - 登录项中将Surge设为开机启动。

使用体验

Surge 配置完成后,就能顺畅的使用了,Surge会根据代理规则来对流量进行转发,根本不需要人工干预,不过这样也有坏处,不能进行全局代理和规则代理切换。Surge还提供了 Recent Request 查看功能,你能方便的看到哪个连接是走代理的,哪个是直接连接的,方便对网络情况进行判断。此外,Surge启动后还会在工具栏显示网速情况。
由于目前仍然处在beta阶段,Surge mac 不支持配置多服务器,只能把服务器写到配置文件中,相信以后会支持的。 总的来说,Surge mac的使用非常简单,我终于可以放弃GoagentX + Proxifier的组合了。
--------------

Mac 和 iOS 一起使用 Surge

Surge app 非常牛的一点是可以使用 icloud 同步,这样我们就可以实现手机端和 Mac 同步了,方法其实非常简单,接下来我就简要写一下。
相信你的手机上一定是在运行 Surge for iOS 了,请在” More “页面打开 iCloud Sync。接下来我们开始设置 Mac 。 前面已经用 iCloud 同步到你的 Mac 上了,只是这里有个小技巧:
  1. 找到你的 Surge 目录(在mac上的icloud drive里面),点进去,你能看到你的配置文件,例如我的 me.conf 。 
  2. 打开 终端,输入 ln -s '/Users/`whoami`/Library/Mobile Documents/iCloud~run~surge/Documents/me.conf' ~/documents/surge/default.conf, 你要记得把me.conf 换成你的配置文件的名字。
--------------------
Surge Mac加入一个新特性:可以指定本地的出口 interface,配置样例 https://gist.github.com/Blankwonder/f73a007a163d69804b60 
---------------------
相关帖子:
http://briteming.blogspot.com/2016/02/surge-conf-switcher.html
http://briteming.blogspot.com/2015/11/ios9app-surge.html