Digital Ocean上搭建VPS小记


 听说VPS和科学上网很配哟!


  

前言

  以前科学上网都是用的佛跳墙的 ss,¥98/year,速度很快,价格也可以接受。
  自己搭建服务器,价格比佛跳墙贵,有时还会抽风,因此就没去折腾。
  但是最近觉得没事捯饬下也不错,索性昨晚就搞起来了!

Shadowsocks 介绍

  这里先介绍下 Shadowsocks,以前只知道这玩意可以科学上网,也没有去研究,本次就去好好看看。
  不过在这之前,我们先来聊聊 Socks。看下维基百科:

  SOCKS,防火墙安全会话转换协议(Socks: Protocol for sessions traversal across firewall securely),它是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS是”SOCKetS”的缩写。
  当防火墙内的客户端要访问外部的服务器时,就跟 SOCKS 代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。
  这个协议最初由 David Koblas 开发,而后由 NEC 的 Ying-Da Lee 将其扩展到版本4。最新协议是版本5,与前一版本相比,增加支持UDP、验证,以及 IPv6。
  根据 OSI 模型,SOCKS 是会话层的协议,位于表示层与传输层之间。

  有了关于 SOCKS 的基础,我们再来看 Shadowsocks 就容易了。同样看维基百科的解释:

  Shadowsocks(中文名称:影梭)是使用 Python 等语言开发的、基于 Apache 许可证开源的代理软件。Shadowsocks 使用 socks5 代理,用于保护网络流量。在中国大陆被广泛用于突破防火长城(GFW),以浏览被封锁的内容。
  Shadowsocks 分为服务器端和客户端。在使用之前,需要先将服务器端部署在支持 Python 的服务器上面,然后通过客户端连接并创建本地代理。

  那么它的工作原理又是怎么了?或者说它为什么可以实现科学上网?
  简单理解的话,Shadowsocks 是将以前通过 SSH 创建的 Socks5 协议拆开成 Server 端和 client 端,下面这个原理图能简单介绍其翻墙原理,基本上和利用 SSH tunnel 大致类似:
  
  1. PC 客户端(即你的电脑)发出请求基于 Socks5 协议跟 SS-Local 端进行通讯,由于这个 SS-Local 一般是本机或路由器等局域网的其他机器,不经过 GFW,所以解决 GFW 通过特征分析进行干扰的问题。
  2. SS-Local 和 SS-Server 两端通过多种可选的加密方法进行通讯,经过 GFW 的时候因为是常规的 TCP 包,没有明显特征码 GFW 也无法对通讯数据进行解密,因此通讯放行。
  3. SS-Server 将收到的加密数据进行解密,还原初始请求,再发送到用户需要访问的服务网站,获取响应原路再返回 SS-04,返回途中依然使用了加密,使得流量是普通 TCP 包,并成功穿过 GFW 防火墙。
  因此,Shadowsocks 的优点在于它解决了 GFW 通过分析流量特征从而干扰的问题,这是它优于 SSH 和 VPN 翻墙的地方。缺点也依然明显,需要一点点技术和资源(墙外 VPS 服务器)来搭建 Shadowsocks 服务,好在已经有人搭建相应的服务出售翻墙服务了。
  这下,大家都基本明白了吧!想要科学上网,不懂点技术怎么可以了?

VPS 介绍

  说完 Shadowsocks,接下来我们就了解下 VPS。
  VPS 是 Virtual private server(虚拟专用服务器)的缩写,指通过虚拟化技术在独立服务器中运行的专用服务器。每个使用VPS技术的虚拟独立服务器拥有各自独立的公网IP地址、操作系统、硬盘空间、内存空间、CPU资源等,还可以进行安装程序、重启服务器等操作,与运行一台独立服务器完全相同。
  说简单点,就是可以将一部真实的服务器中分割成多个不同的虚拟服务器,只是它们暴露给用户的感觉就像是一个独立的机器而已。
  目前国内外有很多提供这种服务的公司,比如常见的有Digital Ocean(DO)、BandwagonHost(搬瓦工)、Amazon Web Services(AWS)等。我选择的是DO,主要觉得它比较稳定,价格也合适,$5/month,用起来舒心。

Digital Ocean 介绍

  digitalOcean 是一家成立于2012年的总部设置在纽约的云主机商家,采用 KVM 虚拟,配置高性能的 SSD 做储存,加上服务器配备的是1000M端口,以512M内存为起点,月付最低低至5美元,在较短时间内一举获得众人的追捧和认可,当前服务器数量已经超过15000台,雇用人员19人!
  在搭建VPS之前,需要购买一台拥有root权限的VPS,我使用的就是DO主机,配置如下:
  512 MB Memory / 20 GB Disk / NYC3 - CentOS 7.0 x64
  
  在选择网络节点时推荐 New York3 节点或者 San Francisco 节点,速度较快。我安装的系统是 CentOS7.0,主要因为这个操作系统对我以后玩 NodeJS 和 NoSql 比较友好。

搭建 VPS

登录服务器

  服务器购买并安装好操作系统后,DO会给你注册时的邮箱发一份邮件,里面有SSH登录的IP地址和密码。
  然后你就可以在终端上用如下命令登录:
  # ssh root@服务器IP地址
  不过这里需要注意下,第一次登录时DO会让你修改初始的登录密码,也就是说在你输入之前邮件里的密码后,需要再输入2次你希望设置的新登录密码。如果还遇到问题,可以参考DO官网给出的说明:Support Center

配置防火墙

  1. 安装 firewalld
  # yum install firewalld firewall-config
  # systemctl start firewalld
  2. 修改 SSH 端口
  # vi /usr/lib/firewalld/services/ssh.xml
  会出现下面内容:
  

1
2
3
4
5
6
  <?xml version="1.0" encoding="utf-8"?>
  <service>
    <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
  </service>

  需要修改SSH默认端口,只需要将port=”22”改成自己希望的端口号即可。
  3. 重新加载防火墙配置
  # firewall-cmd --permanent --add-service=ssh
  # firewall-cmd --reload
  P.S. 如果使用 firewall-cmd 命令后显示 FirewallD is not running。
  表示服务器防火墙没有开启,执行 systemctl start firewalld 开启防火墙即可。

搭建 Shadowsocks 服务

  1. 安装组件
  # yum install m2crypto python-setuptools
  # easy_install pip
  # pip install shadowsocks
  2. 配置服务器参数
  # vi /etc/shadowsocks.json
  单用户配置如下:
  

1
2
3
4
5
6
7
8
9
10
11
  {
    "server":"0.0.0.0",
    "server_port":443,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"your password",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false,
    "workers": 1
  }

  多用户配置如下:
  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  {
  "timeout": 300,
  "method": "aes-256-cfb",
  "port_password":
  {
  "40001": "password1",
  "40002": "password2",
  "40003": "password3"
  },
  "_comment":
  {
  "40001": "xiaoming",
  "40002": "lilei",
  "40003": "mike"
  }
  }

  记得将上面的 your password 或 password1-password3 替换成你的密码,server_port 也是可以修改的,例如 443 是 Shadowsocks 客户端默认的端口号。关于这一块的配置可以参考Github上的官方wiki: shadowsocks README.md
  如果需要修改端口,需要在防火墙里打开响应的端口:
  # vi /usr/lib/firewalld/services/ss.xml
  下面代码粘贴到里面:
  

1
2
3
4
5
6
  <?xml version="1.0" encoding="utf-8"?>
  <service>
    <short>SS</short>
    <description>Shadowsocks port</description>
    <port protocol="tcp" port="443"/>
  </service>

  port 可自定义,但是需要跟上面的 server_port 对应起来,保存退出,然后重启 firewalld 服务:
  # firewall-cmd --permanent --add-service=ss
  # firewall-cmd --reload
  3. 启动 Shadowsocks 服务
  运行下面的命令:
  # ssserver -c /etc/shadowsocks.json
  至此shadowsocks搭建完成,shadowsocks已经可以使用。如果希望服务器后台运行SS,可以参考下一节。
  4. 安装 supervisor 实现后台运行
  1. 下载 supervisor
  # easy_install supervisor
  2. 创建配置文件
  # echo_supervisord_conf > /etc/supervisord.conf
  3. 修改配置文件
  # vi /etc/supervisord.conf
  在文件末尾添加:
  

1
2
3
4
5
  [program:ssserver]
  command = ssserver -c /etc/shadowsocks.json
  autostart=true
  autorestart=true
  startsecs=3

  4. 设置 supervisord 开机启动,编辑启动文件
  # vi /etc/rc.local
  在末尾另起一行添加:
  # supervisord
  5. CentOS7 还需要为 rc.local 添加执行权限
  # chmod +x /etc/rc.local
  至此运用 supervisord 控制 Shadowsocks 开机自启和后台运行设置完成。重启服务器即可。

连接 VPN

  连接 VPN,需要使用客户端工具 Shadowsocks,下载后,添加一下你的服务器配置并开启即可使用了。
  具体方法可以点击这里:ShadowsocksX

IOS 使用 Strongswon 建立 IPsecVPN

  这里需要额外说明下 ISO,由于上面教程里的 iOS 软件需要收费 ¥6。
  希望省钱的同学可以使用 Strongswon 建立 IPsecVPN,从而到达目的。
  这里先大致介绍下 IPsecVPN 和 Strongswon。
  IPSecVPN 即指采用IPSec协议来实现远程接入的一种VPN技术,其全称为Internet Protocol Security,是由Internet Engineering Task Force (IETF) 定义的安全标准框架,用以提供公用和专用网络的端对端加密和验证服务。
  而strongSwan则是一个完整的2.4和2.6的Linux内核下的IPsec和IKEv1 的具体实现。
  Strongswon 的使用步骤如下:
  1. 下载 Strongswan
  # yum install strongswan
  无法直接安装的各位,可以参考这篇文章:如何在 VPS 上搭建 VPN 来翻墙
  2. 配置 Strongswan
  # vi /etc/ipsec.conf
  将下面的代码覆盖原有内容:
  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  config setup 
    # strictcrlpolicy=yes
    uniqueids=never #允许多设备同时在线
    # charondebug="cfg 2, dmn 2, ike 2, net 0" #要看Log时,取消注释本行
  
  conn IPsec_xauth_psk
    keyexchange=ikev1
    left=SERVER #这里换成你登录 VPN 用的域名或 IP
    leftauth=psk
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=psk
    rightauth2=xauth
    rightsourceip=10.0.0.0/24
    auto=add
  
  conn %default
    keyexchange=ikev1
    dpdaction=hold
    dpddelay=600s
    dpdtimeout=5s
    lifetime=24h
    ikelifetime=240h
    rekey=no
    left=SERVER #这里换成你登录 VPN 用的域名或 IP,与生成证书时相同
    leftsubnet=0.0.0.0/0
    leftcert=vpnHostCert.pem
    leftsendcert=always
    right=%any
    rightdns=8.8.8.8
    rightsourceip=10.0.0.0/24

  编辑 /etc/ipsec.secrets, 创建用户名及密码
  # vi /etc/ipsec.secrets
  将一下内容添加进去:
  #验证用户所需的信息   : PSK "SECRET" # 这里 SECRET 可随意填写密钥   用户名 : XAUTH "密码"
  3. 启动 Strongswan 服务
  # ipsec start
  4. 配置 IOS
  在 iOS 中选择添加 IPSec VPN 设置,然后输入服务器的域名或者 IP 地址,用户名,密码及上面的密钥就可以连接成功了!

使用 FinalSpeed 加速

FinalSpeed 介绍

  根据其官方介绍,FinalSpeed是高速双边加速软件,可加速所有基于tcp协议的网络服务,在高丢包和高延迟环境下,仍可达到90%的物理带宽利用率,即使高峰时段也能轻松跑满带宽。
  用途:可以压缩流量发包(双边),与Net-Speed多发包不同的是,FinalSpeed是压缩流量以增加传输成功率,这样就不会多耗费VPS流量,但是有可能对同机房的网络稳定造成影响。

FinalSpeed 安装

  具体安装使用不再赘述,请参考这里:finalspeed加速shadowsocks

部署 Hexo 到 VPS

  因为今年 gitcafe 被 coding 收购了,原本托管在 gitcafe 上的网站代码也就随之迁到了 coding.net 上。如今有了自己的VPS,自然就顺手把博客搬上去啦!
  这里的具体步骤可以参考这里:通过 rsync 将 Hexo 部署到 Digitalocean vps
  需要注意的是,因为网站搬迁了,所以之前的 DNS 解析也需要随之修改,教程如下:
  1. Godaddy注册商域名修改DNS地址
  2. DNSPod教程
  最后,补充几句,在不使用其他工具的情况下登录VPS,每次都需要输入 ssh root@xxx,觉得麻烦的话,可以用上篇文章里介绍的 Alfred 写个简单的 workflow 哟!
  下期再见~

参考链接

  1. Shadowsocks翻墙解决方案
  2. 如何在 VPS 上搭建 VPN 来翻墙
  3. 在搬瓦工 VPS 上搭建 Hexo
  4. 通过 rsync 将 Hexo 部署到 Digitalocean vps
  5. VPS安装Shadowsocks穿越长城
  6. finalspeed加速shadowsocks

MaybeXia wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创分享,您的支持将鼓励我继续创作!