一小时轻松实现科学上网

自从科学上网这件事越来越成为一门口口相传的手艺的时候,就一直想要亲身实践下自建 VPS。Green VPN 突然发布了这则「相遇有时,后会无期」的公告,使我又失去了一个科学上网的工具,终于敦促我完成了这次体验。

我还能说什么,当然是选择原谅她。。。
相遇有时,后会无期

以下是几种服务的对比:

  • PPTP:
    – 优点:网上关于搭建 PPTP 服务的教程最多
    – 缺点:可能是因为 PPTP 不够安全,所以苹果禁用了这种服务的连接。就是说 Mac OX 和 iOS 系统上是不能使用这种服务的。
  • L2TP、IKEv2、IPSec:
    – 优点:Mac OX 和 iOS 系统上可以使用
    – 缺点:使用系统添加此类服务的 VPN 配置无法实现智能分流,也就是 Shadowsocks 里的「自动代理模式」(PPTP 同样存在这个缺点)
  • Shadowsocks:
    – 优点:可以实现自动代理模式,实现国内国外线路智能分流。
    – 缺点:必须下载 Shadowsocks 客户端来使用该服务

所以,为了自动代理,我选择了 Shadowsocks。简单来说就是在自己的服务器上搭建一个 Shadowsocks 服务,对外提供「IP 地址 + 端口号」和「密码」

实现的功能:

  • 服务器开机自动启动 Shadowsocks 服务
  • 可配置多个账号(即:多个端口号 + 密码)
  • 实现自动代理模式

所以我们需要:

  • 购买服务器(vps)
  • 装载 Shadowsocks 服务
  • 下载 iOS、Mac 客户端连接 vps

购买 VPS

搬瓦工 购买一款适合你的主机,单纯搭建 Shadowsocks 服务的话「10G VPS」已经完全够用了,一年 19.9 美元,网上搜一个 6% 的优惠码,折合人民币大概 130 块一年。
购买过程可以参考:新手用户搬瓦工VPS购买图文指导教程
我买的是 KVM,关于 KVM 和 OpenVZ的区别可以参考:Linux VPS基本常识 - KVM与OpenVZ架构的区别

购买成功后,在这个地址点击 KiwiVM Control Panel 跳转至 KiwiVM 可管理你的主机
然后就可以看到你主机的详细信息了,并且搬瓦工已经帮你装好了 Centos 系统:KiwiVM

装载 Shadowsocks 服务

接下来,你有两种选择:

  • 一键安装
    – 优点:方便快捷
    – 缺点:不能添加账号,不能随意更改密码(只能重新生成)
  • 自己搭建 Shadowsocks 服务
    – 优点:可以添加多个账号(任意增删端口号即可),可以修改密码
    – 缺点:ssh 连接服务器,执行一系列命令行命令(不过,这对于想要捣鼓捣鼓服务器的人来说,比如我,这也算是优点)

一键安装

如下图,点击 Intsall Shadowsocks Server 即可:Intsall Shadowsocks Server

安装成功后如下图,会提供给我们:端口号、加密方式、密码,其中密码只能重新生成,不能更改。Shadowsocks Server

下载 iOS、Mac 客户端连接 vps

如下图为 Shadowsocks Mac 客户端,填入服务器 IP 地址、上图中 Shadowsocks Server 端口号、加密方式、密码确定即可连接 VPS 的 Shadowsocks 服务,iOS 上的软件也是填写这些内容:Shadowsocks for Mac

如此,便可以科学上网了,一键安装,就是这么简单~
接下来是略微专业一点的做法,需要了解一些 Linux 命令。

自己搭建 Shadowsocks 服务

接下来,该是此篇博客最有趣的内容了:操作 Linux 服务器,搭建 Shadowsocks 服务。

首先如果你使用了上一种方式一键安装了 Shadowsocks,那么,在采用这种方式搭建服务前应当卸载上一个 Shadowsocks 服务,上一张图片所在网页的最下方会有一键卸载:Unintsall Shadowsocks Server。如果不卸载该服务,会和接下来自己手动安装的 Shadowsocks 服务冲突。

保险起见,你可以选择从头来过:重装系统。
这里又是开始~
如下图选择一款操作系统来安装,墙裂建议选择 centos-7-x86_64-bbr,因为接下来安装 Shadowsocks 要依赖 python2.7 版本,而 Centos-6 默认安装的是 python2.6重装系统

重装完成后,你会受到一封告知邮件,并且附有一份临时服务器登录密码。当然,你也可以点击上图中的 Root password modification 重新生成一份密码。注意:生成密码前需要先 stop 服务器。

连接服务器

开启终端,使用 ssh 远程连接服务器:

1
ssh root@your_server_ip -p your_server_port

your_server_ip:你的服务器 ip 地址,your_server_port:你的服务器端口号,回车输入 root 登录密码即可。
如果你之前 ssh 登录过服务器,又重装之后再次登录可能会有以下问题:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

执行如下命令,将 known_hosts 文件里包含你服务器 ip 地址那一段删掉即可成功连接:

1
vim ~/.ssh/known_hosts

为方便之后 ssh 登录,可执行以下命令修改 root 密码:

1
passwd

回车输入新密码确认即可。

安装 Shadowsocks

安装 setuptools 和 pip ,在终端执行以下命令:

1
yum install python-setuptools && easy_install pip

安装 Python-Gevent,用于提高性能,在终端执行以下命令:

1
2
3
yum install libevent
yum install python-devel
pip install gevent

安装 M2Crypto,用于加密的第三库,在终端执行以下命令:

1
2
3
4
yum install openssl-devel
yum install swig
yum install gcc
pip install M2Crypto

安装 Shadowsocks 服务端,在终端执行以下命令:

1
pip install shadowsocks

配置 Shadowsocks

新建配置文件,在终端执行以下命令:

1
vi /etc/shadowsocks.json

编辑 shadowsocks.json 文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"server":"your_server_ip",
"local_address":"127.0.0.1",
"local_port":1080,
"port_password":{
"9000":"9000password",
"9001":"9001password",
"9002":"9002password"
},
"timeout":300,
"method":"rc4-md5",
"fast_open": false
}

解释一下:

Name | Explanation

  •                 | - 
    
    server | 服务器 IP 地址
    server_port | 服务器端口号
    local_address | 本地代理地址
    local_port | 本地代理端口
    port_password | Shadowsocks 服务端口号及密码
    timeout | 超时断开,以秒为单位
    method | 加密方式,推荐使用 rc4-md5,比 aes-256-cfb 速度快很多
    fast_open | 是否使用TCP

后端开启与停止 Shadowsocks 服务,在终端执行以下命令:

1
2
ssserver -c /etc/shadowsocks.json -d start
ssserver -c /etc/shadowsocks.json -d stop

或者选择前端开启 Shadowsocks 服务,在终端执行以下命令:
执行该命令当连接成功或出错时终端会打印详情信息,建议第一次开启 Shadowsocks 服务时执行该命令:

1
ssserver -c /etc/shadowsocks.json

至此,使用 Shadowsocks 客户端就可以科学上网了。

设置服务器开机启动

设置开机启动,在终端执行以下命令:

1
vi /etc/rc.local

将以下开启 Shadowsocks 服务命令加入 rc.local 文件:

1
ssserver -c /etc/shadowsocks.json -d start

保存退出即可。执行命令 reboot 重启服务器试试看~

至此,已经可以科学上网,秒开 Youtobe,1080无压力~

给安装  Centos-6 的补充

补充一:

如果你装的系统是 Centos-6 那么执行 pip install ... 或许会有以下报错:

DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6

说明,你的 Python 版本是 2.6,终端执行命令 Python -V 查看 Python 版本。
你可以执行以下命令简单升级 Python2.7

1
2
3
yum install centos-release-SCL
yum install python27
. /opt/rh/python27/enable

然后执行命令 Python -V 验证此时的 Python 版本,注意,此时不要更换操作目录,接下来的安装和启动 Shadowsocks 都需要在这个目录下完成,因为你的 Shadowsocks 就是用这个目录下的 Python2.7 安装的。
设置开机自启动时, 也应该在 rc.local 文件里加入以下命令:

1
2
. /opt/rh/python27/enable
ssserver -c /etc/shadowsocks.json -d start

补充二:

然而,当你第二次在 python2.6 环境下执行 pip install shadowsocks 也许会有如下提示:

DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
Requirement already stisfied:shadowsocks in /usr/lib/python2.6/site-packages

虽然有报错,但你的确已经在 python2.6 环境下安装好了 shadowsocks 服务,那么在任意目录下你都可以执行 ssserver -c /etc/shadowsocks.json 命令开启 shadowsocks 服务。

补充三:

你当然可以自行 Google 完全升级 Python 的方法。

以上便是我搭建个人 VPS,实现科学上网的全过程,希望对大家有所帮助,欢迎吐槽~

Reference

安装SSserver和配置(二)