树莓派3B 搭建ss服务端笔记(2019年更新)

目前家里在用 SoftBank 的光网,1000M 上下对等,而且是直连国内的线路,大部分时间连接国内网络都在 30ms 左右,平时带宽基本上闲置。

这几天看了下家里 Softbank 自带的 光BB Unit 路由器 里居然允许端口转发,于是手头树莓派搭了个 LNMP 试了下,居然 80 和 443 端口都可以直接转发,那 ss 肯定没问题了…

于是简单鼓捣一下,尝试搭建个 ss 服务端。

本教程总体采用 apt 和 pip 进行安装,无需编译,两分钟即可搭建完成。适合于 树莓派3BRaspbian 系统,以及支持 apt 的 Debian 系的系统(Ubuntu 等)。

准备

当然,安装之前,需要打开树莓派的 ssh,而且最好做好相关防护,不然端口很可能被扫爆。

更新源

sudo apt update && sudo apt upgrade && sudo apt autoremove

fail2ban

安装 fail2ban 服务,该服务装好后重启生效、自启动,作用:ssh登录错误5次ban10分钟。

sudo apt install fail2ban

另外可以在 /etc/fail2ban/jail.conf 修改fail2ban参数。

安装

树莓派的 Raspbian 是基于 Debian 的系统,支持 apt 软件包管理(新立得)安装,那么就不需要编译了,树莓派这个性能,编译东西简直要炸了。apt 源里默认是有 shadowsocks 的,可由于作者不再维护 apt 和 pip 中的 Shadowsocks,定格在了很老的2.8.2,所以我们用 python 的 pip 安装

首先安装 python3 和 pip

sudo apt install python3 && sudo apt install python3-pip

然后使用 python3 的 pip 安装最新的 shadowsosks

sudo python3 -m pip install https://github.com/shadowsocks/shadowsocks/archive/master.zip

安装完成查看一下 shadowsocks 的版本

sudo ssserver --version

软件包附带两个命令,ssserversslocal。一个用于服务端配置,一个用于客户端配置。详细情况可以运行man shadowsocks来查看。

另外新版 SS 支持了 chacha20 等加密算法,需要安装 libsodium

sudo apt install libsodium-dev

配置

有两种配置方法,一种是命令行参数配置,一种是配置文件。

命令行配置

参数名
参数意义
-s服务器地址
-p服务器端口号
-k服务器密码
-m服务器加密方式
-t服务器超时时间
-c配置文件路径
-fast-open快速打开模式,仅Unix/Linux系统可用
-workers工作者数量

每次运行 shadowsocks 都将一大堆参数传进去是件很麻烦的事情。所以一般情况下都是采用配置文件的方式来配置的。然后通过-c参数将配置文件路径传入。

配置文件

shadowsocks 的配置文件是一个json形式的文件,各参数的意义和命令行参数意义相同。

{
    "server": "0.0.0.0",
    "server_port": 5228,
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "password": "mypassword",
    "timeout": 300,
    "method": "chacha20-ietf-poly1305",
    "fast_open": true,
    "workers": 1,
    "prefer_ipv6": false
}

服务器地址就写0.0.0.0即可,0.0.0.0意思是转发到外网,不要写127.0.0.1,127.0.0.1是仅在内网使用。端口号可以自己写,但是不要占用其他服务的端口,我这里使用 5228 是因为我们学校仅允许连接外网 22/80/443/5228 端口。本地地址和本地端口是客户端使用的,服务端可以不用理会。密码尽量采用复杂一点的密码,以保证安全性。加密方式如果仅仅在手机或者电脑使用,用 aes-256-cfb 就可以,如果是路由器使用推荐 chacha20-ietf-poly1305。如果服务器是Linux系统的话,打开fast_open。

配置文件编辑完毕之后,就可以运行shadowsocks了。尝试前台运行:

ssserver -c /etc/shadowsocks/config.json

(新版 SS3.0 应该不会出这个问题)这时候会发现报错:

AttributeError: /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

这是由于新版openssl库更新导致名称变更产生的问题。

/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py

将此文件中的52行和111行中的cleanup更新为reset后,再次启动即可。

后台运行和停止

ssserver -c /etc/shadowsocks/config.json -d start
ssserver -c /etc/shadowsocks/config.json -d stop

以上都是在root用户下运行的。以root方式运行可能会有一些安全问题。所以一般都是使用普通用户运行:

ssserver -c /etc/shadowsocks/config.json --user nobody -d start

开机启动

以上都需要自己手动运行命令来启动shadowsocks。要让shadowsocks在系统启动时自动运行,需要在/etc/rc.local中添加命令。

sudo ssserver -c /etc/shadowsocks/config.json --user nobody -d start

后续

开启BBR

Ubuntu 18.04 LTS 等新版系统可以直接开启 BBR,如果是树莓派的话,参考:

https://zlypi.com/2017/11/25/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%8D%87%E7%BA%A7%E5%86%85%E6%A0%B8%E5%88%B04-90%E5%B9%B6%E5%BC%80%E5%90%AFgoogle-%E7%9A%84bbr-tcp%E5%8A%A0%E9%80%9F/

开启 BBR 后,网速有极大提升,我的树莓派从原来的 40Mbps 左右带宽增速到了 80Mbps,效果显著。

其他优化

其实还可以做一些优化,安装KCPTun,优化系统连接数设置等,网上有其他教程,以后有空再做。

17 Comments (7580 Views)

  1. 感谢楼主的教程,我是用的楼主提供的BBR优化的教程然后用的秋水的shadowsocks-libev一键脚本,在没做BBR优化之前树莓派3B+只有可怜的20M+左右,优化之后能有40M+左右。
  2. kaki says:
    服务器能运行但是连不上。同用的BBユニット,ポート転送里面设定好了之后还要设定其他的部分么?
  3. Martin says:
    想请教一下,我现在人在国外,按照博主的做法搭好了,也确实能用,但是在国内用的人反映速度慢得吓人,我自己用热点接速度是可以看youtube的是不是说明我这个ip就是不行?这种情况是不是只能租vps?
  4. 该换shadowsocks-libev了……python版好像已经停更了吧
  5. Xavier says:
    成功安装好了,并且也连接上了,从客户端到树莓派这边完全没问题,但是不能接受到任何数据,看log里面一直显示在connecting
  6. Xavier says:
    启动服务后出现了ERROR    Decrypt failed,请问这是个什么问题呢?
  7. Glost says:
    想问想宽带必须是公网ip吗
  8. seki says:
    服务确实运行了,但是怎么都连接不上

Leave a Reply

Your email address will not be published. Required fields are marked *