简单的说明一下WonderShaper的原理。根据官方介绍来看其实他只是个脚本,实际上原理还是iproute的tc命令来对速率进行控制。更准确的说WonderShaper其实是个流量整形脚本。

我们可以先打开WonderShaper的Github地址来下载最新的源码包进行编译。这里需要说明的是,虽然在yum或者apt中是可以安装WonderShaper的,但由于apt和yum中的版本过于古老,所以我们建议使用源码包进行编译安装。

Github地址:https://github.com/magnific0/wondershaper

1. 安装前准备

由于编译我们需要安装make以及git,所以我们要先确认系统中已经安装了make和git。

apt install make -y
apt install git -y

2. 开始安装

git clone https://github.com/magnific0/wondershaper.git && cd wondershaper && make install

3. 开始设置

在这里我们得先知道我们的网卡名称是什么,使用以下命令查看后,得知我们的网卡名称是eth0。

ifconfig

然而我们使用编译安装的方式安装了之后,是不会在sbin下建立软链的,所以为了方便后续,我们先为它建个软链。

ln -s /usr/bin/wondershaper /sbin/wondershaper

接下来我们就能够按照官方给的文档来进行限速了。比如我要限制网卡eth0上传下载均为100Mbps。

wondershaper -a eth0 -d 102400 -u 102400

这里的102400是怎么算的呢,因为这个脚本的速度单位是Kbps,100Mbps等于102400Kbps,以此类推。以上命令是同时限制上传与下载,如果我们想要只限制上传或者只限制下载的话可以参考以下设置。

限制网卡eth0上传为100Mbps:

wondershaper -a eth0 -u 102400

限制网卡eth0下载为100Mbps:

wondershaper -a eth0 -d 102400

如果感觉刚刚的设置不太行,需要调整,要先用以下命令清除刚刚的设置。

清除对网卡eth0的限制:

wondershaper -c -a eth0

这时候我们设置好了之后,可以用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

比如我要限制网卡eth0上传下载均为100Mbps,我们就这么设置:

[wondershaper]
IFACE="eth0"
DSPEED="102400"
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 <网卡>

以上教程再debian11测试成功,debian10的官方源有问题,需要降级到buster或者oldstable,推荐升级至Debian 11解决此问题。

sudo apt reinstall libcurl3-gnutls/buster