====== Создание HTB, TBF полисера через файл с разметкой ====== {{indexmenu_n>2}} Профиль полисинга (тарифный план) описывается текстовым файлом с расширением ''.cfg''. В файле задаются ограничения полосы для каждого из 8 классов трафика. Тот же профиль можно задать [[dpi:dpi_options:opt_bandwidth_mgmt:bandwidth_json|в формате JSON]]. Как назначить профиль абоненту и чем именованный профиль отличается от анонимного, описано в разделе [[dpi:dpi_components:platform:subscriber_management:policing_mng|]]. ===== Формат файла ===== Каждая строка задаёт ограничение для одного класса трафика в одном направлении. Строка, начинающаяся с ''#'', считается комментарием. ^ Ключ ^ Направление ^ Назначение ^ | ''tbf_inbound_class0'' … ''tbf_inbound_class7'' | Входящий (к абоненту) | Ограничение класса для TBF | | ''tbf_class0'' … ''tbf_class7'' | Исходящий (от абонента) | Ограничение класса для TBF | | ''htb_inbound_root'' | Входящий (к абоненту) | Общая полоса тарифа для HTB | | ''htb_root'' | Исходящий (от абонента) | Общая полоса тарифа для HTB | | ''htb_inbound_class0'' … ''htb_inbound_class7'' | Входящий (к абоненту) | Полоса класса для HTB | | ''htb_class0'' … ''htb_class7'' | Исходящий (от абонента) | Полоса класса для HTB | Параметры в значении ключа: ^ Параметр ^ Механизм ^ Описание ^ | ''rate'' | TBF, HTB | Для TBF — ограничение полосы класса. Для HTB — гарантированная (минимальная) полоса класса, а для root — общая полоса тарифа | | ''ceil'' | HTB | Максимальная полоса, которую класс может занять, заимствуя свободную полосу корневого класса | | ''burst'', ''cburst'' | TBF, HTB | Необязательные. Размер всплеска для ''rate'' и ''ceil'' | | ''peakrate'' | TBF | Необязательный. Пиковая скорость | | ''static'' | HTB | Выводит класс из иерархии: ограничение ''rate'' действует независимо, без привязки к root | Номер класса (''class0'' … ''class7'') соответствует классу трафика ''cs0'' … ''cs7''. По умолчанию класс cs0 имеет наивысший приоритет, cs7 — наименьший. Протоколы и направления распределяются по классам глобальной разметкой [[dpi:dpi_options:opt_priority|]] или индивидуальной разметкой по протоколам (18 услуга): [[dpi:dpi_options:opt_shaping:shaping_session|]]. ===== Полисер TBF ===== TBF ограничивает каждый класс трафика независимо. Если ограничение для класса не указано, полоса для него не ограничена. TBF не ограничивает суммарную полосу абонента: если задать ''rate 20mbit'' для всех 8 классов, абонент в сумме может получить больше 20 Мбит/с. Для тарифа с общей полосой используйте HTB. ==== Пример: ограничение торрентов 3 Мбит/с ==== Торренты выделены в класс cs7 (разметка — как в примере для HTB ниже). Остальной трафик не ограничивается. # Входящий трафик (к абоненту) tbf_inbound_class7=rate 3mbit # Исходящий трафик (от абонента) tbf_class7=rate 3mbit ===== Полисер HTB ===== HTB реализует иерархический QoS: задаётся общая полоса тарифа (root), которая распределяется между классами трафика. Класс получает гарантированную полосу ''rate'' и может заимствовать свободную полосу до ''ceil''. * Необходимо описать **все** 8 классов, даже неиспользуемые. * Сумма ''rate'' по классам должна быть меньше ''rate'' корневого класса. ==== Пример 1: тариф 10 Мбит/с с ограничением торрентов ==== Тариф с общей полосой 10 Мбит/с, в котором торренты ограничены 3 Мбит/с на скачивание и на отдачу. Сначала выделим торренты в отдельный класс трафика глобальной разметкой на DPI, как описано в разделе [[dpi:dpi_options:opt_priority:priority_config|]]: default cs0 bittorrent cs7 Здесь весь трафик разделён на 2 класса: * cs0 — DSCP=0, QoS (IPP)=0, Best Effort; * cs7 — DSCP=56, QoS (IPP)=7, Priority. Обозначения Best Effort и Priority относятся к значениям DSCP в заголовках пакетов. В полисинге СКАТ приоритеты по умолчанию обратные: cs0 — наивысший, cs7 — наименьший. Поэтому торренты в примере выделены в cs7. Создадим файл ''rateplan_1.cfg''. Торрентам (class7) гарантируем 1 Мбит/с и разрешаем занимать не больше 3 Мбит/с. Остальной трафик может занимать всю полосу тарифа. # Входящий трафик (к абоненту) htb_inbound_root=rate 10mbit htb_inbound_class0=rate 8bit ceil 10mbit htb_inbound_class1=rate 8bit ceil 10mbit htb_inbound_class2=rate 8bit ceil 10mbit htb_inbound_class3=rate 8bit ceil 10mbit htb_inbound_class4=rate 8bit ceil 10mbit htb_inbound_class5=rate 8bit ceil 10mbit htb_inbound_class6=rate 8bit ceil 10mbit htb_inbound_class7=rate 1mbit ceil 3mbit # Исходящий трафик (от абонента) htb_root=rate 10mbit htb_class0=rate 8bit ceil 10mbit htb_class1=rate 8bit ceil 10mbit htb_class2=rate 8bit ceil 10mbit htb_class3=rate 8bit ceil 10mbit htb_class4=rate 8bit ceil 10mbit htb_class5=rate 8bit ceil 10mbit htb_class6=rate 8bit ceil 10mbit htb_class7=rate 1mbit ceil 3mbit Классы 1–6 в этом примере не используются, так как разметка задаёт только cs0 и cs7, но описать их всё равно необходимо. Позже их можно задействовать, изменив разметку на DPI, без изменения профиля. ==== Пример 2: независимая скорость для пиринга, CDN и кеш-серверов ==== Локальный трафик (пиринг, CDN, кеш-серверы) выделяется в отдельный класс разметкой по направлению для всей платформы DPI: [[dpi:dpi_options:opt_priority:priority_config_as|]]. Если для класса указать ключевое слово ''static'', он выводится из иерархии HTB и его ограничение действует независимо от общей полосы тарифа. В примере тариф 10 Мбит/с, а трафик класса cs6 ограничен отдельно 100 Мбит/с: # Входящий трафик (к абоненту) htb_inbound_root=rate 10mbit htb_inbound_class0=rate 8bit ceil 10mbit htb_inbound_class1=rate 8bit ceil 10mbit htb_inbound_class2=rate 8bit ceil 10mbit htb_inbound_class3=rate 8bit ceil 10mbit htb_inbound_class4=rate 8bit ceil 10mbit htb_inbound_class5=rate 8bit ceil 10mbit htb_inbound_class6=rate 100mbit static htb_inbound_class7=rate 8bit ceil 10mbit # Исходящий трафик (от абонента) htb_root=rate 10mbit htb_class0=rate 8bit ceil 10mbit htb_class1=rate 8bit ceil 10mbit htb_class2=rate 8bit ceil 10mbit htb_class3=rate 8bit ceil 10mbit htb_class4=rate 8bit ceil 10mbit htb_class5=rate 8bit ceil 10mbit htb_class6=rate 100mbit static htb_class7=rate 8bit ceil 10mbit Для продвинутых пользователей: для HTB можно включить механизм обратной связи, при котором исходящая полоса абонента автоматически сокращается при росте входящего трафика. Описание — в разделе [[dpi:dpi_options:opt_bandwidth_mgmt:bandwidth_conf:bandwidth_incoming|]]. ===== Назначение профиля ===== На один IP-адрес: fdpi_ctrl load --policing rateplan_1.cfg --ip 10.10.10.10 На login. Если адрес абонента выдаётся динамически, профиль назначается на login, а IP связывается с ним отдельной командой: fdpi_ctrl load --bind --user DEMO:10.10.10.10 fdpi_ctrl load --policing rateplan_1.cfg --login DEMO На абонента с несколькими IP (например, корпоративный клиент или Dual Stack IPv4/IPv6). При связке ''bind_multi'' все адреса login считаются одним абонентом и делят полосу тарифа: fdpi_ctrl load --bind_multi --user CORP:10.10.20.0/30 fdpi_ctrl load --bind_multi --user CORP:2001:db8:2000:1200::/64 fdpi_ctrl load --policing rateplan_1.cfg --login CORP Подробнее: * назначение на список IP и диапазон CIDR, создание именованных профилей — [[dpi:dpi_components:platform:subscriber_management:policing_mng|]]; * связки ''bind'' и ''bind_multi'' — [[dpi:dpi_components:platform:subscriber_management:dpi_dynamicip|]]. Профиль полисинга (тарифный план) описывается текстовым файлом с расширением ''.cfg''. В файле задаются ограничения полосы для каждого из 8 классов трафика. Тот же профиль можно задать [[dpi:dpi_options:opt_bandwidth_mgmt:bandwidth_json|в формате JSON]]. Как назначить профиль абоненту и чем именованный профиль отличается от анонимного, описано в разделе [[dpi:dpi_components:platform:subscriber_management:policing_mng|]]. ===== Формат файла ===== Каждая строка задаёт ограничение для одного класса трафика в одном направлении. Строка, начинающаяся с ''#'', считается комментарием. ^ Ключ ^ Направление ^ Назначение ^ | ''tbf_inbound_class0'' … ''tbf_inbound_class7'' | Входящий (к абоненту) | Ограничение класса для TBF | | ''tbf_class0'' … ''tbf_class7'' | Исходящий (от абонента) | Ограничение класса для TBF | | ''htb_inbound_root'' | Входящий (к абоненту) | Общая полоса тарифа для HTB | | ''htb_root'' | Исходящий (от абонента) | Общая полоса тарифа для HTB | | ''htb_inbound_class0'' … ''htb_inbound_class7'' | Входящий (к абоненту) | Полоса класса для HTB | | ''htb_class0'' … ''htb_class7'' | Исходящий (от абонента) | Полоса класса для HTB | Параметры в значении ключа: ^ Параметр ^ Механизм ^ Описание ^ | ''rate'' | TBF, HTB | Для TBF — ограничение полосы класса. Для HTB — гарантированная (минимальная) полоса класса, а для root — общая полоса тарифа | | ''ceil'' | HTB | Максимальная полоса, которую класс может занять, заимствуя свободную полосу корневого класса | | ''burst'', ''cburst'' | TBF, HTB | Необязательные. Размер всплеска для ''rate'' и ''ceil'' | | ''peakrate'' | TBF | Необязательный. Пиковая скорость | | ''static'' | HTB | Выводит класс из иерархии: ограничение ''rate'' действует независимо, без привязки к root | Номер класса (''class0'' … ''class7'') соответствует классу трафика ''cs0'' … ''cs7''. Протоколы и направления распределяются по классам глобальной разметкой [[dpi:dpi_options:opt_priority|]] или индивидуальной разметкой по протоколам (18 услуга): [[dpi:dpi_options:opt_shaping:shaping_session|]]. ===== Полисер TBF ===== TBF ограничивает каждый класс трафика независимо. Если ограничение для класса не указано, полоса для него не ограничена. TBF не ограничивает суммарную полосу абонента: если задать ''rate 20mbit'' для всех 8 классов, абонент в сумме может получить больше 20 Мбит/с. Для тарифа с общей полосой используйте HTB. ==== Пример: ограничение торрентов 3 Мбит/с ==== Торренты выделены в класс cs7 (разметка — как в примере для HTB ниже). Остальной трафик не ограничивается. # Входящий трафик (к абоненту) tbf_inbound_class7=rate 3mbit # Исходящий трафик (от абонента) tbf_class7=rate 3mbit ===== Полисер HTB ===== HTB реализует иерархический QoS: задаётся общая полоса тарифа (root), которая распределяется между классами трафика. Класс получает гарантированную полосу ''rate'' и может заимствовать свободную полосу до ''ceil''. * Необходимо описать **все** 8 классов, даже неиспользуемые. * Сумма ''rate'' по классам должна быть меньше ''rate'' корневого класса. ==== Пример 1: тариф 10 Мбит/с с ограничением торрентов ==== Тариф с общей полосой 10 Мбит/с, в котором торренты ограничены 3 Мбит/с на скачивание и на отдачу. Сначала выделим торренты в отдельный класс трафика глобальной разметкой на DPI, как описано в разделе [[dpi:dpi_options:opt_priority:priority_config|]]: default cs0 bittorrent cs7 Здесь весь трафик разделён на 2 класса: * cs0 — DSCP=0, QoS (IPP)=0, Best Effort; * cs7 — DSCP=56, QoS (IPP)=7, Priority. Создадим файл ''rateplan_1.cfg''. Торрентам (class7) гарантируем 1 Мбит/с и разрешаем занимать не больше 3 Мбит/с. Остальной трафик может занимать всю полосу тарифа. # Входящий трафик (к абоненту) htb_inbound_root=rate 10mbit htb_inbound_class0=rate 8bit ceil 10mbit htb_inbound_class1=rate 8bit ceil 10mbit htb_inbound_class2=rate 8bit ceil 10mbit htb_inbound_class3=rate 8bit ceil 10mbit htb_inbound_class4=rate 8bit ceil 10mbit htb_inbound_class5=rate 8bit ceil 10mbit htb_inbound_class6=rate 8bit ceil 10mbit htb_inbound_class7=rate 1mbit ceil 3mbit # Исходящий трафик (от абонента) htb_root=rate 10mbit htb_class0=rate 8bit ceil 10mbit htb_class1=rate 8bit ceil 10mbit htb_class2=rate 8bit ceil 10mbit htb_class3=rate 8bit ceil 10mbit htb_class4=rate 8bit ceil 10mbit htb_class5=rate 8bit ceil 10mbit htb_class6=rate 8bit ceil 10mbit htb_class7=rate 1mbit ceil 3mbit Классы 1–6 в этом примере не используются, так как разметка задаёт только cs0 и cs7, но описать их всё равно необходимо. Позже их можно задействовать, изменив разметку на DPI, без изменения профиля. ==== Пример 2: независимая скорость для пиринга, CDN и кеш-серверов ==== Локальный трафик (пиринг, CDN, кеш-серверы) выделяется в отдельный класс разметкой по направлению для всей платформы DPI: [[dpi:dpi_options:opt_priority:priority_config_as|]]. Если для класса указать ключевое слово ''static'', он выводится из иерархии HTB и его ограничение действует независимо от общей полосы тарифа. В примере тариф 10 Мбит/с, а трафик класса cs6 ограничен отдельно 100 Мбит/с: # Входящий трафик (к абоненту) htb_inbound_root=rate 10mbit htb_inbound_class0=rate 8bit ceil 10mbit htb_inbound_class1=rate 8bit ceil 10mbit htb_inbound_class2=rate 8bit ceil 10mbit htb_inbound_class3=rate 8bit ceil 10mbit htb_inbound_class4=rate 8bit ceil 10mbit htb_inbound_class5=rate 8bit ceil 10mbit htb_inbound_class6=rate 100mbit static htb_inbound_class7=rate 8bit ceil 10mbit # Исходящий трафик (от абонента) htb_root=rate 10mbit htb_class0=rate 8bit ceil 10mbit htb_class1=rate 8bit ceil 10mbit htb_class2=rate 8bit ceil 10mbit htb_class3=rate 8bit ceil 10mbit htb_class4=rate 8bit ceil 10mbit htb_class5=rate 8bit ceil 10mbit htb_class6=rate 100mbit static htb_class7=rate 8bit ceil 10mbit Для продвинутых пользователей: для HTB можно включить механизм обратной связи, при котором исходящая полоса абонента автоматически сокращается при росте входящего трафика. Описание — в разделе [[dpi:dpi_options:opt_bandwidth_mgmt:bandwidth_conf:bandwidth_incoming|]]. ===== Назначение профиля ===== На один IP-адрес: fdpi_ctrl load --policing rateplan_1.cfg --ip 10.10.10.10 На login. Если адрес абонента выдаётся динамически, профиль назначается на login, а IP связывается с ним отдельной командой: fdpi_ctrl load --bind --user DEMO:10.10.10.10 fdpi_ctrl load --policing rateplan_1.cfg --login DEMO На абонента с несколькими IP (например, корпоративный клиент или Dual Stack IPv4/IPv6). При связке ''bind_multi'' все адреса login считаются одним абонентом и делят полосу тарифа: fdpi_ctrl load --bind_multi --user CORP:10.10.20.0/30 fdpi_ctrl load --bind_multi --user CORP:2001:db8:2000:1200::/64 fdpi_ctrl load --policing rateplan_1.cfg --login CORP Подробнее: * назначение на список IP и диапазон CIDR, создание именованных профилей — [[dpi:dpi_components:platform:subscriber_management:policing_mng|]]; * связки ''bind'' и ''bind_multi'' — [[dpi:dpi_components:platform:subscriber_management:dpi_dynamicip|]].