Mac下shadowsocks全自动地代理翻墙

Shadowsocks服务端

可以搭建自己服务,也可以买现成的服务。我就是在shadowsocks.com买的服务。

测速 speed test

手机上下载 【BestTrace】 app 测试连接翻墙服务节点的路由跳数,并绘制地图:

  1. 路由跳数
  2. 地图:是否有绕路

MAC和windows

官方网站 下载:https://www.ipip.net/download.html

Windows / Mac OS X 客户端
android / iOS 客户端

Shadowsocks客户端配置

shadowsocks on Mac OS X

下载

github release 下载地址:

MD5 hash

打开 终端 应用,使用 md5 命令校验下载文件的 MD5 哈希值:

1
2
$ md5 Downloads/ShadowsocksX-2.6.3.dmg
MD5 (Downloads/ShadowsocksX-2.6.3.dmg) = c3406e8d4a5009efaa74d3a37b53fed8

ShadowsocksX安装配置

  1. 运行 ShadowsocksX
  2. 配置 代理服务器
  3. 连接 代理服务器
  4. 开启 系统代理
  5. 测试 科学上网
  6. GFWList 更新 PAC 文件

【运行】ShadowsocksX
运行 ShadowsocksX 后,会在 menubar 显示 「纸飞机」 图标
默认图标为 灰色 表示 「系统代理」 未启动

【编辑】代理服务器

点击 「纸飞机」 选择 「服务器」 菜单,然后点击 【打开服务器设定】 选项:

弹出 「服务器设定」 窗口:

【连接】代理服务器

选中 「服务器」 菜单创建的代理服务器配置,出现对号 「√」 表示与代理服务器建立连接
成功与代理服务器建立连接后,便会创建 「SOCKS5 代理」

【开启】系统代理

点击「主菜单」 第二行 【打开 shadowsocks】 启用 「系统代理」:

  1. 第一行:系统代理 运行 状态,显示 「关闭」 状态
  2. 第二行:系统代理 运行 开关,默认 系统代理 没有启动( 图标为 灰色 )

系统代理 启动后 menubar 的 「纸飞机」 图标也变为 黑色:

「系统代理」 与 「SOCKS5 代理」 区别:
系统代理

  • 浏览器的访问请求全部由 shadowsocks 创建的 系统代理 处理
  • 浏览器默认不需要任何设置,也无需安装 代理插件 (Firefox 除外)
  • 如果浏览器安装了代理插件,需要 禁用 代理插件 或把插件设置为 使用系统代理

SOCKS5 代理

  • 若不 【启用系统代理】 shadowsocks 成功连接代理服务器后,仅创建了 「SOCKS5 代理」
  • 浏览器需要安装 代理插件 或设置浏览器的代理配置,才能科学上网

【测试】科学上网

如果 系统代理 运行成功,就可以访问 google 。如果失败,请检查 「服务器配置」 是否正确:

【更新】PAC 文件

最后在主菜单中点击 「从 GFWList 更新 PAC 文件」 更新翻墙列表:

SOCKS5 代理
默认 ShadowsocksX 创建的 「SOCKS5 代理」端口 是 1080 :

1
2
$ grep 127 ~/.ShadowsocksX/gfwlist.js
var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;";

ShadowsocksX-NG 本地端口更换为 1086 :

1
2
3
4
5
6
7
8
9
10
11
12
$ cat "/Users/yourname/Library/Application Support/ShadowsocksX-NG/ss-local-config.json"a

{
"method" : "rc4-md5",
"server" : "IP",
"password" : "...",
"local_address" : "127.0.0.1",
"server_port" : ...,
"auth" : false,
"timeout" : 60,
"local_port" : 1086
}

可以自行修改 ~/.ShadowsocksX/gfwlist.js 配置文件,自定义 「SOCKS5 代理」端口

shadowsocks on IOS

Potatso

APP Store :https://itunes.apple.com/app/apple-store/id1070901416
https://potatso.com/
https://manual.potatso.com/
https://github.com/shadowsocks/Potatso

Mume VPN

基于 Potatso 开发的 Shadowsocks 协议 VPN 客户端
APP Store :https://itunes.apple.com/cn/app/mume-vpn/id1144787928
https://github.com/liruqi/Mume-iOS
http://vpn.liruqi.info/ios/
http://api.liruqi.info/
http://mume.site/

PAC代理模式

代理模式

翻墙原理就是通过 「SOCKS5 代理」 来访问被和谐的网站

shadowsocks 客户端除了创建 「SOCKS5 代理」 外,还实现了创建 「系统代理」 的功能,通过 「系统代理」 来管理浏览器的访问请求(分流)。「系统代理」 支持 2 种 代理模式:

  1. 自动代理模式 ( 即 PAC 模式 ,默认 )
  2. 全局代理模式

PAC 代理模式

PAC 维基百科:http://zh.wikipedia.org/zh/PAC

默认 shadowsocks 启用 「系统代理」 后使用的是 【PAC 代理模式

Shadowsocks 成功 连接代理服务器 后,会创建一个 「SOCKS5 代理

Socks 5 代理 使用的是本机 127.0.0.1:1080 端口

PAC 代理模式】 当浏览器访问某个网站时,会去匹配 PAC 配置文件 pac.txt 里 URL 列表。如果能匹配到 PAC 文件配置的 URL 就会使用「SOCKS5 代理」访问该网站。否则不使用代理,直接访问网站。既节省 ss 流量,也会提高 国内 网站的访问速度,不然访问国内网站要绕到国外代理再绕回来。

全局代理模式

全局代理模式 所有请求全部走 「SOCKS5 代理」。访问 国内 网站时,将会先绕到 国外 的代理服务器,然后在绕回来,南辕北辙了。当访问的网站没有包含在 PAC 文件的匹配规则列表时,可以 临时 开启全局代理进行访问。

菜单

编辑 PAC 规则

从 GFWList 同步的 PAC 规则后,会在本地生成的 PAC 文件 :

Mac OS X 是在~/.ShadowsocksX/gfwlist.js

新版本的可以在shadowsocks里直接设置

然后在弹框中输入

里边的文档格式可以参考https://adblockplus.org/en/filter-cheatsheet,两者的写法完全相同,下面是我的用户规则文件user-rule.txt的内容:

1
2
3
4
5
6
7
! Put user rules line by line in this file.
! See https://adblockplus.org/en/filter-cheatsheet

||aws.amazon.com^
||amazonwebservices.com^
||cloudfront.net^
||google.com^

找出非常隐蔽的被墙掉的地址

好了,既然学会了自定义PAC文件,那么,想必应该是配置完毕了吧?当然不是,你有没有遇到过这种情况,明明把指定网址加到PAC里面了,但是打开该网址还是非常缓慢,或者只能看到部分控件,而网页主体始终刷不出来?但是将代理模式切到全局模式,又能正常打开该网页。

这又是为何?

其实,虽然目标网址是走了代理,但是目标网址上的一些资源(可能是某些JavaScript、CSS文件),可能是储存在某些被墙掉的地方,但是又没有添加到PAC文件里,所以使用全局代理模式时能轻松打开,但是使用自动代理模式时却又显示不出来,那么,如何解决呢?

使用日志来查找

从菜单里点击显示日志...,其实就是打开系统应用控制台,系统日志中所有以 ShadowsocksX: 开头的是Shadowsocks的日志,我们再右上角输入ShadowsocksX,即可只显示Shadowsocks的日志。我们在全局模式下,刷新一次在自动代理模式下打不开的网页,然后马上切到控制台查看Shadowsocks的日志,看看是否有遗漏没有添加到PAC文件的网址,如图中的***.cloudfront.net。

我们在用户规则文件user-rule.txt添加一行

1
2
3
4
5
6
! Put user rules line by line in this file.
! See https://adblockplus.org/en/filter-cheatsheet

...

||cloudfront.net^

并执行一遍从GFWList更新PAC文件,即可。

使用浏览器来查找

当然,可以使用浏览器的开发者工具来查看目标网址所需的网络请求,然后将可以的地址加入到PAC文件即可。

ShadowSocks 的 Alfred Workflow来添加规则

如果你是 小帽子 Alfred 的用户,你可以直接使用我写的 ShadowSocks-Workflow(点击下载)。在 Alfred 中执行 ssadd ,然后粘贴你准备加入 gfwlist 的 url,url 的域名就添加进 ShadowScoks 了。

浏览器代理插件

Chrome

Chrome 代理插件:Proxy SwitchyOmega

  1. 如果你不想用全局 PAC 代理,想配合 SwitchySharp 等插件使用,可在菜单栏图标里点关闭 Shadowsocks。关闭后代理仍会运行在 127.0.0.1:1080 上,代理类型为 SOCKS v5。之所以不叫关闭 PAC,因为很多人不懂什么是 PAC。写关闭 Shadowsocks 更容易理解。

  2. 切换服务器后,因为 Chrome 保持长连接,可能需要重启浏览器才能生效。也可以重启 ShadowsocksX 来强制 Chrome 重新连接。

Shadowsocks的PAC模式与全局模式与VPN的区别

VPN,即虚拟专用网络

虚拟专用网络的功能是:在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN有多种分类方式,主要是按协议进行分类。VPN可通过服务器、硬件、软件等多种方式实现。

Shadowsocks,即Sock5代理

采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。Socks是个电路级的底层网关,是DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks 不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks 代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。

VPN顾名思义,虚拟专网,你接入VPN就是接入了一个专有网络,那么你访问网络都是从这个专有网络的出口出去,好比你在家,你家路由器后面的网络设备是在同一个网络,而VPN则是让你的设备进入了另一个网络。同时你的IP地址也变成了由VPN分配的一个IP地址。通常是一个私网地址。你和VPN服务器之间的通信是否加密取决于连接VPN的具体方式/协议。

Sock5代理服务器则是把你的网络数据请求通过一条连接你和代理服务器之间的通道,由服务器转发到目的地。你没有加入任何新的网络,只是http/socks数据经过代理服务器的转发送出,并从代理服务器接收回应。你与代理服务器通信过程不会被额外处理,如果你用https,那本身就是加密的。

特点

VPN的开发目的是给企业内网直接传输加密数据,最重要的就是安全性,相反VPN的流量特征变得很明显,特别是SSL VPN类型,比如Openvpn有SSL证书的加密,安全性不必多说,但是握手依然是明文,流量更加明显,导致匹配流量特征很容易,在我这里一旦链接Openvpn那就是秒封。

VPN目前就科学上网方面来讲,PPTP大部分地区已死,L2TP大部分地区已经出现干扰和断开连接情况,Openvpn一封一个准。而anyconnect大多数都是企业用的,所以墙不敢乱封,IKEv1/IKEv2需要注意证书中间人攻击问题。

所以,在VPN科学上网这方面,一些地区已经根据VPN的流量特征做出了相应的匹配策略,可以有效封杀VPN了。

Shadowsocks的开发目的就是穿透防火墙,最重要的是增加墙的匹配流量效率封杀成本和难度,也就是混淆隐秘性。

Shadowsocks是更注重流量混淆隐秘,VPN则是更注重加密安全性。如果你需要安全你可能需要 VPN 或者 Shadowsocks+TOR匿名 ,否则就抗干扰能力来说Shadowsocks更适合拿来科学上网,VPN中的Opnevpn是最安全的VPN协议之一,然而第一个被墙宣布效率检测、封杀!

没有完美的工具,VPN和Shadowsocks在某种程度上可以说是两种相反的技术,开发目的不一样,注重点也不一样,缺点相应的也不一样,所以根据当地运营商的封杀策略选择最适合自己的方式。

通过ProxyChains让Iterm终端上网

如我们之前所说的,浏览器科学上网只是一部分,身为一名工程师或非 Windows 用户,我们经常会使用到一些命令行工具,想让命令行工具科学上网肿么办?

ProxyChains 就是一个这样用途的工具,它可以让你的其它工具通过 Socks 或 HTTP 代理访问网络。

安装

首先从 Homebrew 安装 ProxyChains。

1
brew install proxychains-ng

配置

编辑配置文件 mvim /usr/local/etc/proxychains.conf
在 [ProxyList] 下面(也就是末尾)加入代理类型,代理地址和端口
例如使用 TOR 代理,注释掉原来的代理并添加

1
2
3
4
5
6
7
8
9
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode
[ProxyList]
socks5 127.0.0.1 1086

需要说明一点,在这里我配置的是 strict_chain。如果你有多重代理,类似我之前一样,比如让命令先通过 Lantern 代理出去,如果失败再走 SS 代理,可以配置成 dynamic_chain 模式。不过这超出今天的文章范畴了,我还是以 strict_chain 举例,如果你对 dynamic_chain 感兴趣,可以自行研究。

每次使用 proxychains4 命令其实有些不爽,太长容易输错。
编辑 ~/.bash_profile 文件,添加下面一行命令为 proxychains4 设置别名为 pc 或者你喜欢的任何命令。重启终端。

1
alias pc="proxychains4 -f ~/.proxychains.conf"

在执行 source ~/.bash_profile 重新加载环境变量之后,就可以尝试是否配置成功了。

1
pc curl https://twitter.com

为git,nodejs,gradle,maven等进行代理服务器的配置

http://www.snowdream.tech/2016/03/31/proxy-settings-with-shadowsocks/#IDEA

参考

赏个包子钱~~