Ubuntu下Shadowsocks配置指南
Ubuntu下Shadowsocks安装及优化
前言
本教程旨在提供简明的Ubuntu 16.04下安装服务器端Shadowsocks。不同于Ubuntu 16.04之前的教程,本文抛弃initd,转而使用Ubuntu 16.04支持的Systemd管理Shadowsocks的启动与停止,显得更为便捷。优化部分包括BBR、TCP Fast Open以及吞吐量优化。
本教程仅适用于Ubuntu 16.04及之后的版本,基于Python 3,支持IPv6。
安装pip
本教程使用Python 3为载体,因Python 3对应的包管理器pip3并未预装,首先安装pip3:
1 | sudo apt install python3-pip |
安装Shadowsocks
因Shadowsocks作者不再维护pip中的Shadowsocks(定格在了2.8.2),我们使用下面的命令来安装最新版的Shadowsocks:
1 | pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip |
安装完成后可以使用下面这个命令查看Shadowsocks版本:
1 | sudo ssserver --version |
目前会显示“Shadowsocks 3.0.0”。
创建配置文件
创建Shadowsocks配置文件所在文件夹:
1 | sudo mkdir /etc/shadowsocks |
然后创建配置文件:
1 | sudo nano /etc/shadowsocks/config.json |
复制粘贴如下内容(注意修改密码“password”):
1 | { |
添加配置信息多用户
1 | // 多用户 |
添加配置信息单用户
1 | // 单用户 |
参数说明:
1 | server:Shadowsocks服务器地址 |
测试Shadowsocks配置
首先记录下服务器的IP地址
1 | ifconfig |
找到IPv4地址(和IPv6地址),如我的ifconfig输出为
1 | eth0 Link encap:Ethernet HWaddr 46:91:89:4e:c1:52 |
所以我的IPv4地址是138.68.51.55,IPv6地址是2604:a880:2:d0::3727:7001。
然后来测试下Shadowsocks能不能正常工作了:
1 | ssserver -c /etc/shadowsocks/config.json |
在Shadowsocks客户端添加服务器,如果你使用的是我提供的那个配置文件的话,地址填写你的IPv4地址或IPv6地址,端口号为8388,加密方法为chacha20-ietf-poly1305,密码为你设置的密码。然后设置客户端使用全局模式,浏览器登录Google试试应该能直接打开了。
配置Systemd管理Shadowsocks
新建Shadowsocks管理文件
1 | sudo nano /etc/systemd/system/shadowsocks-server.service |
复制粘贴:
1 | [Unit] |
Ctrl + O保存文件,Ctrl + X退出。
启动Shadowsocks:
1 | sudo systemctl start shadowsocks-server |
设置开机启动Shadowsocks:
1 | sudo systemctl enable shadowsocks-server |
至此,Shadowsock服务器端的基本配置已经全部完成了!
优化
这部分属于进阶操作,在你使用Shadowsocks时感觉到延迟较大,或吞吐量较低时,可以考虑对服务器端进行优化。
开启BBR
BBR系Google最新开发的TCP拥塞控制算法,目前有着较好的带宽提升效果,甚至不比老牌的锐速差。
升级Linux内核
BBR在Linux kernel 4.9引入。首先检查服务器kernel版本:
1 | uname -r |
如果其显示版本在4.9.0之下,则需要升级Linux内核,否则请忽略下文。
开启BBR
运行lsmod | grep bbr,如果结果中没有tcp_bbr,则先运行:
1 | modprobe tcp_bbr |
运行:
1 | echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf |
运行:
1 | sysctl -p |
保存生效。运行:
1 | sysctl net.ipv4.tcp_available_congestion_control |
若均有bbr,则开启BBR成功。
优化吞吐量
新建配置文件:
1 | sudo nano /etc/sysctl.d/local.conf |
复制粘贴:
1 | # max open files |
运行:
1 | sysctl --system |
编辑之前的shadowsocks-server.service文件:
1 | sudo nano /etc/systemd/system/shadowsocks-server.service |
在ExecStart前插入一行,内容为:
1 | ExecStartPre=/bin/sh -c 'ulimit -n 51200' |
即修改后的shadowsocks-server.service内容为:
1 | [Unit] |
Ctrl + O保存文件,Ctrl + X退出。
重载shadowsocks-server.service:
1 | sudo systemctl daemon-reload |
重启Shadowsocks:
1 | sudo systemctl restart shadowsocks-server |
开启TCP Fast Open
TCP Fast Open可以降低Shadowsocks服务器和客户端的延迟。实际上在上一步已经开启了TCP Fast Open,现在只需要在Shadowsocks配置中启用TCP Fast Open。
编辑config.json:
1 | sudo nano /etc/shadowsocks/config.json |
将fast_open的值由false修改为true。Ctrl + O保存文件,Ctrl + X退出。
重启Shadowsocks:
1 | sudo systemctl restart shadowsocks-server |
注意:TCP Fast Open同时需要客户端的支持,即客户端Linux内核版本为3.7.1及以上;你可以在Shadowsocks客户端中启用TCP Fast Open。
至此,Shadowsock服务器端的优化已经全部完成了!
Ubuntu更新SS以支持新的加密方法
遇到的问题
每次用 SSH 的方式登入服务器的时候,都会提示如下信息:
1 | Welcome to Ubuntu *.*.* LTS (GNU/Linux *.*.*-*-generic x86_64) |
字面提示是有 13 个包可以升级,其中 10 个是安全更新。
事实上 Ubuntu 更新还是挺容易的,因为有 apt-get,不过更新完之后,还是会提示一些安全更新没做完,所以找了一下解决方案。
解决办法
1 | apt-get update |
命令说明:
apt-get update从服务器更新可用的软件包列表。apt-get upgrade根据列表,更新已安装的软件包。这个命令不会删除在列表中已经没有的软件包,也不会安装有依赖需求但尚未安装的软件包。apt-get dist-upgrade根据列表,更新已安装的软件包。这个命令可能会为了解决软件包冲突而删除一些已安装的软件包,也可能会为了解决软件包依赖问题安装新的软件包。
所以使用上面三个命令完成更新之后,用 reboot 命令重启系统就行。需要注意的是,以上所有命令都需要在 root 权限下执行。
更新完成之后,去启动 SS,然后就报错了,从没见过的错误:
1 | load libsodium failed with path None |
不清楚是更新的系统造成的,还是其他原因,反正 SS 不能用了。搜索了一下,发现用这个 lib 的话,SS 可以支持新的高效率一点的加密方式 chacha20 等等这些。
于是乎,装一下 libsodium 吧~
1 | apt-get install build-essential |
安装完毕之后,修改 SS 配置文件,把加密换成 chacha20-ietf-poly1305,启动 SS,没有任何报错,一切正常。
客户端也把加密方式修改成相应的,完成~~
不用自己编译的安装方式(未验证)
1 | add-apt-repository ppa:chris-lea/libsodium |
PAC模式和全局代理模式的区别
PAC模式
PAC模式也就是智能分流模式,根据规则去匹配你访问的网站,国外网站走代理,国内网站不走代理,非常智能,增加访问速度。
- 优点:节省流量,国内网站依旧走本地网络,速度快,绝大部分国外网站都走代理,速度也快。
- 缺点:少部分国外网站会不经过代理,不能起到加速效果,甚至无法访问(解决方案:自己编辑PAC规则列表,将不走代理的国外网址加入进去,或者直接选择全局模式)。
全局模式
全局模式就是国内、国外所有网站都走代理。
- 优点:可访问全球所有网站。
- 缺点:所有网站都走代理,访问国内网站速度变慢,且耗流量。



