最新的使用锐速的优化合集及锐速与net-speeder的对比已经更新,请移步这篇文章查看:更换Linux内核优化锐速,为shadowsocks和IkeV2加速

最近Digital Ocean的速度越来越不稳定,Bandwagon的延迟越来越高,真心各种捉急.今天无意中在V2EX上看到有关单线程下载速度提速的一个项目: net-speeder ,便测试了下,优化后网速翻倍,可谓效果显著.

net-speeder可以在高延迟不稳定链路上优化单线程下载速度,项目地址:Google Code

其中,作者在其博客说明了该方法的优劣:

这种方式下,直接优点是降低丢包率,直接缺点是耗费双倍流量。一些延伸影响是更容易触发快速恢复逻辑,避免了丢包时窗口缩减过快。一定程度也能提高网络速度。
在一台VPS上测试后发现,未开启时单线程下载、ssh管道速度在十几K级别。开启后可以达到平均300KB+的速度。效果非常明显。但对于不加速就可以跑满带宽的类型来讲(多线程下载),开启后反而由于多出来的无效流量,导致速度减半。所以对于多线程/高速链路,这个方案是不适合的。

考虑到DO目前是不限流量的,速度又越来越慢,就以此来测试了下,本人环境为Ubuntu 14.04,作者项目中另有其他系统的方法(本人未测试).

1,安装依赖库:

这里按操作系统划分:
Ubuntu/Debian:

1
2
apt-get update
apt-get install libnet1 libpcap0.8 libnet1-dev libpcap0.8-dev

Centos(未测试):
下载epel:https://fedoraproject.org/wiki/EPEL/zh-cn
例:CentOS6 64位:

1
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

如果是centos5,则在epel/5/下

然后安装epel:rpm -ivh epel-release-X-Y.noarch.rpm

然后即可使用yum安装:

1
yum install libnet libpcap libnet-devel libpcap-devel

2,下载net-speeder并解压:

1
2
3
wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz
tar xzf net_speeder-v0.1.tar.gz
cd net_speeder*

如果你访问不了该下载地址,也可到这里下载备份:

3,编译:

这里按主机平台划分:
Xen,KVM,物理机:

1
sh build.sh

Digital Ocean是KVM虚拟机,用上面这个就可以.

venetX,OpenVZ

1
sh build.sh -DCOOKED

搬瓦工是OpenVZ的,用上面这个.

4,运行:

编译完成后,一切顺利就能在当前目录下看到编译的net_speeder文件了.
按照项目说明:

使用方法(需要root权限启动):
参数:./net_speeder 网卡名 加速规则(bpf规则)
最简单用法: # ./net_speeder venet0 “ip” 加速所有ip协议数据

这里,Digital Ocean的网卡名是eth0,于是执行

1
./net_speeder eth0 "ip"

就可以运行了,具体可以使用ifconfig指令查看你的服务器网卡接口.

运行如下图:
net-speeder

当然,也可以使用nohup ./net_speeder eth0 “ip” >/dev/null 2>&1 &来后台运行.

5,复制到/usr/local/目录并设置开机自启动:

1
2
3
mkdir /usr/local/net_speeder/
cp net_speeder /usr/local/net_speeder/net_speeder
echo 'nohup /usr/local/net_speeder/net_speeder eth0 "ip" >/dev/null 2>&1 &' >> /etc/rc.local

经本人测试,该方案对Ikev2的vpn提速效果十分明显,但对Shadowsocks貌似并不显著(网上也有人Shadowsocks有效果的,此问题待进一步研究).

另附两张使用net-speeder前后,Ikev2 vpn连接后下载速度的对比图:

before-net-speeder加速前

after-net-speeder加速后

PS:一键安装脚本

该脚本貌似只在redhat下可用(点击展开):

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh

# Set Linux PATH Environment Variables
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# Check If You Are Root
if [ $(id -u) != "0" ]; then
clear
echo -e "\033[31m Error: You must be root to run this script! \033[0m"
exit 1
fi

if [ $(arch) == x86_64 ]; then
OSB=x86_64
elif [ $(arch) == i686 ]; then
OSB=i386
else
echo "\033[31m Error: Unable to Determine OS Bit. \033[0m"
exit 1
fi
if egrep -q "5.*" /etc/issue; then
OST=5
wget http://dl.fedoraproject.org/pub/epel/5/${OSB}/epel-release-5-4.noarch.rpm
elif egrep -q "6.*" /etc/issue; then
OST=6
wget http://dl.fedoraproject.org/pub/epel/6/${OSB}/epel-release-6-8.noarch.rpm
else
echo "\033[31m Error: Unable to Determine OS Version. \033[0m"
exit 1
fi

rpm -Uvh epel-release*rpm
yum install -y libnet libnet-devel libpcap libpcap-devel gcc

wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz -O -|tar xz
cd net_speeder
if [ -f /proc/user_beancounters ] || [ -d /proc/bc ]; then
sh build.sh -DCOOKED
INTERFACE=venet0
else
sh build.sh
INTERFACE=eth0
fi

NS_PATH=/usr/local/net_speeder
mkdir -p $NS_PATH
cp -Rf net_speeder $NS_PATH

echo -e "\033[36m net_speeder installed. \033[0m"
echo -e "\033[36m Usage: nohup ${NS_PATH}/net_speeder $INTERFACE \"ip\" >/dev/null 2>&1 & \033[0m"

参考链接:

使用net_speeder加速你的VPS

网络加速/优化器net-speeder

作者博客项目介绍页面

作者项目托管地址