Ubuntuサーバー20.04でリンク速度を制限するにはどうすればいいですか

Ubuntuサーバー20.04でリンク速度を制限するにはどうすればいいですか

OS: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ここでもインターフェースの名前を変更します。

関連情報