代理服务器

主要包含:shadowsocks-libev、kuptun 的配置和优化。基于亚马逊云学生机。

Docker 部署以及 安装v2ray-plugin 插件,请跳到最后。

客户端

Shadowsocks X - A secure socks5 proxy
shadowsocks

shadowsocks/ShadowsocksX-NG: Next Generation of ShadowsocksX

终端走代理

命令开启和关闭终端走代理:

1
2
$ export ALL_PROXY=socks5://127.0.0.1:20808
$ export HTTP_PROXY=socks5://127.0.0.1:20808

检测代理结果(全局模式):

1
$ curl myip.ipip.net

服务器端

teddysun/shadowsocks_install at master

安装命令

1
2
3
wget --no-check-certificate -O shadowsocks-libev.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev.sh
chmod +x shadowsocks-libev.sh
./shadowsocks-libev.sh 2>&1 | tee shadowsocks-libev.log

Tip:脚本目前不支持 Centos8,为什么选择 libev 版本,因为其它版本停止维护了。

加密算法推荐使用 aes-256-gcm。安装好后就可以通过下面的命令使用了:

1
2
3
4
5
$ ./shadowsocks-libev.sh uninstall   # 卸载 SS
$ /etc/init.d/shadowsocks start # 启动 SS
$ /etc/init.d/shadowsocks stop # 停止 SS
$ /etc/init.d/shadowsocks restart # 重启 SS
$ /etc/init.d/shadowsocks status # 状态 SS

要开机自启还是得自己动手:

1
$ vim /usr/lib/systemd/system/shadowsocks_libev.service

加入如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=shadowsocks_libev
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=
ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/config.json
Restart=on-failure
RestartSec=10
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target

运行命令:

1
2
3
4
5
$ sudo systemctl daemon-reload
$ sudo systemctl enable shadowsocks_libev
$ sudo systemctl start shadowsocks_libev
$ sudo systemctl restart shadowsocks_libev
$ sudo systemctl status shadowsocks_libev -l

配置文件在这里:

1
$ vim /etc/shadowsocks-libev/config.json

大多数来说脚本默认的配置就很好了,如果有异常的话就显式的运行程序来查看日志:

1
$ sudo /usr/local/bin/ss-server

优化加速

服务器端加速

从 4.9 开始,Linux 内核已经用上了该算法。通过以下命令检测主机是否开启 BBR:

1
lsmod | grep bbr

如果有返回值请跳过,如果没有,可通过以下步骤安装。

1
2
$ sudo su
$ wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

输入 lsmod | grep bbr ,出现 tcp_bbr 即说明 BBR 已经启动。

双端加速

服务器端安装:
xtaci/kcptun
Kcptun 是一个非常简单和快速的,基于 KCP 协议的 UDP 隧道,它可以将 TCP 流转换为 KCP+UDP 流。它以比 TCP 浪费 10%-20% 的带宽的代价,和极少的资源占用,以达到降低多倍延迟的效果。

1
2
3
4
5
6
7
8
$ sudo yum install golang -y
$ git clone https://github.com/xtaci/kcptun.git
$ cd kcptun
$ ./build-release.sh
$ cd build
// 选择合适的版本
$ sudo mv server_linux_amd64 /usr/local/bin/kcptun_server
$
1
Wants=network.target

建议在 sysctl.conf 中添加以下配置,优化 UDP 包的搬运速度:

1
$ sudo vim /etc/sysctl.conf

写入以下:

1
2
3
4
5
6
# KCP: for better handling of UDP packets
net.core.rmem_max=26214400 // BDP - bandwidth delay product
net.core.rmem_default=26214400
net.core.wmem_max=26214400
net.core.wmem_default=26214400
net.core.netdev_max_backlog=2048 // proportional to -rcvwnd

运行以下命令生成配置:

1
$ sudo sysctl --system

更多性能优化配置
在用户目录 ~ 创建 kcptun.json 配置文件如下:

1
2
3
4
5
6
7
8
9
10
{
"listen": ":4000",
"target": "127.0.0.1:14376",
"mode": "fast3",
"dscp": 46,
"crypt": "salsa20",
"key": "1q2w3e4r.",
"sockbuf":16777217,
"nocomp":true
}
1
$ vim /usr/lib/systemd/system/kcptun_server.service

添加配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=kcptun
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
Environment=GOGC=20
ExecStart=
ExecStart=/usr/local/bin/kcptun_server -c /home/ec2-user/kcptun.json
Restart=on-failure
RestartSec=10
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
# 设置开机自启
$ sudo systemctl enable kcptun_server
# 启动服务
$ sudo systemctl restart kcptun_server
# 查看服务运行状态,测试是否配置成功
sudo systemctl status kcptun_server -l

修改配置文件后,需要重新加载配置文件,然后重新启动相关服务

1
2
$ sudo systemctl daemon-reload
$ sudo systemctl restart kcptun_server

客户端 Kcptun 配置如图:
1591188770.png
Arguments:

1
-autoexpire 900 -sockbuf 16777217

性能优化

通过上面的配置,目前而言使用效果不差。但是会不间断的出现“断流”,ssh 可以正常连接服务器,这是必然的。同样的情况出现在,相关业务商家都会提供不同地区的 N 多节点,但是同一时间可以正常使用的也就一两个。

我觉得最简单靠谱的就是,使用常用的端口如 443 或 80。

要开启 ipv6 的话,首先要保证服务器有 ipv6 的公网 ip,然后改一下 kcptun 和 ss 的配置:

1
2
3
4
5
6
# config.json
"server":"::",

# kcptun.json
"listen": "[::]:4000",
"target": "[::]:443"

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ lsmod | grep bbr                   # 状态 BBR
$ sudo systemctl daemon-reload # 重新加载 systemctl 配置文件

$ ./shadowsocks-libev.sh uninstall # 卸载 SS
$ /etc/init.d/shadowsocks start # 启动 SS
$ /etc/init.d/shadowsocks stop # 停止 SS
$ /etc/init.d/shadowsocks restart # 重启 SS
$ /etc/init.d/shadowsocks status # 状态 SS

$ sudo systemctl restart shadowsocks_libev
$ sudo systemctl status shadowsocks_libev -l

$ sudo systemctl restart kcptun_server # 启动 kcptun
$ sudo systemctl status kcptun_server -l # 查看 systemctl 服务运行状态

更多

编辑 limits.conf 配置文件

1
vim /etc/security/limits.conf

添加下列两行:

1
2
* soft nofile 51200
* hard nofile 51200

如果服务在root权限下运行,添加下列两行:

1
2
root soft nofile 51200
root hard nofile 51200

在 bash 或 zsh 配置文件(例如:.zshrc)加入:

1
ulimit -n 51200

sysctl.conf

配置路径:

1
$ sudo vim /etc/sysctl.conf

添加配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
fs.file-max = 51200

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# KCP: for better handling of UDP packets
net.core.rmem_max=26214400 // BDP - bandwidth delay product
net.core.rmem_default=26214400
net.core.wmem_max=26214400
net.core.wmem_default=26214400
net.core.netdev_max_backlog=2048 // proportional to -rcvwnd
net.core.somaxconn = 65535

net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 6
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30

加载配置:

1
$ sudo sysctl --system

使用 iperf 测试服务器的直接网速:

1
2
3
4
5
# 服务端
$ iperf -s

# 客户端
$ iperf -c $yourhost -i 2 -t 30

测速来平均服务器的网速有:
17.1 Mbits/sec

使用 fast.com 测试平均结果显示:
10 Mbits/sec

以下配置方案可能会更好:
使用 Docker 快速部署 Shadowsocks-libev + v2ray-plugin

技术无罪,谨守初心。

参考文献