记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

各平台VPS快速搭建SHADOWSOCKS及优化总结

各平台VPS快速搭建SHADOWSOCKS及优化总结

本文主要列举了几种vps(OpenVZ、Xen、KVM)一键搭建shadowsocks服务端,优化TCP,优化内核中的拥塞算法以提升shadowsocks效率和速度的方法.

一键安装

一键安装脚本这里参照的是”秋水逸冰”的博文及脚本,出于低内存占用考虑,均为shadowsocks-libev.这里以操作系统的版本为分类进行阐述:

Debian或Ubuntu下:

安装方法:

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

脚本备份(点击展开):

卸载方法:

1 ./shadowsocks-libev.sh uninstall

配置文件路径:
/etc/shadowsocks/config.json

启动(安装完成后已设置开机自启动):

1 nohup /usr/local/bin/ss-server -c /etc/shadowsocks/config.json > /dev/null 2>&1 &

停止:

1 ps -ef | grep -v grep | grep -v ps | grep -i '/usr/local/bin/ss-server' | awk '{print $2}'

上面的命令获得一个数字(pid),然后再使用kill+空格+这个数字 即可.

CentOS下:

安装方法:

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

脚本备份(点击展开):

卸载方法:

1 ./shadowsocks-libev.sh uninstall

配置文件路径:

1 /etc/shadowsocks-libev/config.json

常用指令:

1 #启动:
2 /etc/init.d/shadowsocks start
3 #停止:
4 /etc/init.d/shadowsocks stop
5 #重启:
6 /etc/init.d/shadowsocks restart
7 #查看状态:
8 /etc/init.d/shadowsocks status
TCP性能优化:

这里参照北落师门的方案,由于实际在vps上操作时发现,OpenVZ对内核限制比较多,所以需要多一个步骤,故这里将按VPS的技术类型对Xen、KVM和OpenVZ分开阐述:

Xen、KVM:

修改/etc/sysctl.conf文件,增加以下项目:

1 fs.file-max = 51200
2 #提高整个系统的文件限制
3 net.ipv4.tcp_syncookies = 1
4 #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
5 net.ipv4.tcp_tw_reuse = 1
6 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
7 net.ipv4.tcp_tw_recycle = 0
8 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
9 #为了对NAT设备更友好,建议设置为0。
10 net.ipv4.tcp_fin_timeout = 30
11 #修改系統默认的 TIMEOUT 时间。
12 net.ipv4.tcp_keepalive_time = 1200
13 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
14 net.ipv4.ip_local_port_range = 10000 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!)
15 net.ipv4.tcp_max_syn_backlog = 8192
16 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
17 net.ipv4.tcp_max_tw_buckets = 5000
18 #表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。
19 #额外的,对于内核版本新于**3.7.1**的,我们可以开启tcp_fastopen:
20 net.ipv4.tcp_fastopen = 3
21  
22 # increase TCP max buffer size settable using setsockopt()
23 net.core.rmem_max = 67108864
24 net.core.wmem_max = 67108864
25 # increase Linux autotuning TCP buffer limit
26 net.ipv4.tcp_rmem = 4096 87380 67108864
27 net.ipv4.tcp_wmem = 4096 65536 67108864
28 # increase the length of the processor input queue
29 net.core.netdev_max_backlog = 250000
30 # recommended for hosts with jumbo frames enabled
31 net.ipv4.tcp_mtu_probing=1

保存并退出该文件,然后使用以下指令使配置生效:

1 sysctl -p

如果显示出了生效信息且没有显示出错信息,则优化完成.

OpenVZ:

对于OpenVZ,如果直接使用以上方法修改,当sysctl -p会发现一堆的permission denied出错信息.
谷歌了下,有说是因为OpenVZ模版的限制比较多直接修改sysctl会被拒绝的,也有说是因为openvz模版的问题要进行修复操作的.虽然网上搜索的结果表示OpenVZ这块的限制是由母机实现的,但是本人也搜索到了一个解决方法,在bandwagon上实验通过,至于其他vps能不能成功解除限制,还有待实验.
解决方法如下:
修复modprobe:

1 rm -f /sbin/modprobe
2 ln -s /bin/true /sbin/modprobe

修复sysctl:

1 rm -f /sbin/sysctl
2 ln -s /bin/true /sbin/sysctl

执行完以上两步,再重复上面Xen、KVM的方法进行优化,就不会报错了.

优化拥塞算法Hybla :

这部分参照了V2EX上的tcp_hybla 编译内核模块的教程.
这一步本人在Linode上实验成功.(Linode是Xen的),系统为Ubuntu,其他系统没有尝试.当然据说Digital Ocean (DO是KVM模板)上的ubuntu官方内核自带了,可略去编译部分,直接调用hybla算法.(补充:经本人测试,Digital Ocan上,直接在/etc/sysctl.conf文件中加入hybla参数就可以直接调用了.如果你是Digital Ocan的话,恭喜你,直接跳到下面方法的第九步)

由于本人对此部分了解有限,完全是照着原文操作成功的,现转载此部分内容,以作备用:

1. 查看你的机器内核版本:

1 uname -r

显示结果如: 3.11.6-x86_64-linode35

2. 去 https://www.kernel.org/pub/linux/kernel/v3.0/ 下载相同版本的源码到任意目录,解压

1 mkdir /root/mykernel
2 cd /root/mykernel
3 wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.11.6.tar.gz
4 tar xzvf linux-3.11.6.tar.gz

3. 安装内核编译工具

1 apt-get update && apt-get install -y build-essential libncurses5-dev

4. 复制Linode原来的内核编译配置文件到源码根目录,在CONFIG_TCP_CONG_CUBIC=y下面增加一行 CONFIG_TCP_CONG_HYBLA=y,再生成编译模块需要的内核

1 cd linux-3.11.6
2 zcat /proc/config.gz > .config
3 vi .config

查找CONFIG_TCP_CONG_CUBIC=y,在下面增加一行 CONFIG_TCP_CONG_HYBLA=y,保存

1 make

5. 耐心等待编译内核完成,单核编译大约需15分钟,完成后,进入模块所在的目录,编写Makefile

1 cd net/ipv4/
2 mv Makefile Makefile.old
3 vi Makefile

以下是Makefle的内容,注意要把KDIR修改为你自己的源码路径,其他则照抄就可以了

1 Makefile for tcp_hybla.ko
2 obj-m := tcp_hybla.o
3 KDIR := /root/mykernel/linux-3.11.6
4 PWD := $(shell pwd)
5 default:
6 $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

6.进入源码根目录,编译模块

1 cd /root/mykernel/linux-3.11.6/
2 make modules

7.进入到模块所在目录,复制生成的 tcp_hybla.ko 到加载目录,测试加载模块

1 cd /root/mykernel/linux-3.11.6/net/ipv4
2 cp tcp_hybla.ko /root/mykernel/
3 cd /root/mykernel/

加载前

1 sysctl net.ipv4.tcp_available_congestion_control
2 net.ipv4.tcp_available_congestion_control = cubic reno
3 insmod tcp_hybla.ko

加载后

1 sysctl net.ipv4.tcp_available_congestion_control
2 net.ipv4.tcp_available_congestion_control = cubic reno hybla

设置hybal为优先

1 sysctl net.ipv4.tcp_congestion_control=hybla

8.设置开机自动加载模块,把tcp_hybla.ko 复制到 /lib/modules/3.11.6-x86_64-linode35/kernel/net/ipv4

1 cd /lib/modules/3.11.6-x86_64-linode35
2 mkdir -p kernel/net/ipv4
3 cd kernel/net/ipv4
4 cp /root/mykernel/tcp_hybla.ko ./
5 cd /lib/modules/3.11.6-x86_64-linode35
6 depmod -a

9.修改/etc/sysctl.conf 开机自动设置hybal为优先

1 vim /etc/sysctl.conf
2 net.ipv4.tcp_congestion_control = hybla

保存并退出该文件,然后使用以下指令使配置生效:

1 sysctl -p

参考链接:
Debian下shadowsocks-libev一键安装脚本

CentOS下shadowsocks-libev一键安装脚本

OpenVZ VPS搭建shadowsocks及优化

高流量大并发Linux TCP 性能调优

Centos6修改sysctl.conf报错解决方法

编译 Linode 内核模块小白教程,以 tcp_hybla 为例

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):