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. APT从repo安装。

Ubuntu 14.04/16.04 版本需要先添加作者的PPA:

Ubuntu 16.10及以上版本则可以直接从Ubuntu的官方repo安装,无需上述步骤。

接下来更新软件列表并安装即可。

方法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、启动

Ubuntu/Debian 通过deb包安装的(deb包安装的默认会开启自启):

CentOS,拷贝启动脚本shadowsocks-libev到/etc/init.d/目录下,确保执行权限后,启动:

需要开机自启的,可以建立符号连接到/etc/rc.d/SXXshadowsocks-libev

或者直接调用ss-server命令运行,具体用法如下:

一个例子如:

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

服务器优化

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

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

这里推荐使用bbr而不是hybla。bbr需要内核版本不小于4.9,如果内核版本不够,需要更换内核。注意换内核操作不当可能导致vps无法开机,如果发生只能找客服处理;操作之前可以向客服确认一下vps是否支持更换4.9以上的内核。一般来说kvm的是没问题的,就怕服务商做了限制,或者出了什么bug。具体的更换内核和开启bbr的步骤参考这里:

开启TCP BBR拥塞控制算法

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

1. 使用kcptun加速;

2. 安装user mode linux来开启bbr(对性能有一定要求),OpenVZ 架构VPS开启BBR步骤

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

64 条评论

  1. allan 回复

    编译deb安装包应该为
    dpkg-buildpackage -us -uc -b -i
    请楼主更新命令

    1. ken 回复

      编译deb安装包应该为
      dpkg-buildpackage -b -us -uc -d

  2. dover 回复

    Debian 8 x64 (jessie) 内核4.9.7-040907-generic
    按照上面的流程,一步一步操作的
    报这个错,请问是什么情况呢?
    ./autogen.sh: 3: ./autogen.sh: autoreconf: not found

    1. dover 回复

      现在报这个错了。。。。晕,请问是哪儿没对呀

      configure: exit 1
      dh_auto_configure: ./configure –build=x86_64-linux-gnu –prefix=/usr –includedir=${prefix}/include –mandir=${prefix}/share/man –infodir=${prefix}/share/info –sysconfdir=/etc –localstatedir=/var –disable-silent-rules –libdir=${prefix}/lib/x86_64-linux-gnu –libexecdir=${prefix}/lib/x86_64-linux-gnu –disable-maintainer-mode –disable-dependency-tracking –enable-shared –disable-ssp returned exit code 1
      debian/rules:17: recipe for target ‘override_dh_auto_configure’ failed
      make[1]: *** [override_dh_auto_configure] Error 2
      make[1]: Leaving directory ‘/root/shadowsocks-libev’
      debian/rules:28: recipe for target ‘build’ failed
      make: *** [build] Error 2
      dpkg-buildpackage: error: debian/rules build gave error exit status 2

      1. dover 回复

        好的,谢谢。

  3. dover 回复

    ./build_deb.sh

    貌似需要赋执行权限

    1. cokebar 文章作者 回复

      sh脚本当然需要,这个我就不额外提了

  4. Passenger 回复

    飞羽老师,关于服务端部署方面我再来请教几个问题。
    我部署的系统为Debian 9 x64,bbr已手动开启。
    部署SS过程如下:
    根据github主页的说明,用apt update和install两句命令成功安装。
    然后按照本文的说明配置了/etc/shadowsocks-libev/config.json文件。
    最后用/etc/init.d/shadowsocks-libev start命令成功启动SS服务。
    启动后,经过命令netstat -lnp | grep ss-server检验结果正常。
    然后我用手机客户端连接测试,发现连接失败。
    之后受命令帮助的提示,发现默认帮助里面的加密方式并没有之前设置的“chacha20-ietf-poly1305”这种。因此我将服务端和客户端的加密方式都改为“chacha20”之后连接成功。
    但根据本文所述,chacha20为不推荐的算法,所以我还是想改为之前的“chacha20-ietf-poly1305”。
    因此想请教一下,出现我这种情况的原因大概是什么呢。我应该怎样设置才能使用“chacha20-ietf-poly1305”等推荐的加密方法来传输,谢谢!
    另外,本博客另外一篇LEDE上部署客户端后面有一个tcp fast open优化,是在配置文件中加了一行”fast_open”: true。然后文章提示需要服务端同样开启tcp fast open,但是并没有提如何开启。所以请问,服务端是不是也应该在配置文件添加”fast_open”: true,谢谢!
    最后再问一个问题,tcp bbr和tcp fast open两者并不冲突吧。我看本篇文章只提了bbr优化,没有说fast open,所以想是不是bbr开启之后fast open就没有必要了,谢谢!

发表评论

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

请输入验证码 * 请输入正确的验证码