之前有一台服务器,说是给了2.5Gbps
的带宽但不能长时间占满,如果要长时间占满的话上传需要限速到200Mbps
。好吧这么一说恐怕很多人都知道这是哪家的服务器了。不过今天的重点是,如果要这么限速的话,该怎么做?网上去搜索的话一般都会告诉你用tc
配合iptables
等等高级操作,一看配置实在是麻烦的很,且不说我们根本不需要那么精细的设置。那有没有更简单的办法?所以今天我给大家推荐这个叫做WonderShaper
的玩意来简简单单的限制服务器带宽速度。
首先先简单的说明一下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]
# Adapter
#
IFACE="eth0"
# 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 <网卡>
以上教程再debian11
测试成功,debian10
的官方源有问题,需要降级到buster
或者oldstable
,推荐升级至Debian 11
解决此问题。
sudo apt reinstall libcurl3-gnutls/buster