Как я могу ограничить загрузку / выгрузку?

77

Как я могу ограничить загрузку / загрузку пропускной способности для:

  • Вся ОС.
  • Один сетевой интерфейс.
  • Разовое приложение.
yevhene
источник
Я отправил сообщение об ошибке wondershaperв Ubuntu 17.10, которое может быть похоже на то, что происходит с @Zeromatiker в Ubuntu 17.04: bugs.launchpad.net/ubuntu/+source/wondershaper/+bug/1745421
aguadopd

Ответы:

42

Ограничить отдельный интерфейс легко, но глобальные ограничения скорости требуют более сложных правил, как и правила, основанные на приложениях. Я не говорю, что это не может быть сделано, но для этого нужно немало покопаться во внутренностях сети.

Вот быстрый Как настроить ограничение для каждого интерфейса

Если вы действительно хотите установить правила для приложений, вам следует обратиться к некоторой среде брандмауэра, такой как shorewall , в которой есть вспомогательные функции для настройки шейпинга. Даже с этими инструментами требуется немножко продуманного и проверенного, чтобы установить его на место. Делать что-то подобное этому не так просто.

Ressu
источник
Wondershaper не работает, я не знаю почему (даже wondershaper eth0 1000 1000 не имеет пропускной способности интернета. Мне нужно ограничить всю пропускную способность eth0 не только конкретными приложениями. Как это можно сделать?
Arash
67

Хотя это старый вопрос, я сталкивался с этим, когда искал ответ на тот же вопрос. Ограничения ОС и интерфейса уже были рассмотрены в более раннем ответе, поэтому здесь есть способ установить ограничения для конкретного приложения. Используйте приложение под названием струйка. Так и делай sudo apt-get install trickle. Вы можете ограничить загрузку / загрузку для определенного приложения, запустив

trickle -u (upload limit in KB/s) -d (download limit in KB/s) application

Это запустит приложение с указанными ограничениями. Вы также можете указать время «сглаживания», чтобы сэмплировать сэмплы в течение требуемого периода времени, если ваше приложение имеет всплески потребления полосы пропускания и вы хотите, чтобы эти всплески были разрешены, если среднее значение находится в пределах ваших спецификаций.

SMeznaric
источник
14
Большое спасибо! Это решение идеально подходит для управления пропускной способностью для каждого приложения. Пожалуйста, не стесняйтесь отправлять ответ, даже если вопросу лет. Для дальнейшего использования: вам может быть выдано сообщение об ошибке, например trickle: Could not reach trickled, working independently: No such file or directory. Вы можете удалить это предупреждение, выполнив ручеек в автономном режиме с помощью trickle -s.
Glutanimate
Как убрать лимит, ограниченный струйкой?
Anonymous Mouse
2
Trickle запустит приложение для вас с соблюдением установленных ограничений. Поэтому все, что вам нужно сделать, это перезапустить приложение, не используя команду trickle.
Сезнарик
1
Большое спасибо за этот ответ, это именно то, что я искал
Али
1
Именно то, что мне было нужно, при попытке симулировать медленное сетевое соединение.
Итан Камински
5

Если вы хотите ограничить пропускную способность для определенного IP-адреса, вы можете использовать это:

tc qdisc add dev eth1 root handle 1: htb default 12
tc class add dev eth1 parent 1: classid 1:10 htb rate 2500kbps
tc class add dev eth1 parent 1: classid 1:11 htb rate 2500kbps
tc class add dev eth1 parent 1: classid 1:12 htb rate 5000kbps

tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.105 flowid 1:10
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.106 flowid 1:11
billtian
источник
4
это было довольно запутанно. Несколько комментариев будут иметь большое значение. Например, вы можете добавить ссылки или объяснения для qdiscs, classids, htb и т. Д.
oligofren
Таким образом, по умолчанию вышеизложенное ограничивает все до 5000 кбит / с, если не отфильтровано в какую-либо другую очередь? А что если мы не хотим ограничивать все ?
Кен Шарп