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. Penpo 回复

    你好,我的公司路由似乎限制了访问外部非常用端口的连接,所以我连上我自己的 shadowsocks 端口后基本上一分钟内就会断开(但我在 4G 网络和家里的网络都可以正常访问),我只能在自己服务器上开好多个端口频繁切换。我看到你自己的 ss 配置是使用的二级域名和443端口,我试过你的帐号似乎连接的更稳定一点。我自己试过用 nginx 把二级域名的443端口转发到自定义端口上,但是浏览器会报 ssl 错误。我的 vps 上 ip 的443端口已经用作他用,所以想请教一下,你是怎么把二级域名的web端口重定向到 ss 上去的?

    1. cokebar 文章作者 回复

      那个二级域名指向的是搬瓦工的VPS,不是这个站点的服务器。你说的443共用,估计不太好弄。
      你可以先试试sniproxy:https://github.com/dlundquist/sniproxy

      1. Penpo 回复

        后来只能把IP上的443端口腾出来给shadowsocks用,nginx停止监听443端口现在就好了,也不会再掉线了。

  2. Cangrou 回复

    CentOS 6 VPS, 安装完源码后,配置文件怎么创建?纯小白 ,网上查了很多命令,touch , vi 都不行,望赐教,谢谢!

  3. 引用: Centos 7安装配置使用Shadowsocks最新教程 – xcmd

  4. 引用: ShadowSocks-libev搭建 | 做一个幸福的人,读书,旅行,努力工作,关心身体和心情。

  5. chadwick 回复

    你好,到这一步./configure && make 后,
    提示-bash: syntax error near unexpected token `;&’
    然后进行不下去了,是什么原因?求解

    1. cokebar 文章作者 回复

      那个是两个连续的”&”符号 由于wordpress编辑器的原因老是变成“&”(HTML里代表&符号)

    2. cokebar 文章作者 回复

      已更新正确的写法 请手工刷新网页

  6. chadwick 回复

    你好,我在启动时添加了-u,但是并没有开启udp转发,这是怎么回事呢?如何能开通udp转发?
    我是在centos下yum安装的libev。
    在netstat -lnp里,ss-server所listen的端口只有tcp,不管是-u或-U都不能让ss-server成功listen udp端口。添加-u配置,那么udp端口就排在下面。添加-U配置,那么tcp端口已经不监听了,udp端口依然在几个端口下方而不listen。求解,谢谢

    1. cokebar 文章作者 回复

      UDP协议没有LISTEN

    2. cokebar 文章作者 回复

      -u是开启UDP转发支持,同时保留TCP;-U是只有UDP没有TCP

      1. chadwick 回复

        我只添加了-U,结果ss客户端无法连接,被服务器拒绝。开启了TCP才能访问网络,这样怎么解决呢?客户端是最新3.0版。

        1. cokebar 文章作者

          用-u不要用-U

      2. chadwick 回复

        抱歉刚刚没有说清楚。-u也无法转发udp,但可以走tcp所以浏览器等应用可以访问网络。而一些需要udp转发的软件则无法访问网络。用sockscap64测试tcp成功,测试udp则失败

  7. 引用: Shadowsocks-libev 服务器端的部署 – Kane-Tech

  8. techmoe 回复

    亲测ubuntu下还要安装libpcre3 libpcre3-dev这两个包才可以正常configure,否则报错

    configure: error: Cannot find pcre library. Configure --with-pcre=DIR

    解决:apt-get install libpcre3 libpcre3-dev

    1. cokebar 文章作者 回复

      应该是新增mbedtls版本后新增的dependency,最新的依赖请以作者github最新readme为准

  9. treefox 回复

    大哥,你好,我是新手,用的是阿里云ECS,系统是Ubuntu,版本14.04.5 LTS,我用git克隆以后,用dpkg-buildpackage -us -uc,但是报错,信息如下
    root@iZuf662wb1ayepwrt475wsZ:~/abc/shadowsocks-libev# dpkg-buildpackage -us -uc
    dpkg-buildpackage: source package shadowsocks-libev
    dpkg-buildpackage: source version 2.5.6-1
    dpkg-buildpackage: source distribution unstable
    dpkg-buildpackage: source changed by Max Lv
    dpkg-buildpackage: host architecture amd64
    dpkg-source –before-build shadowsocks-libev
    debian/rules clean
    dh clean –with systemd
    dh_testdir
    dh_auto_clean
    dh_clean
    dpkg-source -b shadowsocks-libev
    dpkg-source: error: can’t build with source format ‘3.0 (quilt)’: no upstream tarball found at ../shadowsocks-libev_2.5.6.orig.tar.{bz2,gz,lzma,xz}
    dpkg-buildpackage: error: dpkg-source -b shadowsocks-libev gave error exit status 255
    root@iZuf662wb1ayepwrt475wsZ:~/abc/shadowsocks-libev#
    帮我看看嗒,谢谢啦

  10. allan 回复

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

发表回复

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

请输入验证码 *