Добрый день.
Помогите разобраться.
Версия: 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 очистятся и не заполнятся автоматически.
Динамическое шейпирование и таблицы ipfw
Последний раз редактировалось duzer Пт май 20, 2011 11:36, всего редактировалось 1 раз.
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
Скармливаем сумму,services_data.tariff_id функции, которая возвращает № пайпа. сравнение с предыдущей выборкой, по результатам удаляем/вставляем.Код: Выделить всё
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)