=====FreeBSD ng_car шейпер===== ng_car является частью netgraph и используется для ограничения трафика на интерфейсах, представляет из себя модуль ядра системы. ng_car можно использовать как на физических интерфейсах, так и на виртуальных интерфейсах и интерфейсах MPD. Разграничения скорости трафика по сетям и Ip адресам, можно использовать ng_car совместно с ng_bpf. Для ограничения пропускной способности интерфейса потребуется собрать ядро с поддержкой netgraph. В файле конфигурации ядра убираем комментарий со строк: options NETGRAPH options NETGRAPH_ETHER и пересобираем ядро. Описание принципов работы шейпера FreeBSD + ng_car Для работы нужно указать в конфигурационном файле **config.pl** $conf{ng_car}=1; |$conf{ng_car_prefix}=10000;| Префикс для для добавления в номеру входящего правила | 1. Поднятия правил ipfw заворота в ng_car шейпер осуществляется скриптом misc/ipfw/shaper_start.sh \\ # cp /abills/misc/ipfw/shaper_start.sh /usr/local/etc/rc.d/ **/etc/rc.conf** abills_shaper_enable="YES" abills_nas_id="1" abills_shaper_if="" # По умолчанию ng Пример поднятых правил: # перекинуть трафик в правила заворота в ng_car 09020 7 363 skipto 10120 ip from table(12) to table(2) in recv ng* 09025 1 214 skipto 10125 ip from table(2) to table(13) out xmit ng* 09030 0 0 skipto 10130 ip from table(14) to table(3) in recv ng* 09035 0 0 skipto 10135 ip from table(3) to table(15) out xmit ng* # Заворот глобального для прописанных пользователей в таблице 10 в ng_car 10000 1720 106227 netgraph tablearg ip from table(10) to any in recv ng* 10010 2863 3965522 netgraph tablearg ip from any to table(11) out xmit ng* # Весь остальной трафик пропускать 10015 0 0 allow ip from any to any via ng* #Локальный заворот в ng_car 10120 7 363 netgraph tablearg ip from table(12) to any in recv ng* 10125 1 214 netgraph tablearg ip from any to table(13) out xmit ng* 10130 0 0 netgraph tablearg ip from table(14) to any in recv ng* 10135 0 0 netgraph tablearg ip from any to table(15) out xmit ng Описание таблиц: ^ 2 | Список сетей для локального класса трафика с номером 2. Номера формируются соответственно с номером класса трафика в журнале классов трафика. | ^ 10 | список пользователей которые попадают в правила шейпера для исходящего глобального трафика | ^ 11 | список пользователей которые попадают в правила шейпера для входящего глобального трафика | ^ 12 | список пользователей которые попадают в правила шейпера для исходящего локального трафика с номером класса 2. Номера формируются соответственно номер класса трафика + 10. | ^ 13 | список пользователей которые попадают в правила шейпера для входящего локального трафика с номером класса 2. Номера формируются соответственно номер класса трафика + 10 + 1. | ^ 3 | Список сетей для локального класса трафика с номером 3. Номера формируются соответственно с номером класса трафика в журнале классов трафика. | ^ 14,15 | Соответственно класс 3 трафика | Для поднятия шейпера используется программа linkupdown. Программа прописывает пользователей в таблицы ipfw и присваивает им скорость. Для проверки правил которые она выполняет нужно указать последним параметром параметр debug.\\ **Например:** abills/libexec/linkupdown up ng0 test 10.11.11.11 debug **Внимание!!! При использовании ng_car шейпера можно использовать одновременно только одну активную сессию для учётной записи** ====Проверка установленного шейпера==== Для проверки назначено скорости и её изменения используется программа:\\ * Проверка установленной скорости и изменение для активных абонентов /usr/abills/libexec/billd checkspeed NAS_IDS=10 * Просмотр установленной скорости /usr/abills/libexec/billd checkspeed NAS_IDS=10 SHOW_SPEED=1 **Также можно просмотреть установлен ли шейпер на абонента следующим способом ** * Найти IP адрес абонента в 10 таблице фаервола # ipfw table 10 list | grep [IP адрес пользователя] * Установлен ли шейпер ng_car # ngctl list | grep [логин абонента] * Подняты ли правила заворота абонента в ng_car # ipfw show | grep netg Все эти команды должны возвращать строки с параметрами если не возвращают значит шейпер не присвоился абоненту \\ ====Опитимизация системы==== **/etc/sysctl.conf** kern.ipc.maxsockbuf=8388608 net.graph.recvspace=256000 # TCP bufer size net.inet.tcp.recvspace=65535 # incoming TCP queue size kern.ipc.somaxconn=1024 # incoming packets queue size net.inet.ip.intr_queue_maxlen=2000