<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="各平台VPS快速搭建SHADOWSOCKS及优化总结">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2015-01-01 21:05<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
各平台VPS快速搭建SHADOWSOCKS及优化总结

本文主要列举了几种vps(OpenVZ、Xen、KVM)一键搭建shadowsocks服务端,优化TCP,优化内核中的拥塞算法以提升shadowsocks效率和速度的方法.

一键安装

一键安装脚本这里参照的是&rdquo;秋水逸冰&rdquo;的博文及脚本,出于低内存占用考虑,均为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&gt;&amp;1 | tee shadowsocks-libev-debian.log

        
    







脚本备份(点击展开):



show source





卸载方法:





    
        
            1

            ./shadowsocks-libev.sh uninstall

        
    







配置文件路径:
/etc/shadowsocks/config.json

启动(安装完成后已设置开机自启动):





    
        
            1

            nohup /usr/local/bin/ss-server -c /etc/shadowsocks/config.json &gt; /dev/null 2&gt;&amp;1 &amp;

        
    







停止:





    
        
            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&gt;&amp;1 | tee shadowsocks-libev.log

        
    







脚本备份(点击展开):



show source





卸载方法:





    
        
            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 &amp;&amp; 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 &gt; .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 为例
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
