之前有一台服务器,说是给了1Gbps的带宽但不能长时间占满,如果要长时间占满的话上传需要限速到200Mbps。好吧这么一说恐怕很多人都知道这是哪家的服务器了。不过今天的重点是,如果要这么限速的话,该怎么做?网上去搜索的话一般都会告诉你用tc配合iptables等等高级操作,一看配置实在是麻烦的很,且不说我们根本不需要那么精细的设置。那有没有更简单的办法?所以今天我给大家推荐这个叫做WonderShaper的玩意来简简单单的限制服务器带宽速度。
首先先简单的说明一下WonderShaper的原理。根据官方介绍来看其实他只是个脚本,实际上原理还是iproute的tc命令来对速率进行控制。更准确的说WonderShaper其实是个流量整形脚本。
下面我来介绍一下如何使用这个脚本来对服务器进行限速。
首先,我们可以先打开WonderShaper的Github地址来下载最新的源码包进行编译。这里需要说明的是,虽然在yum或者apt中是可以安装WonderShaper的,但由于apt和yum中的版本过于古老,所以我们建议使用源码包进行编译安装。
Github地址:https://github.com/magnific0/wondershaper
1. 安装前准备
由于编译我们需要安装make,所以我们要先确认系统中已经安装了make。
apt install make -y
2. 开始安装
git clone https://github.com/magnific0/wondershaper.git && cd wondershaper && make install
3. 开始设置
在这里我们得先知道我们的网卡名称是什么,使用以下命令查看后,得知我们的网卡名称是ens8。
ifconfig
然而我们使用编译安装的方式安装了之后,是不会在sbin下建立软链的,所以为了方便后续,我们先为它建个软链。
ln -s /usr/bin/wondershaper /sbin/wondershaper
接下来我们就能够按照官方给的文档来进行限速了。比如我要限制网卡ens8上传下载均为100Mbps。
wondershaper -a ens8 -d 102400 -u 102400
这里的102400是怎么算的呢,因为这个脚本的速度单位是Kbps,100Mbps等于102400Kbps,以此类推。以上命令是同时限制上传与下载,如果我们想要只限制上传或者只限制下载的话可以参考以下设置。
限制网卡ens8上传为100Mbps:
wondershaper -a ens8 -u 102400
限制网卡ens8下载为100Mbps:
wondershaper -a ens8 -d 102400
如果感觉刚刚的设置不太行,需要调整,要先用以下命令清除刚刚的设置。
清除对网卡ens8的限制:
wondershaper -c -a ens8
这时候我们设置好了之后,可以用speedtest来试试效果如何,在使用前我们得先装好python。这里我就不写要怎么装python了。
wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py && python speedtest.py
4. 开机自动启动限速
由于Ubuntu16和Debian8开始使用了Systemd,而WonderShaper在编译安装的时候已经写好了针对Systemd的配置文件。所以我们只需要对他自带的配置文件稍作设置就行。
首先我们打开这个配置文件:
vim /etc/conf.d/wondershaper.conf
比如我要限制网卡ens8上传下载均为100Mbps,我们就这么设置:
[wondershaper]
# Adapter
#
IFACE="ens8"
# Download rate in Kbps
#
DSPEED="102400"
# Upload rate in Kbps
#
USPEED="102400"
修改完毕之后 !wq 进行保存。
之后我们使用以下命令启用WonderShaper并启用自启动。
systemctl start wondershaper
systemctl enable wondershaper
之后就可以试试重启以下再跑跑测速脚本看看是否正常。
最后我们一起来看一下官方给出的用法
wondershaper [-hcs] [-a <adapter>] [-d <rate>] [-u <rate>]
命令行参数解释:
-h 显示帮助信息
-a <网卡> 设置限制的网卡
-d <速率> 设置最大下载速率 (单位为Kbps)
-u <速率> 设置最大上传速率 (单位为Kbps)
-p 使用/etc/conf.d/wondershaper.conf中的设置作为默认设置
-c 清除对网卡的限速设置
-s 显示网卡的当前状态
一些不同的模式使用方法:
wondershaper -a <网卡> -d <速率> -u <速率>
wondershaper -c -a <网卡>
wondershaper -s -a <网卡>