2015年8月2日星期日

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

本文主要列举了几种vps(OpenVZ、Xen、KVM)一键搭建shadowsocks服务端,优化TCP,优化内核中的拥塞算法以提升shadowsocks效率和速度的方法.
一键安装
一键安装脚本这里参照的是”秋水逸冰”的博文及脚本,出于低内存占用考虑,均为shadowsocks-libev.这里以操作系统的版本为分类进行阐述:

Debian或Ubuntu下:

安装方法:
1wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian.sh
2chmod +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
启动(安装完成后已设置开机自启动):
1nohup /usr/local/bin/ss-server -c /etc/shadowsocks/config.json > /dev/null 2>&1 &
停止:
1ps -ef | grep -v grep | grep -v ps | grep -i '/usr/local/bin/ss-server' | awk '{print $2}'
上面的命令获得一个数字(pid),然后再使用kill+空格+这个数字 即可.

CentOS下:

安装方法:
1wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev.sh
2chmod +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的技术类型对Xen、KVM和OpenVZ分开阐述:

Xen、KVM:

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

OpenVZ:

对于OpenVZ,如果直接使用以上方法修改,当sysctl -p会发现一堆的permission denied出错信息.
谷歌了下,据说是因为OpenVZ模版的限制比较多直接修改sysctl会被拒绝,(网上有部分文章有关于openvz去除sysctl.conf报错的文章,其实只是自我安慰的疗法)因此以上优化方案在OpenVZ下不可用.
优化拥塞算法Hybla :
这部分参照了V2EX上的tcp_hybla 编译内核模块的教程.
这一步本人在Linode上实验成功.(Linode是Xen的),系统为Ubuntu,其他系统没有尝试.当然据说Digital Ocean (DO是KVM模板)上的ubuntu官方内核自带了,可略去编译部分,直接调用hybla算法.(补充:经本人测试,Digital Ocan上,直接在/etc/sysctl.conf文件中加入hybla参数就可以直接调用了.如果你是Digital Ocan的话,恭喜你,直接跳到下面方法的第九步)
由于本人对此部分了解有限,完全是照着原文操作成功的,现转载此部分内容,以作备用:
1. 查看你的机器内核版本:
1uname -r
显示结果如: 3.11.6-x86_64-linode35
2. 去 https://www.kernel.org/pub/linux/kernel/v3.0/ 下载相同版本的源码到任意目录,解压
1mkdir /root/mykernel
2cd /root/mykernel
3wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.11.6.tar.gz
4tar xzvf linux-3.11.6.tar.gz
3. 安装内核编译工具
1apt-get update && apt-get install -y build-essential libncurses5-dev
4. 复制Linode原来的内核编译配置文件到源码根目录,在CONFIG_TCP_CONG_CUBIC=y下面增加一行 CONFIG_TCP_CONG_HYBLA=y,再生成编译模块需要的内核
1cd linux-3.11.6
2zcat /proc/config.gz > .config
3vi .config
查找CONFIG_TCP_CONG_CUBIC=y,在下面增加一行 CONFIG_TCP_CONG_HYBLA=y,保存
1make
5. 耐心等待编译内核完成,单核编译大约需15分钟,完成后,进入模块所在的目录,编写Makefile
1cd net/ipv4/
2mv Makefile Makefile.old
3vi Makefile
以下是Makefle的内容,注意要把KDIR修改为你自己的源码路径,其他则照抄就可以了
1Makefile for tcp_hybla.ko
2obj-m := tcp_hybla.o
3KDIR := /root/mykernel/linux-3.11.6
4PWD := $(shell pwd)
5default:
6$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
6.进入源码根目录,编译模块
1cd /root/mykernel/linux-3.11.6/
2make modules
7.进入到模块所在目录,复制生成的 tcp_hybla.ko 到加载目录,测试加载模块
1cd /root/mykernel/linux-3.11.6/net/ipv4
2cp tcp_hybla.ko /root/mykernel/
3cd /root/mykernel/
加载前
1sysctl net.ipv4.tcp_available_congestion_control
2net.ipv4.tcp_available_congestion_control = cubic reno
3insmod tcp_hybla.ko
加载后
1sysctl net.ipv4.tcp_available_congestion_control
2net.ipv4.tcp_available_congestion_control = cubic reno hybla
设置hybal为优先
1sysctl net.ipv4.tcp_congestion_control=hybla
8.设置开机自动加载模块,把tcp_hybla.ko 复制到 /lib/modules/3.11.6-x86_64-linode35/kernel/net/ipv4
1cd /lib/modules/3.11.6-x86_64-linode35
2mkdir -p kernel/net/ipv4
3cd kernel/net/ipv4
4cp /root/mykernel/tcp_hybla.ko ./
5cd /lib/modules/3.11.6-x86_64-linode35
6depmod -a
9.修改/etc/sysctl.conf 开机自动设置hybal为优先
1vim /etc/sysctl.conf
2net.ipv4.tcp_congestion_control = hybla
保存并退出该文件,然后使用以下指令使配置生效:
1sysctl -p

没有评论:

发表评论