runsisi's

technical notes

搭建 Shadowsocks 服务

2019-03-03 runsisi#proxy

突然发现 Shadowsocks 已经不流行了(V2Ray),简单总结下。

环境信息如下:

  • 服务端 Ubuntu 16.04
  • 客户端 Ubuntu 18.04
  • 浏览器 Chrome

创建云主机

推荐 VULTR 平台,新注册用户充值 25 美元送 50 美元,支持支付宝和微信支付。

云主机类型选择 3.5 美元/月的配置即可。

服务端安装配置

  1. 安装 Shadowsocks 服务端软件
~$ sudo apt install python-pip
~$ sudo pip install shadowsocks
~$ which ssserver
/usr/local/bin/ssserver
  1. 创建并编辑服务端配置文件
~$ sudo vi /etc/ss.json
{
  "server": "0.0.0.0",
  "server_port": 12345,
  "password": "mypassword",
  "timeout": 600,
  "method": "aes-256-cfb"
}
  1. 创建 systemd 服务文件
~$ sudo vi /lib/systemd/system/sss.service
[Unit]
Description=sss
After=network.target

[Service]
EnvironmentFile=-/etc/default/sss
ExecStart=/usr/local/bin/ssserver -c /etc/ss.json
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=simple

[Install]
WantedBy=multi-user.target
  1. 启用服务
~$ sudo systemctl daemon-reload
~$ sudo systemctl enable sss
Created symlink from /etc/systemd/system/sss.service to /lib/systemd/system/sss.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/sss.service to /lib/systemd/system/sss.service.
~$ sudo systemctl start sss

客户端安装配置

  1. 安装 Shadowsocks 客户端软件
~$ sudo apt install python-pip
~$ sudo pip install git+https://github.com/shadowsocks/shadowsocks.git@2.9.1
Collecting git+https://github.com/shadowsocks/shadowsocks.git@2.9.1
  Cloning https://github.com/shadowsocks/shadowsocks.git (to revision 2.9.1) to /tmp/pip-req-build-pq3rex5p
Installing collected packages: shadowsocks
  Running setup.py install for shadowsocks ... done
Successfully installed shadowsocks-2.9.1
~$ which sslocal
/usr/local/bin/sslocal

注意:老版本 Shadowsocks 与新版本 openssl 存在兼容性问题,因此安装最新版本。

  1. 创建环境变量文件
~$ sudo vi /etc/default/ssc
SERVER=ss.example.com
PORT=12345
PASSWORD=mypassword
LOCAL_PORT=1080
ENCRYPT=aes-256-cfb
  1. 创建 systemd 服务文件
~$ sudo vi /lib/systemd/system/ssc.service
[Unit]
Description=ssc
After=network.target

[Service]
EnvironmentFile=-/etc/default/ssc
ExecStart=/usr/local/bin/sslocal -s ${SERVER} -p ${PORT} -k ${PASSWORD} -l ${LOCAL_PORT} -m ${ENCRYPT}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=simple

[Install]
WantedBy=multi-user.target
  1. 启用服务
~$ sudo systemctl daemon-reload
~$ sudo systemctl enable ssc
Created symlink /etc/systemd/system/multi-user.target.wants/ssc.service → /lib/systemd/system/ssc.service.
~$ sudo systemctl start ssc

浏览器配置

  1. 安装 Proxy SwitchyOmega 插件

如果从 Chome 应用商店下载扩展的话,这一步比较尴尬,因为鸡和蛋的问题,可以从项目主页下载扩展,然后打开 Chrome 的插件管理页面

extension

将下载的插件拖放到页面上即可进行安装。

  1. 打开 Proxy SwitchyOmega 插件配置页面

options

  1. 创建如下内容的 shadowsocks profile

ss profile

  1. 配置 auto switch profile 如下:

auto profile

其中匹配规则的下载地址为:https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

TCP BBR

如果可能的话,建议在服务端系统上启用 TCP 的 BBR 拥塞控制算法,但 BBR 要到比较新的内核版本才有,如果要在 CentOS 上安装新的内核 rpm 包,可以参考 kernel.el7.x86_64.rpm 的脚本进行构建,或者访问 ELRepo下载已构建好的版本。

具体的配置方法,可以参考 [1]。

参考资料

[1] BBR 阻塞算法,真是黑科技

https://fiveyellowmice.com/posts/2016/12/bbr-congestion-algorithm-dark-science.html

[2] 深夜聊聊Bufferbloat以及TCP BBR

https://blog.csdn.net/dog250/article/details/54999332