Динамическое шейпирование и таблицы ipfw

Технические вопросы по UTM 5.0
Ответить
kudeb
Сообщения: 13
Зарегистрирован: Вс янв 30, 2011 14:17

Динамическое шейпирование и таблицы ipfw

Сообщение kudeb »

Добрый день.
Помогите разобраться.
Версия: UTM 5.2.1-008 FreeBSD 7.X (update 3).
На данный момент скорость режется c помощью pipe и таблиц. Существуют 2 таблицы: 126 для входящей скорости и 127 для исходящей.
IP адрес абонента попадает в таблицу, с определенным в биллинге teblearg, дальше попадает в pipe. (пример правила "table 126 add UIP 512")
Поставлена задача создать тариф с динамическим шейпированием.
В начале месяца абоненту дается, допустим, 1Гб на скорости 50Мбит/с, после расходования его скорость режется до 256 кбит/с.
Правила динамического шейпирования отрабатывают.
Но появился вопрос: так как правило "включение интернета" не поддерживает параметр "BANDWIDTH", если абоненту выключить интернет (выполняется "table 126 delete UIP" и "table 127 delete UIP") как его включить с соответствующим текущему потреблению трафика "BANDWIDTH"?
Были мысли сделать через дополнительную таблицу, при выключении интернета заносить UIP в эту таблицу и запрещать весь трафик от этих UIP, а правила шейпирования, тоесть таблицы 126 и 127 заполнять действием "Создание пользователя". Но тогда, как я думаю, таблицы 126 и 127 при перезагрузке NAS очистятся и не заполнятся автоматически.

kudeb
Сообщения: 13
Зарегистрирован: Вс янв 30, 2011 14:17

Сообщение kudeb »

Никто с таким не сталкивался?

duzer
Сообщения: 82
Зарегистрирован: Сб ноя 04, 2006 12:50

Сообщение duzer »

Выборка абонентов раз в пять минут (ip id downloaded), сравнение с предыдущей выборкой, реакция на изменение.

Аватара пользователя
hellard
Сообщения: 52
Зарегистрирован: Вт апр 05, 2005 05:59
Откуда: Абакан
Контактная информация:

Сообщение hellard »

А реальным примером не поделитесь?

duzer
Сообщения: 82
Зарегистрирован: Сб ноя 04, 2006 12:50

Сообщение duzer »

Последний раз редактировалось duzer Пт май 20, 2011 11:36, всего редактировалось 1 раз.

duzer
Сообщения: 82
Зарегистрирован: Сб ноя 04, 2006 12:50

Сообщение duzer »

duzer писал(а):

Код: Выделить всё

SELECT inet_ntoa(4294967295 & ip_groups.ip ) , inet_ntoa(4294967295 & ip_groups.mask ), service_links.account_id, services_data.tariff_id, iptraffic_service_links.downloaded_id as isl_id
FROM ip_groups 
LEFT JOIN iptraffic_service_links ON iptraffic_service_links.ip_group_id=ip_groups.ip_group_id 
LEFT JOIN service_links ON service_links.id=iptraffic_service_links.id 
LEFT JOIN accounts ON accounts.id=service_links.account_id 
LEFT JOIN services_data ON services_data.id=service_links.service_id
where accounts.is_deleted=0  and ip_groups.is_deleted=0 and accounts.is_blocked = 0
and iptraffic_service_links.is_deleted=0 and service_links.is_deleted=0 and services_data.is_deleted=0
GROUP BY ip_groups.ip ORDER BY service_links.account_id, ip_groups.ip
далее цикл по данным и выборка количество байт

Код: Выделить всё

SELECT SUM(qnt)  FROM `downloaded`  WHERE  downloaded.downloaded_id = $isl_id AND downloaded.is_deleted = '0' 
        AND (downloaded.tclass_id = 10 or downloaded.tclass_id = 20)
Скармливаем сумму,services_data.tariff_id функции, которая возвращает № пайпа. сравнение с предыдущей выборкой, по результатам удаляем/вставляем.

Ответить