Shadowsocks – libev 服务端的部署

在VPS上部署shadowsocks,推荐使用C语言编写的基于libev的shadowsocks-libev的服务端。下面介绍在Linux系统的VPS上安装并配置的方法。Linux请采用近期的发行版,不要过老。本文基本是照着github上的readme翻译的,给那些英文苦手一点帮助。本篇只提供部分安装方法,其他方式请参考github上原repo的readme。

由于shadowsocks-libev变动频繁,请以shadowsocks-libev的Github页面的readme为准,如有问题可至issue页面查找有无类似问题,或者发issue提问:

https://github.com/shadowsocks/shadowsocks-libev

如果您还未购买将要购买国外VPS搭建shadowsocks,这里为您推荐几家VPS提供商,详情见《关于本站》页面。

一、安装shadowsocks服务端

方法1. 从snap安装。

如果OS支持snap,那么先安装snap core,再安装shadowsocks-libev即可,非常简单;不过后续开机自启等配置步骤是不太一样的,本文暂未描述,暂请自行研究。

方法2. 使用脚本自动编译deb安装,适用于Debian (>=8) / Ubuntu 14.04 (Trusty) / 16.04 (Xenial) / 16.10 / Higher

(会自动编译安装所有依赖包,并同时安装simpleobfs plugin)

方法3. 手动编译安装(Ubuntu 16.04 / Debian 8及以上),在你需要从最新master源码编译时候可以使用这种方式。

先通过git下载源码:

安装必须的包:

Debian 8的用户,注意需要从Debian Backports安装libsodium(最低版本v1.0.8)。

注意:新版本需要debhelper版本大于等于10,不满足的请使用Backports安装新版debhelper:

然后生成deb包并安装,一步步执行(留意是否出错 如果出错需要检查系统或者之前的步骤):


其他Unix-like的系统,特别是Debian-based的Linux发行版如: Ubuntu, Debian or Linux Mint

先从最近的源码编译安装libmbedtls和libsodium

安装依赖包:

编译:

二、配置与启动

1、配置文件为:/etc/shadowsocks-libev/config.json,格式说明:

其中:

server:主机域名或者IP地址,尽量填IP

server_port:服务器监听端口

password:密码

method:加密方式 所有支持的加密方式请参照官方文档。这里本人推荐只使用支持AEAD的加密方式,包括以下五种: aes-128-gcm/aes-192-gcm/aes-256-gcm/chacha20-ietf-poly1305/xchacha20-ietf-poly1305

timeout:连接超时时间,单位秒。要适中。

注意引号。

2、控制启动、停止、重启:

由于目前大部分新的linux发行版都已经支持systemd,因此,可以统一使用如下命令

 

需要前台运行时候,执行ss-server命令运行,具体用法如下:

一个例子如:

查看shadowsocks是否正确启动并监听相应端口,看到有ss-server进程LISTEN正确的端口就表示成功:

服务器优化

1.  开启TCP Fast Open:

需求: 系统内核版本≥3.7,shadowsocks-libev≥3.0.4。

修改 /etc/sysctl.conf ,加入如下一行:

执行如下命令使之生效:

配置文件 /etc/shadowsocks.json 增加一行:

2. 其他优化以及配置单边/双边加速

参照官方说明: http://shadowsocks.org/en/config/advanced.html

不过官方说明里面的TCP流控使用了hybla:

这里推荐使用bbr而不是hybla。bbr需要内核版本不小于4.9,如果内核版本不够,需要更换内核。注意换内核操作不当可能导致vps无法开机,如果发生问题,有救援模式的可能还能救一下,否则只能找客服处理;KVM的通常更换内核没有问题,OpenVZ是不支持更换内核的。具体的更换内核和开启bbr的步骤参考这里:

开启TCP BBR拥塞控制算法

再推荐一个一键脚本:

Debian/Ubuntu 开启 TCP BBR 拥塞算法

然后换完内核开启BBR之后,可以再换一个魔改版的BBR,优化了参数:

Debian/Ubuntu TCP BBR 改进版/增强版

注意,OpenVZ的VPS可能无法修改大部分的属性,因此如果想要优化网速需要考虑:

1. 使用kcptun双边加速;

2. 通过linux kernel library来实现,同样是一键脚本:

OpenVZ 平台 Google BBR 一键安装脚本。

如果您还未购买将要购买国外VPS搭建shadowsocks,这里为您推荐几家VPS提供商,详情见《关于本站》页面。

68 条评论

  1. chen 回复

    dpkg-buildpackage -us -uc这一步报错

    tail: cannot open ‘debian/changelog’ for reading: No such file or directory
    dpkg-buildpackage: error:tail of debian/changelog gave error exit status 1

    1. cokebar 文章作者 回复

      当前目录不对 或者git clone失败或不完整

      1. chen 回复

        感谢 按照你的教程成功安装了

        再出个优化教程就好了

    2. cokebar 文章作者 回复

      不用优化 默认就可以 官方那个优化对于私有VPS不公开 连接数不多的情况基本没用 对于丢包拥塞也是没啥效果甚至会降速 除非你用ZetaTCP之类的专门加速软件

      1. GUAN 回复

        1、本人linux新手,不知安全方面是否有优化必要,譬如【禁止ss通过loopback访问本地资源】等。
        2、有必要安装supervisor监视ss防崩溃吗,加载多个ss配置时也比较简单,比起本博的ss多进程脚本,执行效率方面怎么样?
        3、学习手动编译时,根据作者的说明,以及网上找到的一些架设教程全都安装失败;dep包自动编译倒是成功并能正常使用,但看编译过程有许多error,是否能用就不用管这些error了?
        4、最后希望能介绍一下ss编译安装的升级方法,网上几乎没有这方面的教程,谢谢!

        1. cokebar 文章作者

          1. 目前版本ss已经默认禁用,无需额外操作;
          2. python版可以考虑
          3. warning是可以过的,有error会停下来。 最近版本的依赖关系简直是mess,建议至少Ubuntu 16.04版本,可参考我博客的步骤,刚更新过;作者搞了个PPA,可以直接装,版本也比较新,图省事就别自己编译了;
          4. 升级安装和第一次安装是一样的,重新编译、安装即可。如果是git clone下来的源码,可以cd到目录里后git pull 拉取最新源码,否则就得删了目录重新git clone

  2. chen 回复

    apt-get install build-essential autoconf libtool libssl-dev gawk debhelper git

    这一步有问题 之前没发现

    unable to localte package gawkdebhelper

    这个没安装成功但是好像对shadowsocks没影响。。

  3. dover406 回复

    先添加GPG Key的时候报这个错:

    Cannot write to `-‘ (Broken pipe).

    1. cokebar 文章作者 回复

      建议不要使用第一种方式。而且那是Ubuntu或者Debian的步骤

  4. gengmu 回复

    ubuntu 第一种成功安装!

  5. 引用: shadowsocks – libev 服务端的部署 Server Side Deployment | Mpkb's Blog

  6. F 回复

    請教博主,Ubuntu 用「从源码编译安装」失敗,運行命令 ss-server -c /etc/shadowsocks-libev/config.json 提示
    2015-02-26 11:14:24 INFO: initialize ciphers… rc4-md5
    2015-02-26 11:14:24 ERROR: bind: Address already in use
    2015-02-26 11:14:24 ERROR: Could not bind
    2015-02-26 11:14:24 ERROR: bind() error

  7. F 回复

    問題已解決,換了個機房就好了,感謝作者

  8. 晓南晚风 回复

    总感觉ss-libv服务端不太稳定

  9. 微博档案 回复

    我的服务器用的python版,我客户端也是用的python,不过我想换一个了,我的客户端类似树莓派的设备,流量大了就死机。

  10. younis 回复

    问一下ss-server -c这一步的时候出现ERROR: Invalid DNS thread number怎么破?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

请输入验证码 *