Table of Contents |
---|
В данном разделе описывается основная концепция управления трафика в Linux.
Чтобы унифицировать настройку шейпера была разработана схема единого пакетного настройщика шейпера shaper_start. Для настройки используется файл /etc/rc.conf (вне зависимости от ОС). В нем настраиваются:
Правила шейпера
Правила блокировок ресурсов (Netblock)
Правила NAT
Редирект при негативном депозите
Ограничение на количество TCP/IP сессий
shaper_start.sh программа которая управляющая фаерволом и шейпером.
Установка
Warning |
---|
Для debian 9 и выше. |
Новая схема.
Code Block |
---|
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 |
Краткая шпаргалка по скриптам запуска
Старая схема.
Code Block | ||
---|---|---|
| ||
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 |
После добавления правил достаточно рестартануть службу.
Code Block | ||
---|---|---|
| ||
/etc/init.d/shaper_start.sh restart |
Дополнительные правила
abills_iptables_custom=«/etc/fw.conf»
При включении данной опции система добавляет правила из указанного файла в iptables. Данная опция обрабатывается после выполнения всех предыдущих команд. Файл загружается программой iptables-restore.
Форма
Code Block | ||
---|---|---|
| ||
-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).
Запускаем данную утилиту для получения сетей и включения правил фаервола.
Code Block | ||
---|---|---|
| ||
/usr/abills/misc/traffic_class_add.pl tables |
а потом помещаем её в крон пользователя root для обновления сетей раз в день
Code Block | ||
---|---|---|
| ||
crontab -e 1 1 * * * /usr/abills/misc/traffic_class_add.pl tables |
дальше шейпер запускается стандартным способом:
для pppd
/etc/ppp/ip-up.local
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
abills_shaper_enable="YES" abills_ipn_if="eth2,eth3" #интерфейсы для подключения абонентов |
запускаем инициализацию шейпера
Code Block | ||
---|---|---|
| ||
/etc/init.d/shaper_start.sh start |
старт правил шейпера для абонента из консоли
Code Block | ||
---|---|---|
| ||
/usr/abills/libexec/linkupdown up getif test 10.101.1.1 LINUX_NEW_MODEL=1 |
или прописать в системе abills/libexec/config.pl
Code Block | ||
---|---|---|
| ||
$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'; |
Проверка установленной скорости
Code Block | ||
---|---|---|
| ||
/usr/abills/libexec/billd checkspeed SHOW_SPEED=1 NAS_IDS=1 |
Установка ipset
Ubuntu
Code Block | ||
---|---|---|
| ||
sudo apt-get install ipset |
Debian
Code Block | ||
---|---|---|
| ||
aptitude install xtables-addons-source xtables-addons-common m-a -v -t auto-install xtables-addons |
Shaper NEW
Ubuntu
Code Block | ||
---|---|---|
| ||
sudo apt-get install ipset |
Debian
Code Block | ||
---|---|---|
| ||
aptitude install xtables-addons-source xtables-addons-common m-a -v -t auto-install xtables-addons |
config.pl
Code Block | ||
---|---|---|
| ||
$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}"'; |
Code Block | ||
---|---|---|
| ||
$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
Code Block | ||
---|---|---|
| ||
cp /usr/abills/misc/linux/shaper_start.sh /etc/init.d/ |
Добавляем в автозагрузку
Code Block | ||
---|---|---|
| ||
update-rc.d shaper_start.sh start 99 2 3 4 5 . stop 01 0 1 6 . |
Создаём и правим rc.conf
Code Block | ||
---|---|---|
| ||
touch /etc/rc.conf nano /etc/rc.conf |
вставляем
Code Block | ||
---|---|---|
| ||
#####Включить фаервол "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:
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
touch /etc/rc.conf nano /etc/rc.conf |
вставляем
Code Block | ||
---|---|---|
| ||
#####Включить фаервол "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="" |
Проверки
Просмотр правил фаервола
Code Block |
---|
iptables -L -v |
Просмотр правил NAT
Code Block |
---|
iptables -L -t nat -v |