主要包含: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
检测代理结果(全局模式):
服务器端 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 $ /etc/init.d/shadowsocks start $ /etc/init.d/shadowsocks stop $ /etc/init.d/shadowsocks restart $ /etc/init.d/shadowsocks status
要开机自启还是得自己动手:
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 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 $
建议在 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
运行以下命令生成配置:
更多性能优化配置 在用户目录 ~
创建 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 配置如图: 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)加入:
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
加载配置:
使用 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
技术无罪,谨守初心。
参考文献