Вопрос: Минимальная скорость и класс по умолчанию для HTB


У меня есть некоторые сомнения в структуре HTB, которую я использую.

Моя цель - ограничить скорость загрузки и выгрузки пользователей в локальной сети. Каждый пользователь сети имеет личный список доменов со снижением и скоростью для домена, который он не может превышать.

Это означает, что пользователь1 может иметь свой доступ на slashdot.org, ограниченный 8 КБ при загрузке и 3 КБ для загрузки, а user2 может иметь на slashdot.org ограниченный доступ 4 КБ вниз и 1 КБ вверх.

На данный момент я настраиваю пару iptables / tc, которая отлично работает, но в очень небольшом масштабе, используя одновременно 2 или 3 виртуальных хоста (к сожалению, я не могу выполнить тест реального размера).

Вот моя текущая структура (я покажу только один на выходе локальной сети, один для загрузки - просто «копия» этого)

HTD qdisc (дескриптор 2 :), прикрепленный к интерфейсу, классом трафика по умолчанию является класс FFFF.

Корневой класс 2: 1 непосредственно под HTB qdisc имеет для скорости и потолка емкость DOWNLINK.

Класс по умолчанию 2: FFFF как ребенок 2: 1, со скоростью 1 кбит / с и потоком емкости DOWNLINK.

Затем добавляются другие классы, динамически добавленные при появлении нового ограничения для пользователя из определенного домена, для управления скоростью загрузки из своего домена добавляется новый класс tc.

Пока что вот что я сделал:

Создайте новый tc-класс с уникальным идентификатором (взятым из базы данных, а не здесь), в качестве родителя класс 2: 1, значение скорости 1 бит / с, значение ceil устанавливается на ограниченную скорость загрузки.

Вот команды tc:

-------------- BEGIN SCRIPT --------------
DOWNLINK=800

## Setting up the static tc qdisc and class

$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF

# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps

# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0

# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10

## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1

# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10

# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------

Весь обычный трафик (без ограничения скорости) должен перейти в класс по умолчанию, а ограниченный должен быть отправлен в соответствующий класс tc.

То, о чем я серьезно сомневаюсь, это использование минимальной скорости скорости 1 бит / с для класса по умолчанию и ограниченного класса. Я не могу контролировать количество ограниченных классов, которые будут созданы, и я не хочу, чтобы общая скорость ограниченного класса была над одним из корневого класса.

Еще один момент, я добавил по умолчанию prio 0 и ограниченный класс prio 1, поэтому, если класс по умолчанию должен брать (почти всегда в соответствии с его очень низкой скоростью), этот класс будет обслуживаться перед другим ограниченным доменом. Но разве эти домены не будут голодать, если я сохраню класс класса по умолчанию как один из корневого класса?

Как я могу добиться, чтобы пользователи могли поддерживать приличную интерактивность и пропускную способность для неограниченного использования, ограничивая скорость для нескольких доменов / пользователей?

Мне также интересно, полезен ли класс по умолчанию, так как если я не укажу класс по умолчанию для hdb qdisc, пакеты, не соответствующие фильтрам, будут удалены с аппаратной скоростью. (но здесь опять-таки с ограничением класса голодают?)

Я действительно новичок в QoS и сетевом QoS, поэтому любые советы, критики (конструктивные); будут приветствоваться.

Винсент.


28
2018-01-04 13:54


Источник




Ответы:


Поскольку вы не включили классификаторы, сложно вычесть, какой трафик вы в действительности имеете в виду в каждом классе. Например, исходящий http или ssh-трафик очень важен для интерактивности, входящий HTTP не так много.

Я бы гарантировал определенную пропускную способность для каждого оказание услуг говоря: у меня есть x kbps для входящего трафика httpd, и он делится поровну между пользователями. Если у вас 10 или 100 пользователей, это справедливо ». Если у вас есть высокоприоритетные пользователи или пользователи с низким приоритетом в каждой из этих служб, вам нужно иметь дополнительные классы и классификаторы для них.

(Также я надеюсь, что вы знаете, что вы можете формировать исходящий трафик только из интерфейса, а не входящего. Это означает, что если вы хотите ограничить восходящую линию связи, вам придется работать либо с исходящим интерфейсом в Интернет, либо использовать Средство промежуточного обслуживания, Руководство lartc.org - очень хороший ресурс.)


2
2017-07-15 14:47