Массовый шейпинг для FreeBSD+ipfw+dummynet. Версия от 30.01.2010. Автор: ilya.evseev@gmail.com Сайт: http://sources.homelink.ru/ Лицензия: BSD Предупреждение: исходные тексты являются сложной компиляцией из того, что используется в действительности, поэтому в них могут содержаться ошибки! ======================================================================== Возможности: 1) производительность (благодаря "ipfw pipe tablearg"), 2) адаптивное понижение скорости в зависимости от объёма трафика, 3) раздельные лимиты на входящие/исходящие объём трафика и скорость, 4) учёт времени суток (средствами вызывающего сценария), 5) поддержка услуги "Форсаж", 6) простое приспособление к произвольному биллингу. ======================================================================== Принцип работы: 1) shapers_calculate запускается на сервере с биллингом (необязательно FreeBSD) и читает данные из sql-базы биллинга (список пользователей и объём потреблённого ими трафика), а также из своего текстового списка (номера тарифов и скорости на них). 2) на основе этих данных shapers_calculate заполняет собственную sql-таблицу с индивидуальными скоростями для каждого пользователя. 3) shapers_generator запускается на каждом FreeBSD-шлюзе, читает эту sql-таблицу и создаёт правила для ipfw+dummynet. ======================================================================== Порядок установки и запуска: 1) устанавливаются Perl-модули DBI, DBD::mysql50, Config::General 2) редактируется файл options 3) создаются дополнительные sql-таблицы (см. файл .sql) 4) редактируются правила в shapers_calculate 5) после запуска shapers_calculate SQL-таблицы заполняются данными 6) запускается shapers_generate > shapers_apply 7) полученный shapers_apply содержит shell-сценарий настройки dummynet, его вызов можно вставить в /etc/rc.local 8) для запуска шагов 5,6,7 через cron можно использовать run_it_all ======================================================================== Формат строк в shapers_calculate: id-тарифа базовая-входящая-скорость-в-килобитах[:базовая-исходящая] [ограничения...] Формат ограничений: количество-входящих-мегабайт[:количество-исходящих] новая-входящая-скорость[:новая-исходящая] Скорость: количество-килобит-в-секунду или -1, т.е. отсутствие ограничения. Если исходящая скорость не указана, она делается вдвое больше исходящей. Ограничение срабатывает, если превышен любой из двух порогов, входящий или исходящий. Если один из порогов задан как "-", он не проверяется. Если исходящий порог не указан, он не проверяется. ======================================================================== Базовый shapers_calculate.core для простоты понимания расчитан на UTM4. Для UTM5 надо заменить кусок чтения пользователей и трафика на тот, который находится в core5.pl, и разобраться, где у пользователей в базе хранится время начала учётного периода. >:-E Таблица fullspeed необходима для поддержки услуги "Форсаж", она же "Турбо" и "Дозаправка". Создавать в ней записи (все не-null-поля) должен движок личного кабинета. Усё! :-)