наступна ситуація: ми - група студентів, що здійснюють інтернет-зв’язок для місцевих мешканських залів, усього близько 2000 кінцевих користувачів.
У нас є система точок трафіку, кожен MB знижує або завантажує бали, нові бали додаються за годину. На даний момент ми блокуємо доступ користувача до Інтернету, коли він витратив усі свої пункти (розміщуючи його в політиці REJECT в iptables на нашому маршрутизаторі шлюзу Debian).
Ми хотіли б лише обмежити пропускну здатність користувача. Який найкращий спосіб зробити це?
Найпростішою відповіддю було б встановити обмеження швидкості на порту комутатора користувача (в основному Cisco Catalyst 3550s). Однак це небажано, оскільки трафік всередині нашої власної мережі та до університетської мережі повинен залишатися необмеженим. Чи є спосіб обмежити пропускну здатність лише для пакетів з певним діапазоном IP-адреси призначення (тобто як вихід, так і вхід) у Cisco IOS? Я нічого не міг знайти.
Іншим способом було б контролювати трафік на маршрутизаторі нашого шлюзу. На думку мені приходить декілька рішень:
tc або tcng - схоже, що обидва мають досить затаємний синтаксис і не пропонують хороших функцій для управління трафіком за IP-адресою. Виділений QDisc для такої кількості людей, ймовірно, дуже сповільнить роутер. Крім того, документація щодо обох є досить застарілою.
shorewall - здається, має досить акуратний синтаксис для конфігурацій, проте я не впевнений, чи може він обробляти таку кількість трафіку та користувачів і чи підходить він для обмеження трафіку за IP-адресою
pfSense - виглядає як ОС, призначена для таких цілей, як наша. Однак, нам потрібно буде повністю встановити наш маршрутизатор. У нас немає інших систем BSD, і pfSense повинен був би мати дуже хороші можливості обліку трафіку (зараз ми також використовуємо fprobe-ulog та ulog-acctd).
Який ваш досвід? Яке рішення відповідає нашим потребам і яке найлегше підтримувати? У вас є інші ідеї?
Якщо вам потрібна додаткова інформація про нашу систему, будь ласка, не соромтеся запитати.
Заздалегідь спасибі.
EDIT : Я впровадив систему з iptables
і tc
.
Кожен користувач має підмережу / 28, VPN IP (обидва з 10.0.0.0/8) та зовнішній IP, всі вони керуються через один ланцюжок iptables. Цей ланцюжок має лише одне правило, просте RETURN
.
Кожні п’ять хвилин сценарій Python зачитує лічильники байтів цих правил. Він скидає лічильники та оновлює обліковий запис точки трафіку користувача в нашій базі даних PostgreSQL.
Якщо баланс точок користувача зменшується нижче певного порогу, для цього користувача створюються два класи tc (один для вхідного, один для вихідного інтерфейсу на нашому маршрутизаторі шлюзу), IP-адреси вводяться у фільтри tc, що належать до цих класів. Класи обмежені швидкістю HTB.
У порівнянні з попередньою системою, fprobe-ulog
і ulog-acctd
це набагато швидше, оскільки підрахунок байтів здійснюється iptables.
Швидкість мережі значно покращилась для наших користувачів.