tc
это путь. Хитрость в том, чтобы расставить приоритеты трафика, не ограничивая его.
http://www.lartc.org/howto/lartc.qdisc.classful.html, раздел 9.5.3 «Диско PRIO»; по умолчанию он создает 3 очереди, но вы можете проигнорировать третью. Самый простой подход был бы:
Создать очереди дисциплин (qdisc)
tc qdisc add dev eth0 root handle 1: prio tc qdisc add dev eth0 parent 1:1 handle 10: sfq tc qdisc add dev eth0 parent 1:2 handle 20: sfq tc qdisc add dev eth0 parent 1:3 handle 30: sfq
Все они имеют одинаковый алгоритм очереди; затем назначьте свои серверы (IP 192.168.1.0-127 в этом случае) для обработки 10:, а остальные 20::
tc filter add dev eth0 protocol ip parent 1:1 prio 1 u32 match ip dst 192.168.1.0/25 flowid 10: tc filter add dev eth0 protocol ip parent 1:2 prio 2 flowid 20:
(Отказ от ответственности: с тех пор, как я коснулся этого материала, прошло много времени, возможно, вам придется поэкспериментировать со значениями после parent
и flowid
)
Использование диапазонов с степенями 2 намного проще, чем десятичные пределы. / 25 после IP-адреса игнорирует последние 7 бит IP-адреса, следовательно, диапазон от 0 до 127. Используйте / 26, чтобы ограничить диапазон до 0,63, если это необходимо.
На той же странице обсуждается Hierarchical Token Bucket, который является более тонким способом распределения пропускной способности. Хитрость заключается в том, чтобы создать 2 класса с перекосом полосы пропускания, скажем 1:10 (100 Мбит против 1000 Мбит). Это оставит некоторую пропускную способность для других ваших клиентов.