由于 GFW 的存在,大量非常有价值的国外网站在大陆无法访问,海外华人也无法访问很多大陆的站点。很多资料的获取、信息的沟通变得无比困难,这里特别指出 Github,用直连的方式经常奇慢无比甚至无法连接。每当这种时候,就会觉得自己和这个世界的连接中断了。所以,“爬墙”是每个程序员都要熟练掌握的基本技能!这篇文章就是教你如何正确的科学上网,必备工具:Shadowsocks(以下简称 SS)。

SS vs VPN

  1. VPN 是网络层以下的代理,SS 是应用层代理,因此 SS 支持按照规则的代理,而不是像 VPN 那样暴力的全局代理。
  2. VPN 没有有效的消除流量特征的手段,容易被 GFW 屏蔽,不适合翻墙。
  3. VPN 的服务相对来说比较贵。

对于程序员,光第一条就有充分的理由使用 SS 了,因为 VPN 没法本地调试,除非你愿意不断的开关代理。

对于执着于 VPN 的朋友,这里有一个 2005 年就开始在中国生活的加拿大人做的网站,里面提供了各种 VPN 服务商的比较。Tip for China;

自建 SS 服务器

我建议自建 SS,有多种好处:

  1. 便宜。
  2. 不用担心服务商跑路。
  3. 节点 IP 随心换。
  4. 不限设备数。
  5. 因为是一台云服务器,所以可以建站、可以学习 Linux、可以装杯。

云服务器推荐

这里只推荐 Vultr。便宜(5 刀每月)、按时付费(0 成本换 IP)、支持支付宝(随心买)、随时开关服务器(换 IP 方便)。

部署 SS

操作系统请选择 ubuntu 18.04,Vultr 的该版本系统默认已经安装了 Google BBR(一种 TCP 拥塞控制算法,能够减少丢包率提升网速)。

如果选择了其他版本,并且有需要的话,可以按照链接里的步骤进行手动安装:Install Google BBR and Optimize the Server

ssh 连接进入云服务器后,先安装 C 版本的 shadowsocks:

$ sudo apt update
$ sudo apt install shadowsocks-libev

然后修改配置文件:

$ vi /etc/shadowsocks-libev/config.json
// 按要求填入基本配置
{
    "server":"0.0.0.0",        // 必须 0.0.0.0 或者服务器 IP
    "server_port":443,         // SS 的监听端口,建议 443,运营商给的流量大一些
    "local_port":1080,         // 本地监听端口,默认就好
    "password":"Passw0rd!",    // 密码
    "timeout":60,              // 超时时间,默认就好
    "method":"aes-256-gcm"     // 加密方法,建议 ‘aes-265-gcm’
}

最后一步,重启服务并设置自动启动即可。

$ sudo systemctl restart shadowsocks-libev.service
$ sudo systemctl enable shadowsocks-libev.service

然后打开你的 SS 客户端,输入地址、端口、密码、加密方式即可开启科学上网之旅。

优雅地自动部署

由于 GFW 可能会屏蔽你的服务器 IP,因此当 SS 无法使用的时候,就需要创建一个新的 Vultr 实例,然后删除之前的实例(顺序很重要,否则 IP 不会变),并重复部署的步骤,繁琐,相当繁琐。

为了更美好的明天,拿出更多时间陪女朋友,自动部署就很有必要。

好在 Vultr 提供了 Startup Scripts 功能,用于在部署操作系统后执行一个 Shell 脚本,只需要把以上部署的步骤依次写在脚本里,以后每次新建实例的时候选择该脚本即可。

$ # Shadowsocks Server 自动部署脚本
$ sudo apt update
$ sudo apt install shadowsocks-libev -y

$ cat <<EOF > /etc/shadowsocks-libev/config.json
$ {
$     "server":"0.0.0.0",
$     "server_port":443,
$     "local_port":1080,
$     "password":"Passw0rd!",
$     "timeout":60,
$     "method":"aes-256-gcm"
$ }
$ EOF

$ sudo systemctl restart shadowsocks-libev.service
$ sudo systemctl enable shadowsocks-libev.service

客户端推荐

官网上的都推荐,由于需要翻墙才能打开,这里做一波搬运工:

Windows GUI Client

Windows Command-line Client

  • pip install shadowsocks

Mac OS X GUI Client

Mac OS X Command-line Client

  • brew install shadowsocks-libev
  • cpan Net::Shadowsocks

Linux GUI Client

Linux Command-line Client

  • apt-get install shadowsocks-libev
  • cpan Net::Shadowsocks

Android

iOS

OpenWRT

  • shadowsocks-libev
    • opkg install shadowsocks-libev
  • shadowsocks-libev-polarssl
    • opkg install shadowsocks-libev-polarssl