Как ограничить скорость соединения на сервере Ubuntu 20.04?

Как ограничить скорость соединения на сервере Ubuntu 20.04?

ОС: Ubuntu 20.04 сервер - Virtualbox Интерфейс: enp0s3

Я искал решение, как ограничить скорость соединения до 10 Мбит/с, полудуплекс и отключение автосогласования. Как я видел в руководстве [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 Мбит/с ... Скопируйте/вставьте и выполните все командыодин за раз:

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 Мбит/с и не знаете, как вернуться назад, это должно вас вернуть:

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

Здесь также измените wlp2s0имя вашего интерфейса.

Связанный контент