前言
本文旨在提供简明的 Ubuntu 下安装 Shadowsocks 服务端的教程,并包括常用的优化:包括 BBR、TCP Fast Open以及吞吐量优化。
文中使用了 Ubuntu 16.04 及之后的版本支持的 Systemd 管理 Shadowsocks 的启动与停止,显得更为便捷,但因此也仅适用于 Ubuntu 16.04 及之后的版本,基于 Python 3 ,支持 IPv6 。
文章测试的系统环境为最新的 Ubuntu 18.10 。
安装 Shadowsocks 服务端
安装 pip
本教程使用 Python 3 为载体,因 Python 3 对应的包管理器 pip3 并未预装,首先安装 pip3:
sudo apt install python3-pip
如果提示 Unable to locate package ,很可能是系统刚配置完毕,软件源还来不及更新,所以无法找到包,一般会在新镜像配置完毕后短时间内出现,这个时候只需要输入:
sudo apt-get update
再执行安装 pip3 的指令就可以了
安装 Shadowsocks
因 Shadowsocks 作者不再维护 pip 中的 Shadowsocks (定格在了2.8.2),我们使用下面的命令来安装最新版的 Shadowsocks :
pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip
安装完成后可以使用下面这个命令查看 Shadowsocks 版本:
sudo ssserver --version
目前版本会显示 “Shadowsocks 3.0.0” 。
创建配置文件
创建 Shadowsocks 配置文件所在文件夹:
sudo mkdir /etc/shadowsocks
然后创建配置文件,这一步可以用常用的编辑器 nano 完成,也可以用 WinSCP 连接服务器手动创建 (个人更喜欢后者一点,因为修改起来比较方便),以下为 nano 创建文件的命令 :
sudo nano /etc/shadowsocks/config.json
如果是单用户 (单端口) 使用,复制粘贴如下内容 (注意修改密码) :
{
"server":"::",
"server_port":8388,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"用户的密码",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false
}
如果是多用户 (单端口) 使用,复制粘贴如下内容 (注意修改密码,并且注意端口冲突) :
{
"server":"::",
"local_address": "127.0.0.1",
"local_port":1080,
"port_password":
{
"8388":"端口A的密码",
"9000":"端口B的密码",
"9001":"端口C的密码"
},
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false
}
如果使用了 nano 编辑,按 Ctrl + O 保存文件,下方会提示确认文件位置,按 回车 写入文件,按 Ctrl + X 退出。
配置 Systemd 管理 Shadowsocks
新建 Shadowsocks 管理文件 (这一步没有什么需要修改的,可以直接用 nano 完成) :
sudo nano /etc/systemd/system/shadowsocks-server.service
复制粘贴如下内容:
[Unit]
Description=Shadowsocks Server
After=network.target
[Service]
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/config.json
Restart=on-abort
[Install]
WantedBy=multi-user.target
Ctrl + O 保存文件。 回车 写入, Ctrl + X 退出。
启动 Shadowsocks :
sudo systemctl start shadowsocks-server
设置开机启动 Shadowsocks :
sudo systemctl enable shadowsocks-server
到这里, Shadowsock 服务器端的基本配置就已经全部完成了!
客户端测试连接
在你的 Shadowsocks 客户端添加服务器,地址填写 你的 VPS 的地址,端口号默认为 8388 ,加密方法默认为 aes-256-cfb ,密码为 你设置的密码。然后设置客户端使用全局模式,浏览器登录 Google 应该就能打开了。
优化
服务端优化尤其 BBR ,对 IPv4 的连接可以说有奇效,通常能使速度大幅提升。这部分属于进阶操作,但是也非常简单。
BBR
BBR 是 Google 最新开发的 TCP 拥塞控制算法,目前有着很好的带宽提升效果。
版本检测
BBR 在 Linux kernel 4.9 引入,所以首先要检查服务器的 kernel 版本:
uname -r
如果其显示版本在 4.9.0 以下,则需要升级 Linux 内核 (建议直接更新系统) 。如果和本文一样使用最新的 Ubuntu 18.10 的话,会显示 4.18.0-10-generic。
开启 BBR
检查是否有 BBR :
lsmod | grep bbr
如果结果中没有 tcp_bbr (大部分服务器都没有设置,目前使用过的只有 Vultr 的 VPS 会显示),则先执行:
modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
确认出现 tcp_bbr 之后执行:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
保存指令并使其生效:
sysctl -p
查看是否生效:
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
若均有 bbr ,则开启 BBR 成功。
优化吞吐量
新建配置文件:
sudo nano /etc/sysctl.d/local.conf
复制粘贴如下内容:
# max open files
fs.file-max = 51200
# max read buffer
net.core.rmem_max = 67108864
# max write buffer
net.core.wmem_max = 67108864
# default read buffer
net.core.rmem_default = 65536
# default write buffer
net.core.wmem_default = 65536
# max processor input queue
net.core.netdev_max_backlog = 4096
# max backlog
net.core.somaxconn = 4096
# resist SYN flood attacks
net.ipv4.tcp_syncookies = 1
# reuse timewait sockets when safe
net.ipv4.tcp_tw_reuse = 1
# turn off fast timewait sockets recycling
net.ipv4.tcp_tw_recycle = 0
# short FIN timeout
net.ipv4.tcp_fin_timeout = 30
# short keepalive time
net.ipv4.tcp_keepalive_time = 1200
# outbound port range
net.ipv4.ip_local_port_range = 10000 65000
# max SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
# max timewait sockets held by system simultaneously
net.ipv4.tcp_max_tw_buckets = 5000
# turn on TCP Fast Open on both client and server side
net.ipv4.tcp_fastopen = 3
# TCP receive buffer
net.ipv4.tcp_rmem = 4096 87380 67108864
# TCP write buffer
net.ipv4.tcp_wmem = 4096 65536 67108864
# turn on path MTU discovery
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = bbr
保存指令并使其生效:
sysctl --system
编辑之前的 shadowsocks-server.service 文件:
sudo nano /etc/systemd/system/shadowsocks-server.service
在 ExecStart 前插入一行,内容为:
ExecStartPre=/bin/sh -c 'ulimit -n 51200'
即修改后的 shadowsocks-server.service 内容如图所示:
Ctrl + O 保存文件。 回车 写入, Ctrl + X 退出。
重载 shadowsocks-server.service :
sudo systemctl daemon-reload
重启 Shadowsocks :
sudo systemctl restart shadowsocks-server
吞吐量优化就完成了。
开启 TCP Fast Open
TCP Fast Open 可以降低 Shadowsocks 服务器和客户端的延迟。实际上在上一步已经开启了 TCP Fast Open ,现在只需要在 Shadowsock s配置中启用 TCP Fast Open 。
用 nano 或 WinSCP 编辑 config.json :
sudo nano /etc/shadowsocks/config.json
将 fast_open 的值由 false 修改为 true 。 Ctrl + O 保存文件。 回车 写入, Ctrl + X 退出。
重启 Shadowsocks :
sudo systemctl restart shadowsocks-server
到这里, Shadowsocks 服务器端的优化就全部完成了!
机场除雾指南(。
如果某一天 Shadoowsocks 突然不能用了,那八成就是被GFW拦截了 。被拦截的原因就是电信运营商探测出了你的流量然后屏蔽了,诱因可能有以下几点:
- 使用的人很多(多地点连接)
- 特殊时期(8 * 8)
- 美国的 IP 容易被和谐
- 美国便宜服务商的 IP 尤其容易被和谐
判断是否被屏蔽
判断和谐很简单,直接 Telnet 一下端口就可以了。利用 ping.pe 这个网站可以很轻松的测试你的端口是否被屏蔽。点 http://port.ping.pe/ 这个链接即可。
测试结果如下图,应该还是正常的。如果红圈内即国内节点全部不通的话,你知道我想说什么233
真的挂了怎么办
首先判断你到底是被封端口还是被封 IP 了,封端口的话直接换端口即可,封 IP 的话也是换 IP 就可以了。
现在大部分国外 VPS 提供商都可以换IP,只需要 1-2 美元,不用多想直接换。但是在特殊时期或者遇到一些被玩坏的提供商,你可能换好几个 IP 还是被墙的,这个时候你只能要么继续碰运气,要么索性换提供商。
预算在 5$ / month 以上的话可以尝试一下 CN2 GIA 线路,高质量线路不但能带来更好的体验,还能降低被封的概率;或者换地区,比如香港的 VPS,延迟低而且不容易被封。要注意一点,高质量的线路换 IP 也会贵很多,一般换一次在 5 美元左右。
原文参考
- 怎么能更新到2.9.0呢? · Issue #622 · shadowsocks/shadowsocks
- Configuration via Config File · shadowsocks/shadowsocks Wiki
- apt - List all versions of a package - Ask Ubuntu
- How do I use apt-get to update to the latest kernel? - Ask Ubuntu
- RemoveOldKernels - Community Help Wiki
- 开启TCP BBR拥塞控制算法 · iMeiji/shadowsocks_install Wiki
- Optimizing Shadowsocks · shadowsocks/shadowsocks Wiki
- TCP Fast Open · shadowsocks/shadowsocks Wiki
Comments NOTHING