在Debian 7:
创建/etc/sysctl.d/local.conf包含以下内容:
fs.file-MAX = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
#高延迟网络
net.ipv4.tcp_congestion_control = hybla
#低延迟的网络,使用立方,而不是
#net.ipv4.tcp_congestion_control =立方米
那么:
sysctl的--system
老的系统:
sysctl的-p /etc/sysctl.d/local.conf
警告:不要启用net.ipv4.tcp_tw_recycle!
如果使用supervisor,请确保您有以下行的/ etc /默认/主管。一旦你加入该行,重新启动主管(服务站主管&&服务启动监事)。
ulimit -n 51200
如果您在其他方面的背景shadowsocks,确保添加的ulimit -n 51200在你的初始化脚本。
优化后,繁忙的Shadowsocks服务器处理的连接成千上万,需要大约30MB的内存和10%的CPU。注意,在同一时间,Linux内核通常使用> 100MB的RAM来保存缓冲液和缓存这些连接。通过以上的sysctl配置,你权衡RAM的速度。如果你想使用较少的内存,降低rmem和wmem的大小。
from https://github.com/shadowsocks/shadowsocks/wiki/Optimizing-Shadowsocks
-------------------------
加速/优化SHADOWSOCKS
下面介绍几种简单的优化方法,也是比较推荐的几种,能够得到立竿见影的效果。
1. 内核参数优化
首先,将 Linux 内核升级到 3.5 或以上。
第一步,增加系统文件描述符的最大限数
编辑文件 limits.conf
vi /etc/security/limits.conf
增加以下两行
* soft nofile 51200
* hard nofile 51200
启动shadowsocks服务器之前,设置以下参数:
ulimit -n 51200
第二步,调整内核参数
修改配置文件 /etc/sysctl.conf:
fs.file-max = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
修改后执行 sysctl -p 使配置生效.
2. 锐速
锐速是一款非常不错的TCP底层加速软件,可以非常方便快速地完成服务器网络的优化,配合 ShadowSocks 效果奇佳。目前锐速官方也出了永久免费版本,适用带宽20M、3000加速连接,个人使用是足够了。如果需要,先要在锐速官网注册个账户。
然后确定自己的内核是否在锐速的支持列表里,如果不在,请先更换内核,如果不确定,请使用 手动安装-http://my.serverspeeder.com/w.do?m=lslm
确定自己的内核版本在支持列表里,就可以使用以下命令快速安装了。
wget http://my.serverspeeder.com/d/ls/serverSpeederInstaller.tar.gz
tar xzvf serverSpeederInstaller.tar.gz
bash serverSpeederInstaller.sh
输入在官网注册的账号密码进行安装,参数设置直接回车默认即可,
最后两项输入 y 开机自动启动锐速,y 立刻启动锐速。之后可以通过lsmod查看是否有appex模块在运行。
到这里还没结束,我们还要修改锐速的3个参数,vi /serverspeeder/etc/config
rsc="1" #RSC网卡驱动模式
advinacc="1" #流量方向加速
maxmode="1" #最大传输模式
digitalocean vps的网卡支持rsc和gso高级算法,所以可以开启rsc="1",gso="1"。
重新启动锐速":
service serverSpeeder restart
3. net-speeder
net-speeder 原理非常简单粗暴,就是发包翻倍,这会占用大量的国际出口带宽,本质是损人利己,不建议使用。
(1) Ubuntu/Debian 下安装依赖包:
apt-get install libpcap0.8
apt-get install libnet1
apt-get install libnet1-dev
apt-get install libpcap0.8-dev
(2) Centos 下安装依赖包
需要配置 epel 第三方源。下载 epel :http://dl.fedoraproject.org/pub/epel/ 。例如,Centos 7 x64:
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -ivh epel-release-7-5.noarch.rpm
yum repolist
然后安装依赖包:
yum install libnet libpcap libnet-devel libpcap-devel
(3) 下载官方的 tar.gz 压缩包。解压安装运行:
wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz
tar zxvf net_speeder-v0.1.tar.gz
cd net_speeder
chmod 777 *
sh build.sh -DCOOKED
首先你需要知道你的网卡设备名,可以使用 ifconfig 查看。假设是eth0,那么运行方法是:
./net_speeder eth0 "ip"
关闭 net-speeder:
killall net_speeder
哦,对了,作者已经将 net-speeder 迁移到 GitHub了-https://github.com/snooda/net-speeder,感兴趣的可以关注。
以上3种方法是我用过的比较有效的加速方法。
----------------------
搬瓦工可以一键安装Shadowsocks服务器端,这里不多说安装步骤了,网上很多地方也都有。
-------------------------
TCP EVIL
apt-get source
your kernel on Debian 7 to get the kernel source for the same kernel version.- in slow start phase, increase speed more quickly
- in congestion avoidance phase, increase speed more quickly
- when entering loss state, set ssthresh to 0.9 cwnd instead of 0.5 cwnd
-----------------------------
shadowsocks optimize
1. 系统层面
这方面SS给出了非常详尽的优化指南,主要有:优化内核参数,开启TCP Fast Open
####1.1优化内核参数 编辑
vi /etc/sysctl.conf
复制进去
# max open files
fs.file-max = 1024000
# max read buffer
net.core.rmem_max = 67108864
# max write buffer
net.core.wmem_max = 67108864
# default read buffer
net.core.rmem_default = 65536
# default write buffer
net.core.wmem_default = 65536
# max processor input queue
net.core.netdev_max_backlog = 4096
# max backlog
net.core.somaxconn = 4096
# resist SYN flood attacks
net.ipv4.tcp_syncookies = 1
# reuse timewait sockets when safe
net.ipv4.tcp_tw_reuse = 1
# turn off fast timewait sockets recycling
net.ipv4.tcp_tw_recycle = 0
# short FIN timeout
net.ipv4.tcp_fin_timeout = 30
# short keepalive time
net.ipv4.tcp_keepalive_time = 1200
# outbound port range
net.ipv4.ip_local_port_range = 10000 65000
# max SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
# max timewait sockets held by system simultaneously
net.ipv4.tcp_max_tw_buckets = 5000
# TCP receive buffer
net.ipv4.tcp_rmem = 4096 87380 67108864
# TCP write buffer
net.ipv4.tcp_wmem = 4096 65536 67108864
# turn on path MTU discovery
net.ipv4.tcp_mtu_probing = 1
# for high-latency network
net.ipv4.tcp_congestion_control = hybla
# forward ipv4
net.ipv4.ip_forward = 1
sysctl -p
其中最后的hybla是为高延迟网络(如美国,欧洲)准备的算法,需要内核支持,测试内核是否支持,在终端输入:
sysctl net.ipv4.tcp_available_congestion_control
如果结果中有hybla,则证明你的内核已开启hybla,如果没有hybla,可以用命令
modprobe tcp_hybla
开启。htcp
,可以非常显著的提高速度,首先使用modprobe tcp_htcp
开启,再将net.ipv4.tcp_congestion_control = hybla
改为net.ipv4.tcp_congestion_control = htcp
,建议EC2日本用户使用这个算法。1.2 TCP优化
如果是ubuntu/centos均可修改
/etc/sysctl.conf
找到
fs.file-max
这一行,修改其值为1024000
,并保存退出。然后执行sysctl -p
使其生效修改
vi /etc/security/limits.conf
文件,加入* soft nofile 512000
* hard nofile 1024000
vi /etc/pam.d/common-session
文件,加入session required pam_limits.so
vi /etc/profile
文件,加入ulimit -SHn 1024000
然后重启服务器执行
ulimit -n
,查询返回1024000即可。sysctl.conf报错解决方法
修复modprobe的:
rm -f /sbin/modprobe
ln -s /bin/true /sbin/modprobe
修复sysctl的:
rm -f /sbin/sysctl
ln -s /bin/true /sbin/sysctl
1.3 锐速
wget -N --no-check-certificate https://github.com/91yun/serverspeeder/raw/master/serverspeeder.sh && bash serverspeeder.sh
chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f
Enter your accelerated interface(s) [eth0]: eth0
Enter your outbound bandwidth [1000000 kbps]: 1000000
Enter your inbound bandwidth [1000000 kbps]: 1000000
Configure shortRtt-bypass [0 ms]: 0
Auto load ServerSpeeder on linux start-up? [n]:y #是否开机自启
Run ServerSpeeder now? [y]:y #是否现在启动
lsmod
,看到有appex0
模块即说明锐速已正常安装并启动。修改
vi /serverspeeder/etc/config
文件的几个参数以使锐速更好的工作accppp="1" #加速PPTP、L2TP V-P-N;设为1表示开启,设为0表示关闭
advinacc="1" #高级入向加速开关;设为 1 表示开启,设为 0 表示关闭;开启此功能可以得到更好的流入方向流量加速效果;
maxmode="1" #最大传输模式;设为 1 表示开启;设为 0 表示关闭;开启后会进一步提高加速效果,但是可能会降低有效数据率。
rsc="1" #网卡接收端合并开关;设为 1 表示开启,设为 0 表示关闭;在有些较新的网卡驱动中,带有 RSC 算法的,需要打开该功能。
l2wQLimit="512 4096" #从 LAN 到 WAN 加速引擎在缓冲池充满和空闲时分别能够缓存的数据包队列的长度的上限;该值设置的高会获得更好的加速效果,但是会消耗更多的内存
w2lQLimit="512 4096" #从 WAN 到 LAN 加速引擎在缓冲池充满和空闲时分别能够缓存的数据包队列的长度的上限;该值设置的高会获得更好的加速效果,但是会消耗更多的内存
/serverspeeder/bin/serverSpeeder.sh reload
/serverspeeder/bin/serverSpeeder.sh stats
/serverspeeder/bin/serverSpeeder.sh help
/serverspeeder/bin/serverSpeeder.sh stop
/serverspeeder/bin/serverSpeeder.sh start
/serverspeeder/bin/serverSpeeder.sh restart
1.4 开启TCP Fast Open
vi /etc/sysctl.conf
文件中再加上一行。# turn on TCP Fast Open on both client and server side
net.ipv4.tcp_fastopen = 3
vi /etc/shadowsocks.json
配置文件中"fast_open": false改为"fast_open": true。这样速度也将会有非常显著的提升。2. 加密层面
Debian/Ubuntu
apt-get install python-m2crypto
安装之后重启SS,速度将会有一定的提升
先安装依赖包:
yum install -y openssl-devel gcc swig python-devel autoconf libtool
安装setuptools:
wget --no-check-certificate https://raw.githubusercontent.com/iMeiji/shadowsocks_install/master/ez_setup.py
python ez_setup.py install
pip install M2Crypto
或者pip install M2Crypto --upgrade
2.3 使用CHACHA20加密算法
Debian/Ubuntu
apt-get install build-essential
wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
tar xf LATEST.tar.gz && cd libsodium*
./configure && make && make install
ldconfig
yum groupinstall "Development Tools"
wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
tar zxf LATEST.tar.gz
cd libsodium*
./configure
make
make install
vi /etc/ld.so.conf
添加一行:
/usr/local/lib
保存退出后,运行命令:
ldconfig
vi /etc/shadowsocks.json
"method":"aes-256-cfb"改成"method":"chacha20",重启SS即可/etc/init.d/shadowsocks restart
3. 网络层面
如果你还要给小伙伴爬,那我建议开启多个端口而不是共用,这样网络会更加顺畅。
3.1 防火墙设置(如有)
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p udp --dport 443 -j ACCEPT
service iptables restart
优化ss(我按本文做过)
主要通过第一次 TCP 握手后服务器产生 Cookie 作为后续 TCP 连接的认证信息,客户端通过 TCP 再次连接到服务器时,可以在 SYN 报文携带数据 (RFC793),降低了握手频率,可避免恶意攻击并大幅降低网络延迟 (参考)。下面介绍如何开启这一功能
1
2
3
4echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf
# 运行以上命令,设置 IPv4 下的 TFO 默认为开启状态
sysctl -e -p
# 运行以上命令,应用配置改善 TCP 拥塞算法
HTTP 协议在传输层使用 TCP 协议,TCP 丢包重传机制算法的不同会大幅影响科学上网速度;更换 TCP 拥塞算法需要使用命令
vim /etc/sysctl.conf
编辑系统配置文件,并定位到net.ipv4.tcp_congestion_control =
这一行 (若没有请手动添加),其后接的算法主要有cubic
、hybla
、bbr
等,修改完成后使用命令sysctl -e -p
应用配置;下面是相关算法的简单介绍1
2
3cubic # 由 bic 算法衍化而来,适用于低丢包率网络
hybla # 卫星链路使用的算法,适用于高延迟,高丢包率的网络
bbr # 由 Google 开源的算法,适用于低延迟,较低丢包率的网络 (需要手动配置*)*配置 Google BBR
开始配置 BBR 之前,确保你的内核版本 > 4.8.x (使用命令
uname -a
查看),若低于最低版本,请先更新你的内核 (Ubuntu);若要更新内核,请先使用命令vim updatekernel.sh
新建脚本,将下面的代码复制粘贴到脚本内并保存1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19KERNELVER="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/ | awk -F'\"v' '/v[4-9]./{print $2}' | cut -d/ -f1 | grep -v - | sort -V | tail -1)"
# 获取最新的 Linux Kernel 版本
SYSTYPE="$(dpkg --print-architecture)"
# 获取系统平台信息
[ "$SYSTYPE" = "amd64" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/amd64.deb/{print $2}' | cut -d'<' -f1 | head -1)"
[ "$SYSTYPE" = "i386" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/i386.deb/{print $2}' | cut -d'<' -f1 | head -1)"
[ "$SYSTYPE" = "armhf" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/armhf.deb/{print $2}' | cut -d'<' -f1 | head -1)"
[ "$SYSTYPE" = "arm64" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/arm64.deb/{print $2}' | cut -d'<' -f1 | head -1)"
[ "$SYSTYPE" = "ppc64el" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/ppc64el.deb/{print $2}' | cut -d'<' -f1 | head -1)"
[ "$SYSTYPE" = "s390x" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/s390x.deb/{print $2}' | cut -d'<' -f1 | head -1)"
# 获取对应平台 Kernel 包的文件名
wget -t 3 -T 30 -nv -O "$KERNEL" "http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/${KERNEL}"
# 下载对应的 Kernel
dpkg -i $KERNEL
# 安装下载好的 Kernel
rm -f $KERNEL
# 清理下载文件
update-grub
# 更新启动菜单然后使用命令
chmod -x updatekernel.sh && bash updatekernel.sh
给予脚本运行权限并运行脚本来更新内核若无需更新内核,则先将拥塞控制算法填写为
bbr
,再添加以下代码保存并使用命令sysctl -e -p
应用1
2net.core.default_qdisc = fq
# 将网络拥塞队列算法设置为性能和延迟最佳的 fq_codel内核优化
使用命令
vim sysctl.conf
编辑并在末尾加入如下代码,对系统进程及内存分配进行优化,保存并使用命令sysctl -e -p
应用1
2
3
4
5
6
7
8
9
10fs.file-max = 1024000
# 系统所有进程一共可以打开的句柄数 (bytes)
kernel.msgmnb = 65536
# 进程通讯消息队列的最大字节数 (bytes)
kernel.msgmax = 65536
# 进程通讯消息队列单条数据最大的长度 (bytes)
kernel.shmmax = 68719476736
# 内核允许的最大共享内存大小 (bytes)
kernel.shmall = 4294967296
# 任意时间内系统可以使用的共享内存总量 (bytes)使用命令
vim /etc/security/limits.conf
编辑和写入如下代码,限制用户档案的体积大小,提高系统稳定性,完成后保存1
2
3
4* soft nofile 512000
# 用户档案警告体积大小 (bytes)
* hard nofile 1024000
# 用户档案最大体积大小 (bytes)TCP 的优化
涉及内核控制,TCP 包大小,TCP 转发,连接超时等优化,代码的简单释义已在其下方注明;使用命令
vim sysctl.conf
编辑并写入如下代码,保存并使用命令sysctl -e -p
应用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
50net.core.rmem_max = 12582912
# 设置内核接收 Socket 的最大长度 (bytes)
net.core.wmem_max = 12582912
# 设置内核发送 Socket 的最大长度 (bytes)
net.ipv4.tcp_rmem = 10240 87380 12582912
# 设置 TCP Socket 接收长度的最小值,预留值,最大值 (bytes)
net.ipv4.tcp_wmem = 10240 87380 12582912
# 设置 TCP Socket 发送长度的最小值,预留值,最大值 (bytes)
net.ipv4.ip_forward = 1
# 开启所有网络设备的 IPv4 流量转发,用于支持 IPv4 的正常访问
net.ipv4.tcp_syncookies = 1
# 开启 SYN Cookie,用于防范 SYN 队列溢出后可能收到的攻击
net.ipv4.tcp_tw_reuse = 1
# 允许将等待中的 Socket 重新用于新的 TCP 连接,提高 TCP 性能
net.ipv4.tcp_tw_recycle = 0
# 禁止将等待中的 Socket 快速回收,提高 TCP 的稳定性
net.ipv4.tcp_fin_timeout = 30
# 设置客户端断开 Sockets 连接后 TCP 在 FIN 等待状态的实际 (s),保证性能
net.ipv4.tcp_keepalive_time = 1200
# 设置 TCP 发送 keepalive 数据包的频率,影响 TCP 链接保留时间 (s),保证性能
net.ipv4.tcp_mtu_probing = 1
# 开启 TCP 层的 MTU 主动探测,提高网络速度
net.ipv4.conf.all.accept_source_route = 1
net.ipv4.conf.default.accept_source_route = 1
# 允许接收 IPv4 环境下带有路由信息的数据包,保证安全性
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 拒绝接收来自 IPv4 的 ICMP 重定向消息,保证安全性
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
# 禁止发送在 IPv4 下的 ICMP 重定向消息,保证安全性
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
# 关闭反向路径回溯进行源地址验证 (RFC1812),提高性能
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 忽略所有 ICMP ECHO 请求的广播,保证安全性
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 忽略违背 RFC1122 标准的伪造广播帧,保证安全性
net.ipv6.conf.all.accept_source_route = 1
net.ipv6.conf.default.accept_source_route = 1
# 允许接收 IPv6 环境下带有路由信息的数据包,保证安全性
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# 禁止接收来自 IPv6 下的 ICMPv6 重定向消息,保证安全性
net.ipv6.conf.all.autoconf = 1
# 开启自动设定本地连接地址,用于支持 IPv6 地址的正常分配
net.ipv6.conf.all.forwarding = 1
# 开启所有网络设备的 IPv6 流量转发,用于支持 IPv6 的正常访问 (我优化到这步)使用 m2crypto 加速加解密 (Python 服务端)
1
2
3
4apt-get install build-essential python3-dev python-dev python-pip libssl-dev swig
# 运行以上命令,安装支持库
pip install m2crypto
# 运行以上命令,安装 m2crypto使用 Kcptun 加速 (会影响 TCP Fast Open 的正常工作,请自行取舍)
1
2echo "$(dpkg --print-architecture)"
# 运行以上命令,查看 Linux 硬件版本在这里获取最新的预编译版本 Kcptun (Go) 下载地址 (注意选择相应的 Linux 系统版本)
1
2
3
4
5
6wget [获取的下载地址]
# 运行以上命令,下载预编译版本 Kcptun
tar -zxvf [下载后的文件名]
# 运行以上命令,解压预编译文件
./[解压后的文件名] -t "[服务器目标IPv4]:[Kcptun目标端口]" -l ":[Kcptun监听端口]"
# 运行以上命令启动 Kcptun,具体配置请参考官方 README**kcptun/README 官方文档.
一键安装最新内核并开启 BBR 脚本
最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,最新的 4.11 版内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。
本脚本适用环境
系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
内存要求:≥128M
日期 :2018 年 12 月 14 日
关于本脚本
1、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
2、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
3、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。
使用方法
使用 root 用户登录,运行以下命令:
1 | bash <(curl -s -L https://git.io/BBR) |
安装完成后,脚本会提示需要重启 VPS,输入 y
并回车后重启。
重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:
1 | uname -r |
查看内核版本,含有 4.12
就表示 OK 了
1 | sysctl net.ipv4.tcp_available_congestion_control |
返回值一般为:net.ipv4.tcp_available_congestion_control = bbr cubic reno
或者为:net.ipv4.tcp_available_congestion_control = reno cubic bbr
1 | sysctl net.ipv4.tcp_congestion_control |
返回值一般为:net.ipv4.tcp_congestion_control = bbr
1 | sysctl net.core.default_qdisc |
返回值一般为:net.core.default_qdisc = fq
1 | lsmod | grep bbr |
返回值有 tcp_bbr
模块即说明bbr已启动。注意:并不是所有的 VPS 都会有此返回值,若没有也属正常。
CentOS 下最新版内核 headers 安装方法
本来打算在脚本里直接安装 kernel-ml-headers,但会出现和原版内核 headers 冲突的问题。因此在这里添加一个脚本执行完后,手动安装最新版内核 headers 之教程。
执行以下命令
1 | yum --enablerepo=elrepo-kernel -y install kernel-ml-headers |
根据 CentOS 版本的不同,此时一般会出现类似于以下的错误提示:
1 | Error: kernel-ml-headers conflicts with kernel-headers-2.6.32-696.20.1.el6.x86_64 |
因此需要先卸载原版内核 headers ,然后再安装最新版内核 headers。执行命令:
1 | yum remove kernel-headers |
确认无误后,输入 y,回车开始卸载。注意,有时候这么操作还会卸载一些对内核 headers 依赖的安装包,比如 gcc、gcc-c++ 之类的。不过不要紧,我们可以在安装完最新版内核 headers 后再重新安装回来即可。
卸载完成后,再次执行上面给出的安装命令。
1 | yum --enablerepo=elrepo-kernel -y install kernel-ml-headers |
成功安装后,再把那些之前对内核 headers 依赖的安装包,比如 gcc、gcc-c++ 之类的再安装一次即可。
为什么要安装最新版内核 headers 呢?
这是因为 shadowsocks-libev 版有个 tcp fast open 功能,如果不安装的话,这个功能是无法开启的。
内核升级方法
如果是 CentOS 系统,执行如下命令即可升级内核:
1 | yum -y install kernel-ml kernel-ml-devel |
如果你还手动安装了新版内核 headers ,那么还需要以下命令来升级 headers :
1 | yum -y install kernel-ml-headers |
CentOS 6 的话,执行命令:
1 | sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf |
CentOS 7 的话,执行命令:
1 | grub2-set-default 0 |
如果是 Debian / Ubuntu 系统,则需要手动下载最新版内核来安装升级。
去这里下载最新版的内核 deb 安装包。
如果系统是 64 位,则下载 amd64 的 linux-image 中含有 generic
这个 deb 包;
如果系统是 32 位,则下载 i386 的 linux-image 中含有 generic
这个 deb 包;
安装的命令如下(以最新版的 64 位 4.12.4 举例而已,请替换为下载好的 deb 包):
1 | dpkg -i linux-image-4.12.4-041204-generic_4.12.4-041204.201707271932_amd64.deb |
安装完成后,再执行命令:
1 | /usr/sbin/update-grub |
最后,重启 VPS 即可。
特别说明
如果你使用的是 Google Cloud Platform(GCP)更换内核,有时会遇到重启后,整个磁盘变为只读的情况。只需执行以下命令即可恢复:
1 | mount -o remount rw / |