Я использую торрент-клиент на моем безголовом сервере Ubuntu. Также к этому серверу подключено несколько компьютеров, которые используются в качестве интернет-шлюза / маршрутизатора. Вопрос в том, можно ли настроить iptables для определения приоритетности трафика из eth1 (lan if) над локальным трафиком, генерируемым сервером? Что-то вроде QOS ..
Есть несколько альтернатив для достижения того, что вы ищете. Но в первую очередь, да, это возможно. Хотя многие возможности довольно сложны.
Одним из самых простых вариантов может быть запуск демона torrent под собственным пользователем \ группой. Затем используйте iptables, чтобы пометить весь трафик от этого пользователя \ группы флагом. Затем позвольте фильтру tc установить этот флаг и поместить его в очередь с низким приоритетом. Посмотрите на нижнюю часть этой вики для идеи.
Для того, что вы спрашиваете, вам нужны только две очереди ( рис. 1. ), одна с низким приоритетом и одна с высоким. Хотя может быть лучше придерживаться чего-то ближе к этому примеру . Вы можете приспособить пример к вашим потребностям, просто отбросьте деталь с помощью nat и установите значение метки по умолчанию ниже значения, которое вы будете использовать для трафика, генерируемого демоном.
Так что для моего предложения вы можете использовать что-то вроде iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j MARK --set-mark 6
ZZZZ - это идентификатор пользователя.
Альтернативой для установки флага может быть использование iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j CLASSIFY --set-class X:Y
, где X и Y - идентификатор класса, а ZZZZ - идентификатор пользователя.
Рис. 1:
+---------+
| root 1: |
+---------+
|
+------------+
| class 1:1 |
+------------+
| |
+----+ +----+
|1:10| |1:11|
+----+ +----+
Лучше всего иметь лист для каждой метки fw. Но мой лучший совет - прочитайте и постарайтесь понять приведенный выше пример , чтобы адаптировать его к вашим потребностям. Если у вас есть какие-либо вопросы, добавьте их.
В примере, упомянутом выше , важно, чтобы вы понимали эту часть ( рис. 2. ), когда хотите написать правила iptables для маркировки или классификации трафика. Для краткого объяснения этого с немного отличающейся диаграммой взгляда посмотрите на это .
Рис. 2:
First you have to understand how packet traverse the filters with iptables:
+------------+ +---------+ +-------------+
Packet -| PREROUTING |--- routing-----| FORWARD |-------+-------| POSTROUTING |- Packets
input +------------+ decision +---------+ | +-------------+ out
| |
+-------+ +--------+
| INPUT |---- Local process -| OUTPUT |
+-------+ +--------+
Это укажет вам правильное направление:
Правила, руководства и подходы
Качество обслуживания - довольно сложная тема - ссылка, размещенная @ anders-f-u-kiaer, возможно, является лучшим решением, но довольно сложным. Я совсем не эксперт в этом, поэтому я не буду комментировать.
Тем не менее, часто более простое решение может быть удобным. Если вы хотите просто ограничить пропускную способность для одной программы (например, торрент-клиента), гораздо более простое решение использует trickle
(1).
Вы можете установить его с помощью
sudo apt-get install trickle
, а затем запустить программу с
trickle -d 100 -u 50 program
, и program
будет иметь пропускную способность, превышающую 100 кбит / с для загрузки. и 50 кбит / с для загрузки. На этой странице на tuxradar можно найти намного больше опций и информации о trickle: управляйте своей пропускной способностью с помощью trickle .
(1) Это отличается от надлежащего QoS: полоса пропускания, используемая «урезанной» программой, будет уменьшаться каждый раз, а не только тогда, когда есть потребность в услугах с более высоким приоритетом, как это будет происходить с надлежащим QoS.
Вы не делаете это с iptables. Вам нужно изменить метрики маршрутизации.
Установка метрик маршрутизации для сетевого интерфейса & mdash; Каталог приложений Ubuntu
Чтобы дать всем другим интерфейсам более высокий приоритет, чем у wlan0, просто запустите:
ifmetric wlan0 1
Для сброса метрик маршрутов, подключенных к wlan0, просто запустите:
ifmetric wlan0 0
подробнее здесь: http://0pointer.de/lennart/projects/ifmetric/