=====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=""