Linux shaper (Управление скоростью)

В данном разделе описывается основная концепция управления трафика в Linux


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 минут. Сделано с целью тестирования и предотвращения блокировки сервера

Настройка

Список rc.conf параметров для shaper_start.sh

abills_firewall=«YES» Включить пред настроенные правила фаервола для Linux
abills_shaper_enable=«YES» Включить шейпер
abills_shaper_if=«eth0» интерфейс шейпера (по умолчанию ng* )
abills_nas_id=«»
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 - имя интерфейса смотрящего в интернет. Если параметр не указан система автоматически определяет интерфейс маршрутизации по умолчанию
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

Дополнительные правила

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. Перед началом проверте установлены ли они (установка ipset).

для загрузки трафика в билинг и заполнения ipset хеша используется утилита misc/traffic_class_add.pl (закачать её можно со страницы дополнительных утилит 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=""