Zhen Zhang's Blog

VPS 折腾系列(一)-- shadowsocks

作为一个勤(ai)奋(hao)好(zhe)学(teng)的人,我发现自己的电脑已经不能满足需要了。在购买了域名以后,我便尝试建站的事情,虽然最终使用了hexo作为建站的方式,但是依然还是想用域名多做一些乱七八糟的事情。

首先我们来讨论一下虚拟主机、VPS和独立主机之间的区别。

三种服务器的区别

  1. 虚拟主机:虚拟主机相当于在VPS上面划分了一块硬盘,通俗一点讲,就是几个人共同合租一间屋子,而我是那些人中的一个。因而我的所有资源,包括带宽、硬盘大小、运行速度等都会受到其他人的影响。他的优势在于便宜且容易设置,而劣势在于自由度低并且没有root权限。

  2. VPS:VPS是Virtual Private Server的缩写,它相当于我们普通电脑上安装的虚拟机,是用一定的虚拟化技术搭建的独立服务器,通俗一点讲,就是一栋大房子里面的一个小屋子。由于是独立的,所以可能得到独立的IP、硬盘、网速等,几乎不会受到其他VPS的影响。作为一种处于虚拟主机和独立主机之间的存在,他能够给我们一种价格适宜的、具有完整权限的小型独立主机体验。然而对比虚拟主机,里面几乎没有任何环境的搭建,我们需要自己去搭建相应的开发环境。

  3. 独立主机:Dedicated Server,就是一个大的服务器,约等于一栋大房子。这里我们拥有大空间、独立的配置,当然伴随而来的就是最高的价格。独立主机一般可以用来搭建文件服务器、数据库服务器以及应用程序服务器。

最终,考虑自己的需求,我选择了VPS。在选择的过程中看了很多的商家,最终选择了digitalocean,主要原因是性价比高,比较适合我这样的低端用户。这里我贴出我的邀请链接,直接点击这个链接注册可以账户中获赠10美元,如果你能够消费超过25美元则我会获得25美元的奖励。

SSH key

ssh key 具有相当广泛的用途。虽然它对于我们接下来的操作不是必须的,但是可以极大的简化。当我们登陆github的时候,也可能会用到它。他的工作原理是,我们会用RSA算法在本地生成一个密钥对,保存在 ~/.ssh 下面,其中id_rsa是我们的私钥,id_rsa.pub是我们的公钥。我们在远程数据交换的时候,服务器会保存我们的公钥,并且向我们发送一段随机字符,我们收到后会用我们的私钥进行加密并传给服务器,服务器端收到我们的加密字符串后会用公钥进行解密,解密出来的结果如果和之前发给我们的一致则认为验证成功,我们就可以免除密码登陆。

首先创建ssh key (如果已经创建则跳过此布):

1
ssh-keygen -t rsa -C "email@example.com"

这里请把 email@example.com 换成自己的邮箱。之后我们查看id_rsa.pub,也就是我们的公钥,文件的内容应该是:

ssh-key public-key email@example.com。

之后我们把public-key复制下来,粘贴到我们需要的地方就可以了。

ShadownSocks服务器的搭建

买了VPS,下面要做的就是搭建科学上网的平台了。以前用的都是别的服务商提供的shadowsocks,现在我们来自己搭建一个。这里我们使用Ubuntu 14 x86来进行安装。

首先我们创建一个droplet,之后登陆:

1
ssh -p port root@ipv4

这里如果是默认的22端口,则可以去掉-p选项。ipv4替换成相应的ip address。

下面安装对应的环境和组件:

1
2
3
apt-get update
apt-get install python-pip
pip install shadowsocks

之后我们来编辑配置文件:

1
2
3
4
5
6
7
8
9
10
{
"server":"ipv4",
"server_port":8388,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"yourpassword",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false
}

现在我们就可以后台启动shadowsocks服务了:

1
2
3
4
# start background
ssserver -c /etc/shadowsocks.json -d start
# stop background
ssserver -c /etc/shadowsocks.json -d stop

如果你和我一样懒的话,可以直接两个字母搞定,不过这需要编辑.bashrc,加入这样一条指令:

1
alias ss='ssserver -c /etc/shadowsocks.json -d start'

这样每次重启vps只需要输入ss就可以了。

在配置号服务器端以后,我们现在在本地安装对应的客户端,并且把刚才的配置文件的信息填入就可以了。需要注意的是,如果需要填写protocol的名称,我们使用的是socks5 protocol。