如何限制 Ubuntu 服务器 20.04 上的链接速度

如何限制 Ubuntu 服务器 20.04 上的链接速度

操作系统:Ubuntu 20.04 服务器 - Virtualbox 接口:enp0s3

我一直在寻找一种解决方案,将链接速度限制为 10Mb/s、半双工和禁用自动协商。正如我在 [link][1] 指南中看到的那样,但它不起作用。当我执行 networkctl status enp0s3 时,它只显示自动协商开启、速度 1Gs 和全双工。而且这永远不会改变,即使它显示它正在从我的文件中获取配置。然后我发现了 systemctl status systemd-udevd 命令来获取有关该问题的更多信息,我发现了这个错误:

我需要在 /etc/systemd/network/ 中创建一个名为 10-mb.link 的文件来应用以下配置:

[MATCH]

MACAddress=ex:am:pl:e0:ma:c1

[LINK]

BitsPerSecond=10M

Duplex=Half

我遵循了以下说明:[1]:https://manpages.ubuntu.com/manpages/focal/man5/systemd.link.5.html以及[2]:https://linuxiac.com/how-to-manipulate-ethernet-card-on-linux-with-ethtool-command/

但都不起作用,我不知道还能尝试什么,我的测试系统没有 NetworkManager(我读到它可能会导致问题,但它甚至没有安装)

此外,在物理设备上,我能够设置上面提到的配置,但一旦启动,它们就会丢失已配置的内容。我使用以下命令执行了此操作:“ethtool -s enp2s0 speed 10 duplex half autoneg on”,但它在虚拟机上不起作用,我的系统在启动后就忘记了它,所以我的问题是,我如何才能使这些更改永久生效?

答案1

您可以将该命令添加为 cronjob,sudo crontab -e然后添加一行以在每次启动后运行该命令,如下所示:

@reboot sleep 30 && ethtool -s enp2s0 speed 10 duplex half autoneg on

启动后将会sleep 30延迟 30 秒执行命令,以允许接口首先启动...您可以根据需要减少或增加延迟。

或者,您可以使用不同的方法来实现您想要的部分或全部结果……例如,您可以仅使用流量整形规则tc限制带宽速率...我复制了我的并对其进行了修改,删除了不相关的规则并更改了数字以满足您的要求...它应该将下载和上传限制为 10 Mbit/秒...复制/粘贴并执行所有命令一次一个

sudo tc qdisc add dev wlp2s0 root handle 1: cbq avpkt 1000 bandwidth 10mbit
sudo tc class add dev wlp2s0 parent 1: classid 1:1 cbq rate 10000kbit allot 1500 prio 5 bounded isolated
sudo tc class add dev wlp2s0 parent 1:1 classid 1:10 cbq rate 10000kbit allot 1600 prio 1 avpkt 1000
sudo tc class add dev wlp2s0 parent 1:1 classid 1:20 cbq rate 10000kbit allot 1600 prio 2 avpkt 1000
sudo tc qdisc add dev wlp2s0 parent 1:10 handle 10: sfq perturb 10
sudo tc qdisc add dev wlp2s0 parent 1:20 handle 20: sfq perturb 10
sudo tc filter add dev wlp2s0 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff  flowid 1:10
sudo tc filter add dev wlp2s0 parent 1:0 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 1:10
sudo tc filter add dev wlp2s0 parent 1: protocol ip prio 13 u32 match ip dst 0.0.0.0/0 flowid 1:20
sudo tc qdisc add dev wlp2s0 handle ffff: ingress
sudo tc filter add dev wlp2s0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 10000kbit burst 1000kbit drop flowid :1

您需要更改wlp2s0为您的接口的名称。

您应该首先阅读文档,但如果您卡在 10 Mbit/s 并且不知道如何返回,这应该可以带您回到:

sudo tc qdisc del dev wlp2s0 handle ffff: ingress
sudo tc qdisc del dev wlp2s0 root

在这里也更改wlp2s0为您的接口名称。

相关内容