Wie kann ich die Verbindungsgeschwindigkeit auf dem Ubuntu-Server 20.04 begrenzen?

Wie kann ich die Verbindungsgeschwindigkeit auf dem Ubuntu-Server 20.04 begrenzen?

Betriebssystem: Ubuntu 20.04-Server – Virtualbox-Schnittstelle: enp0s3

Ich habe nach einer Lösung gesucht, um die Verbindungsgeschwindigkeit auf 10 Mbit/s zu begrenzen, Halbduplex und Autonegotiation zu deaktivieren. Wie ich in der Anleitung [link][1] gesehen habe, funktioniert es aber nicht. Wenn ich networkctl status enp0s3 ausführe, wird nur Autonegotiation aktiviert, Geschwindigkeit 1 Gs und Duplex voll angezeigt. Und das ändert sich nie, auch wenn angezeigt wird, dass die Konfiguration aus meiner Datei übernommen wird. Dann habe ich den Befehl systemctl status systemd-udevd entdeckt, um weitere Informationen zu dem Problem zu erhalten, und habe diesen Fehler gefunden:

Ich muss in /etc/systemd/network/ eine Datei namens 10-mb.link erstellen, um die folgende Konfiguration anzuwenden:

[MATCH]

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

[LINK]

BitsPerSecond=10M

Duplex=Half

Ich bin folgender Anleitung gefolgt: [1]:https://manpages.ubuntu.com/manpages/focal/man5/systemd.link.5.htmlund 2]:https://linuxiac.com/wie-manipuliert-man-ethernet-karten-unter-linux-mit-ethtool-command/

Aber nichts hat funktioniert. Ich weiß nicht, was ich sonst noch versuchen soll. Auf meinem Testsystem ist der NetworkManager nicht installiert (ich habe gelesen, dass er Probleme verursachen könnte, aber er ist nicht einmal installiert).

Außerdem konnte ich auf den physischen Geräten die oben beschriebene Konfiguration vornehmen, aber sobald wir booten, gehen die Konfigurationen verloren. Ich habe es mit diesem Befehl gemacht: „ethtool -s enp2s0 speed 10 duplex half autoneg on“, aber es funktioniert nicht auf der virtuellen Maschine, mein System vergisst es einfach nach dem Booten, also ist meine Frage, wie ich diese Änderungen dauerhaft machen kann?

Antwort1

Sie können diesen Befehl als Cronjob hinzufügen und sudo crontab -edann eine Zeile hinzufügen, um den Befehl nach jedem Booten wie folgt auszuführen:

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

Dadurch sleep 30wird die Ausführung des Befehls nach dem Booten um 30 Sekunden verzögert, damit die Schnittstelle zuerst angezeigt wird. Sie können die Verzögerung nach Bedarf verkürzen oder verlängern.

Alternativ können Sie verschiedene Methoden verwenden, um einige oder alle gewünschten Ergebnisse zu erzielen. Beispielsweise können Sie Traffic-Shaping-Regeln verwenden, indem Sie nurtcum die Bandbreitenrate zu begrenzen ... Ich habe meine kopiert und geändert, indem ich irrelevante Regeln eliminiert und die Zahlen geändert habe, um sie Ihren Anforderungen anzupassen ... Es sollte Download und Upload auf 10 Mbit/Sekunde begrenzen ... Kopieren/Einfügen und Ausführen aller Befehleeins nach dem anderen:

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

Sie müssen wlp2s0den Namen Ihrer Schnittstelle ändern.

Sie sollten zunächst die Dokumentation lesen. Wenn Sie jedoch bei 10 Mbit/s nicht weiterkommen und nicht wissen, wie Sie zurückkommen, sollte dies Sie zurückbringen:

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

Ändern Sie wlp2s0auch hier den Namen Ihrer Schnittstelle.

verwandte Informationen