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

Чтобы унифицировать настройку шейпера была разработана схема единого пакетного настройщика шейпера shaper_start. Для настройки используется файл /etc/rc.conf (вне зависимости от ОС). В нем настраиваются:

  • Правила шейпера

  • Правила блокировок ресурсов (Netblock)

  • Правила NAT

  • Редирект при негативном депозите

  • Ограничение на количество TCP/IP сессий


shaper_start.sh программа которая управляющая фаерволом и шейпером.

Установка

Для debian 9 и выше.
В версии 0.80.22 добавлен новый shaper_start.sh и настройки происходит по новому!


Новая схема.

cp /usr/abills/misc/linux/shaper_start.sh /usr/local/sbin/shaper_start.sh
cp /usr/abills/misc/linux/iptables.service /etc/systemd/system/iptables.service

# Команды скрипта
systemctl start|restart iptables.service

Краткая шпаргалка по скриптам запуска 


Старая схема.

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=«»
abills_ip_sessions=«»лимитирование количества IP сессий для клиента
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. Перед началом проверьте установлены ли они (установка 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=""


Проверки


Просмотр правил фаервола

iptables -L -v


Просмотр правил NAT


iptables -L -t nat -v