在VPS上搭建ss


在VPS(Virtual private server)上搭建ss(Shadowsocks)本身很简单,本文不会对细节(如VPS的选择、购买及依赖安装)做过多的深入,主要会对概念和简单的原理(因为深的我也不懂😛)以及主要流程进行介绍。

主要概念

VPS

虚拟专用服务器(英语:Virtual private server,缩写为VPS),是将一台服务器分割成多个虚拟专用服务器的服务。实现VPS的技术分为容器技术和虚拟机技术。在容器或虚拟机中,每个VPS都可分配独立公网IP地址、独立操作系统、实现不同VPS间磁盘空间、内存、CPU资源、进程和系统配置的隔离,为用户和应用程序模拟出“独占”使用计算资源的体验。VPS可以像独立服务器一样,重装操作系统,安装程序,单独重启服务器。VPS为用户提供了管理配置的自由,可用于企业虚拟化,也可以用于IDC资源租用。 —— Wiki

关于服务器的选择及购买我在其他文章中有提到,有需要的可以前往或查找相关资料。

Shadowsocks

Shadowsocks(简称SS)是一种基于Socks5 代理方式的加密传输协议,也可以指实现这个协议的各种开发包。目前包使用Python、C、C++、C#、Go语言、Rust等编程语言开发,大部分主要实现(iOS平台的除外)采用Apache许可证、GPL、MIT许可证等多种自由软件许可协议开放源代码。Shadowsocks分为服务器端和客户端,在使用之前,需要先将服务器端程序部署到服务器上面,然后通过客户端连接并创建本地代理。——Wiki

关于SS(及SSR)Wiki上有进一步的介绍,有兴趣的同学可以点击查看。其原理简单来说,就是你在境外拥有一台未被GFW拉入黑名单的服务器,你就可以通过与这台服务器建立起一个加密通道躲过GFW的过滤规则,从而访问墙外资源。更深入的解释可以参考 这篇博客 和 这篇博客Alt text

搭建流程

作为搭建的前提,我们已经在合适的平台上购买并了VPS并进行了简单的配置,接下来便开始着手进行“见不得人的勾当”。

ip检测

我们首先要确定的是,我们VPS的ip地址没有在过滤名单中,通过 这个网站 进行检测,若国内国外都可以正常与VPS进行ICMP/TCP连接,便可以进行之后的步骤。

SS/SSR安装

SSR对SS在混淆和协议方面进行了改进,两者在安装方式上没有明显的不同,我们这里以SS为例。

SS 安装及启动

# 安装 pip,若以安装可直接跳过
sudo apt install python-pip
# 使用pip安装shadowsocks
sudo pip install shadowsocks

如此shadowsocks便安装完成了,接下来以指定配置文件的方式启动ss,

# 编辑配置文件, 不同安装方式对应的默认配置文件不同,请读者自行匹配或创建
vim /etc/shadowsocks.json
{
  "server": "0.0.0.0", // 服务器过滤规则,0.0.0.0表示允许所有来源ip请求
  "server_port": 8399, // 指定服务器对外开放端口
  "local_address": "127.0.0.1", // 本地代理监听地址
  "local_port": 1080, // 本地代理监听端口
  "password": "${your_pass_word}", //指定连接方式
  "timeout": 600, //超时设置
  "method": "aes-256-cfb" //加密方式,后续客户端设置需要与这里保持一致
}
# 启动ss服务器
/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json -d start
# 关闭
/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json -d stop
# 重启
/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json -d restart
关于 undefined symbol: EVP_CIPHER_CTX_cleanup

可能有同学在执行时会碰到如上报错,是由于在openssl1.1.0版本中,废弃了EVP_CIPHER_CTX_cleanup函数,只需要将 ${your_python_lib}/dist-packages/shadowsocks/crypto/openssl.py 中的EVP_CIPHER_CTX_cleanup替换成EVP_CIPHER_CTX_reset即可。

关于保姆安装方法

参考 这篇文章,将多种版本的ss进行打包及手把手教学安装

本地客户端安装及配置

pc端

  1. github仓库下载匹配版本的shadowsocks客户端并进行安装。
  2. 点击 服务器 -> 服务器设置…Alt text进入服务器设置页面
  3. 根据VPS的配置文件(如上文的/etc/shadowsocks.json)进行配置Alt text
  4. 完成设置,进行连接

手机端

这里以iphone为例

  1. 登录非国区appstore账户,下载Spectre
  2. 通过pc端的客户端分享配置,扫描二维码或粘贴url添加服务器信息Alt text
  3. 由于某些原因不方便安装pc端ss客户端的,可以自己生成url在手机端进行粘贴配置,如下
// 拼接待加密路径
String uri = "${method}:${password}@${your_ip_address}:${server_port}";
	// base64编码
String base64 = Base64.getEncoder().encodeToString(uri.getBytes());
      // 输出url
System.out.println("ss://" + base64);

查看服务器端访问日志

tail -f /var/log/shadowsocks.log

关于端口检测及开放

可能有同学会碰到这种情况: ip监测正常, 客户端与服务器端配置也一致,但是访问日志中显示一直接收不到请求。遇到这种情况就需要对服务器端口进行监测。监测网址

情况一: 国外服务器成功连接,国内服务器失败

这种情况是这个端口被ban了,在配置文件中修改server_port并重启ss服务尝试。

情况二: 所有服务器都显示连接失败(Connection to xxxx:xxxx failed)

Alt text    这种情况比较大的可能是防火墙未将配置的端口打开,执行

sudo ufw allow ${server_port}/tcp

后再次进行端口检测

参考资料:

  1. Shadowsocks四合一安装
  2. 关于Ubuntu下防火墙的配置
  3. 一篇比较详细的关于ss/ssr配置的博客
  4. ss原理简单介绍
  5. 胡子哥的ss原理介绍及安装说明 …
comments powered by Disqus