=====Linux shaper (Управление скоростью)===== В данном разделе описывается основная концепция управления трафика в Linux Чтобы унифицировать настройку шейпера была разаработана схема единого пакетного настройщика шейпера **shaper_start**. Для настройки используется файл /etc/rc.conf (внезависимости от ОС). В нем настраиваются: * Правила шейпера * Правила блокировок ресурсов (Netblock) * Правила NAT * Редирект при негативном депозите * Ограничение на количество TCP/IP сессий \\ **shaper_start.sh** программа которая управляющая фаерволом и шейпером **Установка**\\ cp /usr/abills/misc/linux/shaper_start.sh /etc/init.d update-rc.d shaper_start.sh defaults **аргументы программы **\\ |start | включить шейпер | |stop | Отключить шейпер | |status | Посмотреть поднятые правила | |test | Включить шейпер на 10 минут. Сделано с целью тестирования и предотвращения блокировки сервера | **Настройка** \\ **Список /etc/rc.conf параметров для shaper_start.sh** ^abills_firewall="YES" | Включить пред настроенные правила фаервола для Linux | ^abills_shaper_enable="YES" | Включить шейпер | ^abills_shaper_if="eth0" | интерфейс шейпера (по умолчанию ng* ) | ^abills_nas_id="" | ID сервера доступа (по умолчанию 1 ) ^abills_ip_sessions="" | лимитирование количества IP сеcсий для клиента | ^abills_nat="EXTERNAL_IP:INTERNAL_IPS INTERNAL_IPS2:NAT_IF;" | Включение NAT \\ \\ EXTERNAL_IP - IP адрес интерфейса смотрящего в интернет. Если параметр не указан система автоматически первый адрес с интерфейса маршрутизации по умолчанию \\ INTERNAL_IPS - Пул адресов которым разрешён доступ в интернет \\ INTERNAL_IPS2 - Второй пул адресов которым разрешён доступ в интернет \\ NAT_IF - имя интерфейса смотрящего в интернет. \\ Если параметр не указан система автоматически определяет интерфейс маршрутизации по умолчанию . \\ Если нужно указать несколько внешних IP, определяются полностью сети и указываются через точку с запятой (;) | ^abills_dhcp_shaper="" | Включить IPoE шейпер. Тольк если у ВАс установлен модуль FreeRADIUS DHCP | ^abills_neg_deposit="" | Включение пере направления на портал при израсходовано депозите | ^abills_portal_ip="me" | IP адрес портала. По умолчанию me | ^abills_mikrotik_shaper="" | поднятие правил шейпера на Mikrotik серверах доступа, аргумент номера серверов доступа | ^abills_ipn_nas_id="1" | Номер IPN сервера доступа | ^abills_ipn_if="" | Интерфейс для IPN шейпера | ^abills_ipn_allow_ip="" | список адресов разрешенных без авторизации | ^abills_squid_redirect="YES" | Включение перенаправления на прокси сервер все трафика в 40 таблице. \\ Для работы с перенаправления пользователей нужно указать в фильтре тарифного плана или в фильтре учётной записи занесение IP в 40 таблицу. \\ **настройка squid версии 2.6 и выше:** \\ squid.conf \\ http_port 192.168.0.1:3128 transparent | после добавления правил достаточно рестартануть службу /etc/init.d/shaper_start.sh restart ====Дополнительные правила ==== **abills_iptables_custom="/etc/fw.conf" ** При включении данной опции система добавляет правила из указанного файла в iptables. Данная опция обрабатывается после выполнения всех предыдущих команд. Файл загружается программой iptables-restore. \\ **Форма** \\ -A LOGNDROP -p icmp -m limit --limit 5/min -j LOG --log-prefix "Denied ICMP: " --log-level 7 COMMIT =====Shapper и классы трафика===== Разделение трафика на мир и пиринг (UA-IX).\\ Для разделения и нарезки скорости будет использоваться iptables, ipset, tc. Перед началом проверте установлены ли они ([[#ustanovka_ipset|установка ipset]]).\\ для загрузки трафика в билинг и заполнения ipset хеша используется утилита **misc/traffic_class_add.pl** (закачать её можно со страницы дополнительных утилит [[abills:docs:manual:misc_soft#traffic_class_addpl_fetcher_setej|traffic_class_add.pl]]).\\ запускаем данную утилиту для получения сетей и включения правил фаервола # /usr/abills/misc/traffic_class_add.pl tables а потом помещаем её в крон пользователя root для обновления сетей раз в день # crontab -e 1 1 * * * /usr/abills/misc/traffic_class_add.pl tables дальше шейпер запускается стандартным способом:\\ ====для pppd==== **/etc/ppp/ip-up.local**\\ AWK=/usr/bin/awk; TC=/sbin/tc IFNAME=$1 if [ -f /var/run/radattr.${IFNAME} ]; then USER_NAME=`${AWK} '/User-Name/ {print $2}' /var/run/radattr.${IFNAME}` /usr/abills/libexec/linkupdown pppd up ${IFNAME} ${USER_NAME} $4 LINUX_NEW_MODEL=1 fi; **/etc/ppp/ip-down.local**\\ AWK=/usr/bin/awk; TC=/sbin/tc IFNAME=$1 if [ -f /var/run/radattr.${IFNAME} ]; then USER_NAME=`${AWK} '/User-Name/ {print $2}' /var/run/radattr.${IFNAME}` /usr/abills/libexec/linkupdown pppd down ${IFNAME} ${USER_NAME} $4 LINUX_NEW_MODEL=1 fi; ====для IPN==== Прописываем правила настройки для шейпера /etc/rc.conf abills_shaper_enable="YES" abills_ipn_if="eth2,eth3" #интерфейсы для подключения абонентов запускаем инициализацию шейпера /etc/init.d/shaper_start.sh start старт правил шейпера для абонента из консоли /usr/abills/libexec/linkupdown up getif test 10.101.1.1 LINUX_NEW_MODEL=1 или прописать в системе **abills/libexec/config.pl** $conf{IPN_FW_START_RULE}='/usr/bin/sudo /usr/abills/libexec/linkupdown up getif %LOGIN %IP'. ' > /dev/null 2>&1'; $conf{IPN_FW_STOP_RULE}='/usr/bin/sudo /usr/abills/libexec/linkupdown down getif %LOGIN %IP'. ' > /dev/null 2>&1'; Проверка установленной скорости /usr/abills/libexec/billd checkspeed SHOW_SPEED=1 NAS_IDS=1 ====Установка ipset==== **Ubuntu** sudo apt-get install ipset **Debian**\\ aptitude install xtables-addons-source xtables-addons-common m-a -v -t auto-install xtables-addons ====Shaper NEW==== **Ubuntu** sudo apt-get install ipset **Debian**\\ aptitude install xtables-addons-source xtables-addons-common m-a -v -t auto-install xtables-addons **config.pl** $conf{IPN_FW_START_RULE}='SUDO=/usr/bin/sudo; LINKUPDOWN=/usr/abills/libexec/linkupdown; IPSET=ipset; CMD="${SUDO} ${IPSET} -A allowip %IP ; ${SUDO} ${LINKUPDOWN} ipn up getif %LOGIN %IP LINUX_IPN2 > /dev/null 2>&1;"; if [ "%MASK" != "32" ]; then CMD="${SUDO} ${IPSET} -A allownet %IP/%MASK ; ${SUDO} ${LINKUPDOWN} ipn up getif %LOGIN %IP LINUX_IPN2 > /dev/null 2>&1;"; fi; if [ "${GUEST}" = "1" ]; then CMD="${SUDO} ipset -D unknown_clients %IP > /dev/null 2>&1;;"; fi; if [ "${UNKNOWN_CLIENT}" = "1" ]; then CMD="${SUDO} ipset -A unknown_clients %IP;"; fi; eval "${CMD}"'; $conf{IPN_FW_STOP_RULE}='SUDO=/usr/bin/sudo; LINKUPDOWN=/usr/abills/libexec/linkupdown; IPSET=ipset; CMD="${SUDO} ${IPSET} -D allowip %IP; ${SUDO} ${LINKUPDOWN} ipn down getif %LOGIN %IP LINUX_IPN2 > /dev/null 2>&1;"; if [ "%MASK" != "32" ]; then CMD="${SUDO} ${IPSET} -D allownet %IP/%MASK ; ${SUDO} ${LINKUPDOWN} ipn down getif %LOGIN %IP LINUX_IPN2 > /dev/null 2>&1"; fi; eval "${CMD}"'; **Копируем shaper_start.sh** cp /usr/abills/misc/linux/shaper_start.sh /etc/init.d/ **Добавляем в автозагрузку** update-rc.d shaper_start.sh start 99 2 3 4 5 . stop 01 0 1 6 . **Создаём и правим rc.conf** touch /etc/rc.conf nano /etc/rc.conf вставляем #####Включить фаервол "YES" или "NO" ##### abills_firewall="YES" #####Включить старый шейпер "YES" или "NO" ##### abills_shaper_enable="NO" #####Включить новый шейпер "YES" или "NO" ##### abills_shaper2_enable="YES" #####Указать номера нас серверов модуля IPN разделитель ","##### abills_ipn_nas_id="" #####Включить NAT "Внешний_IP:подсеть;Внешний_IP:подсеть;"##### abills_nat="" #####Втлючть FORWARD на определённую подсеть разделитель ";"##### abills_ipn_allow_ip="" #####Пул перенаправления на страницу заглушку разделитель ";"##### abills_redirect_clients_pool="" #####Внутренний интерфейс (нужен для нового шейпера)##### #####Пример "vlan2,vlan10,vlan20-30,vlan40"##### abills_ipn_if="" #####Указать ID IPoE NAS серверов##### #####Пример "10-20,31,26-44"##### abills_dhcp_shaper="YES" #####Указать IPoE NAS серверов "nas_id;nas_id;nas_id" ##### abills_dhcp_shaper_nas_ids="" #####Указать подсети IPoE серверов доступа разделитель ";"##### abills_allow_dhcp_port_67="" #####Ожидать загрузку сервера с базой "YES" или "NO" ##### abills_mysql_server_status="NO" #####Указать адрес сервера mysql##### abills_mysql_server="" #####Привязать серевые перывания интерфейсы к ядрам "YES" или "NO" ##### abills_irq2smp="" #####Указать внутриниие интерфейсы##### #####Пример "vlan2,vlan10,vlan20-30,vlan40"##### #abills_unnumbered_iface="" ====Shaper IPMARK==== Установка IPMARK: apt-get install xtables-addons-dkms apt-get install ipset cd /usr/src wget http://mirror.yandex.ru/ubuntu/pool/universe/x/xtables-addons/xtables-addons_2.3.orig.tar.xz tar zxvf xtables-addons_2.3.orig.tar.xz cd xtables-addons-2.3/ ./configure make make install **Создаём и правим rc.conf** touch /etc/rc.conf nano /etc/rc.conf вставляем #####Включить фаервол "YES" или "NO" ##### abills_firewall="YES" #####Включить старый шейпер "YES" или "NO" ##### abills_shaper_enable="NO" #####Включить шейпер IPMARK"YES" или "NO" ##### abills_shaper3_enable="YES" #####Указать номера нас серверов модуля IPN разделитель ","##### abills_ipn_nas_id="" #####Включить NAT "Внешний_IP:подсеть;Внешний_IP:подсеть;"##### abills_nat="" #####Втлючть FORWARD на определённую подсеть разделитель ";"##### abills_ipn_allow_ip="" #####Пул перенаправления на страницу заглушку разделитель ";"##### abills_redirect_clients_pool="" #####Внутренний IP (нужен для нового шейпера) разделитель ","##### abills_ipn_if="" #####Включить IPoE шейпер "YES" или "NO" ##### abills_dhcp_shaper="YES" #####Указать IPoE NAS серверов "nas_id;nas_id;nas_id" ##### abills_dhcp_shaper_nas_ids="" #####Указать подсети IPoE серверов доступа разделитель ";"##### abills_allow_dhcp_port_67="" #####Ожидать загрузку сервера с базой "YES" или "NO" ##### abills_mysql_server_status="NO" #####Указать адрес сервера mysql##### abills_mysql_server="" #####Привязать серевые перывания интерфейсы к ядрам "YES" или "NO" ##### abills_irq2smp=""