Проблема мінімальної ставки та класу за замовчуванням для HTB


29

У мене є сумніви щодо структури HTB, яку я використовую.

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

Це означає, що користувач1 може мати доступ до сайту slashdot.org до 8 КБ при завантаженні та 3 КБ для завантаження, а користувач2 може мати на slashdot.org обмежений доступ на 4 КБ вниз та на 1 КБ вище.

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

Ось моя поточна структура (я покажу лише ту, що виходить з локальної мережі, а для завантаження - просто "копію" цієї)

HTB qdisc (ручка 2 :), що додається в інтерфейс, класом трафіку за замовчуванням є клас FFFF.

Кореневий клас 2: 1 безпосередньо під HTB qdisc, що має для швидкості та стелі потужність DOWNLINK.

Клас 2 за замовчуванням: FFFF як дитина 2: 1, зі швидкістю 1 кбіт / с та величиною потужності DOWNLINK.

Потім, динамічно додаються інші класи, коли є нове обмеження для користувача з певного домену, додається новий клас tc для управління швидкістю завантаження з його домену.

Поки що ось що я зробив:

Створіть новий клас tc з унікальним ідентифікатором (взято з бази даних, не суть тут), як батько класу 2: 1, значення швидкості 1bps, значення 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.

Точка, в якій я серйозно сумніваюся, - це використання мінімальної швидкості швидкості 1bps для класу за замовчуванням та класу з обмеженням. Я не можу контролювати кількість обмежених класів, які будуть створені, і я не хочу, щоб загальна швидкість обмеженого класу була над рівнем кореневого класу.

Ще один момент, я додав за замовчуванням prio prio 0, а обмежений клас prio 1, тому у випадку, коли клас за замовчуванням повинен запозичити (майже завжди відповідно до його дуже повільної швидкості), цей клас подаватиметься перед іншим доменом з обмеженням. Але чи не будуть голодувати ці домени, якщо я зберігаю стелю класу за замовчуванням як клас кореневого класу?

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

Мені також цікаво, чи корисний тут клас за замовчуванням, оскільки, якщо я не вказую; t вказує клас за замовчуванням для htb qdisc, пакети, що не відповідають фільтрам, будуть зняті з апаратної швидкості. (але тут знову, коли змушують голосувати обмежений клас?)

Я дійсно новачок у tc та мережевих QoS, тому будь-які поради, критики (конструктивні;)) будуть вітатися.

Вінсент.

Відповіді:


2

Оскільки ви не включили класифікатори, важко підрахувати, який трафік ви точно маєте на увазі в кожному класі. Наприклад, вихідний http або ssh трафік дуже важливий для інтерактивності, вхідний http не так вже й великий.

Я б гарантував певну пропускну здатність для кожної послуги , кажучи: у мене є x kbps для вхідного трафіку httpd, і він ділиться порівну між користувачами. Якщо у вас є 10 або 100 користувачів, це справедливо. "Якщо у вас є користувачі з високим пріоритетом або користувачі з низьким пріоритетом у кожній з цих служб, вам потрібно мати додаткові класи та класифікатори для них.

(Я також сподіваюся, що ви знаєте, що ви можете формувати лише вихідний трафік через інтерфейс, а не вхідний. Це означає, що якщо ви хочете обмежити вихідну лінію, вам доведеться працювати або з вихідним інтерфейсом до Інтернету, або використовувати пристрій проміжних черг . Посібник з lartc.org - дуже хороший ресурс.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.