1. Введение
Решение СКАТ является очень мощным инструментом для операторов связи. В обзоре постараемся максимально рассмотреть возможности в связке с облачным биллингом LightBilling.
2. Концепция. Файл дампа LightBilling для СКАТ
Концепция взаимодействия биллинга и СКАТ заключается в следующем: через запланированное время (cron) происходит автоматическая загрузка архива данных об абонентах, услугах, тарифах и ip адресах. В зависимости от схемы использования, по заданному алгоритму, данные подгружаются в нужные места. Такое решение является максимально надежным. Обрыв связи не повлияет на ААА.
В примере рассматривается оборудование miniDPI с установленной операционной системой CentOS 6. Хотя мы настоятельно рекомендует использовать CentOS 7 или выше. Так же рекомендуем установить графический интерфейс управления DPI.
Для дальнейшего разбора скопируйте персональный URL СКАТ шлюз из панели управления Менеджера LightBilling. Пример шлюза:
https://api.lightbilling.cloud/skat/hd7fm230/null/
Для выгрузки определенных групп пользователей, параметр null заменяется наименованием групп через запятую. Помните, что строка должна быть закодирована в формате urlencode. Ссылка инициирует загрузку архива с полной выгрузкой данных из биллинга. Имя архива содержит md5 сумму и расширение shar, например, ab3d39620d2402471afa520ccb8cac73.shar. Таким образом можно проверить целостность файла и получить ответ были ли изменения за последнее время.
URL, может ответить следующими кодами ошибок:
- 404 – Нет доступа, временная ошибка, внутренняя ошибка;
- 204 – Нет содержимого, в биллинге отсутствует информация для выгрузки.
Файл .shar имеет классическую структуру, описанную в https://en.wikipedia.org/wiki/Shar . После запуска sh ab3d39620d2402471afa520ccb8cac73.shar архива, происходит распаковка, со следующей структурой:
- lightbilling_ip.lst – IP адреса для белого списка. Содержит в себе IP необходимые для работы модулей системы;
- lightbilling_enabled.lst – IP включенного абонента;
- lightbilling_disabled.lst – IP выключенного абонента;
- lightbilling_rate_500_500_enabled.lst – Цифры (значения как пример) в наименовании соответствуют входящей и исходящей скоростях. Список IP включенных абонентов соответствующих указанной скорости;
- lightbilling_rate_500_500_disabled.lst – Цифры (значения как пример) в наименовании соответствуют входящей и исходящей скоростях. IP адреса выключенных абонентов;
- lightbilling_tariff_7_enabled.lst – Цифра (значение как пример) в наименовании соответствует id тарифа. IP включенных абонентов;
- lightbilling_tariff_7_disabled.lst – Цифра (значение как пример) в наименовании соответствует id тарифа. IP выключенных абонентов;
- lightbilling_users.lst – База пользователей с техническими данными.
Файл users.lst, имеет более сложную структуру, а не просто список ip адресов, как в случае с остальными .lst. Давайте рассмотрим пример содержимого такого файла:
40127 4593027548 10.0.40.127 50000 50000 lightbilling_rate_50000_50000
Как видим, строка соответствует пользователю. Шесть колонок разделенных пробелами, где:
- 40127 – Логин/договор из биллинга;
- 4593027548 – Пароль;
- 10.0.40.127 – IP адрес;
- 50000 – Персональная входящая скорость, выставленная в профиле;
- 50000 – Персональная исходящая скорость, выставленная в профиле;
- lightbilling_rate_50000_50000 – Наименование персонального тарифа, соответствует создаваемому файлу .lst (см. выше). Помните про постфикс _enabled/_disabled;
- AA:BB:CC:DD:11:33 - Персональный MAC адрес. Значение 0, если отсутствует.
- 176.61.17.1 - Дополнительные IP адреса через запятую. Значение 0, если отсутствуют.
Рекомендуемое время синхронизации 5 мин. из расчета: 3 тысячи пользователей на одну единицу оборудования. Данный период считался с несколькими привязанными тарифами у пользователей и сложной конфигурацией СКАТ. При легкой схеме, только списки доступа и скорость, можно обрабатывать все практически мгновенно.
3. Подготовка
Создадим рабочий каталог для связи с биллингом:
mkdir /etc/dpi/lightbilling
Перейдем в каталог:
cd /etc/dpi/lightbilling
Создадим исполняемый скрипт:
echo > lightbilling.sh
Наполним его содержимым:
vi lightbilling.sh
Содержимое:
#!/bin/bash
cd /etc/dpi/lightbilling
mkdir tmp
cd tmp
MD5_OLD=$(md5sum *.shar | awk '{ print $1 }') #Calculate MD5 sum
rm -rf *
wget --content-disposition "https://api.lightbilling.cloud/skat/hd7fm230/null/"
#curl -o data.shar "https://api.lightbilling.cloud/skat/hd7fm230/null/"
SHAR=$(ls -t | head -1)
! [ -z $SHAR ] || exit 1 #Checking for empty SHAR
[ -f $SHAR ] || exit 1 #Checking for file existence
[ -s $SHAR ] || exit 1 #Checking for empty file content
MD5=$(md5sum $SHAR | awk '{ print $1 }') #Calculate MD5 sum
if [ "$MD5" != "${SHAR%%.*}" ]; then
echo "[log] MD5 broken"
exit 1
fi
if [ "$MD5" = "$MD5_OLD" ]; then
echo "[log] Data is actual"
exit 1
fi
echo "[log] file data lightbilling ok"
sh $SHAR
# +-----------+
# | Functions |
# +-----------+
function ip2login {
IP=$(echo $1| sed 's/\./\\./g')
echo $(grep " $IP " lightbilling_users.lst | awk '{print $1}')
}
function ip2list {
IP=$(echo $1| sed 's/\./\\./g')
echo $(grep " $IP " lightbilling_users.lst | awk '{print $6}')
}
function ip2disabled {
IP=$(echo $1| sed 's/\./\\./g')
if grep --silent "$IP\b" lightbilling_disabled.lst ; then
echo "1"
else
echo "0"
fi
}
function login2list {
echo $(grep "$1 " lightbilling_users.lst | awk '{print $6}')
}
function file_ip2login {
> ${1%%.*}.login.lst
while read i; do
IP=$i
LOGIN=$(ip2login $IP)
echo "\"$LOGIN\"" >> ${1%%.*}.login.lst
done <$1
}
###################################################
Скрипт не является какой-то стандартизированной частью LightBilling, свободно изменяется под Ваши нужны и служит как рабочий пример. Давайте разберем его действия:
- Создается временная директория /etc/dpi/lightbilling/tmp. При каждом запуске директория очищается.
- Сохраняется md5 сумма предыдущего дампа.
- Скачивается дамп архив shar из LightBilling во временную папку.
- Проверяется целостность скаченного архива, а также содержимое. Сравнивается md5 сумма старого архива (сохранили ранее) и нового. Если суммы равны или возникает ошибка, скрипт прекращает работу.
- Запускается самораспаковывающийся shar архив c извлечением содержимого во временную папку.
В скрипт встроены следующие функции для вызова:
- ip2login – преобразует ip адрес в логин/номер договора, основываясь на базе из файла lightbilling_users.lst.
- ip2list – возвращает имя тарифного листа, соответствующего персональной скорости в профиле абонента. Входная строка ip адрес. Данные берутся из файла lightbilling_users.lst.
- ip2disabled – в ответ на ip адрес, возвращает «1» если абонент выключен. В противном случае возвращает «0». Данные берутся из файла lightbilling_disabled.lst.
- login2list – преобразует логин/номер договора в имя тарифного плана, соответствующего персональной скорости в профиле абонента. Данные берутся из файла lightbilling_users.lst.
- file_ip2login – входная строка имя файла .lst. Создает .lst файл со списком логинов/номеров договора, соответствующего ip адресам входного файла. При сохранении использует стандартное имя файла с добавлением .login перед .lst. Например, lightbilling_disabled.login.lst. Внутри используется функция ip2login.
Как Вы могли заметить, очень много функций для работы на основе логина/номера договора. Архитектура СКАТ построена так, что часто использует логины в правилах. Встречается, при использовании Radius (BRAS). Немного позже в рамках данной статьи мы разберем немного примеров.
Рис.1. Персональная скорость абонента Download/Upload
Рис.2. Привязанные тарифы к пользователю с уникальными id
Ранее в тексте упоминалась персональная скорость абонента, задаваемая в профиле (Рис.1). Как правило большинство компаний оперирует ею. Персональная скорость не зависит от выбранного тарифного плана. Менеджер выставляет её вручную, после привязки тарифного плана. Несмотря на практику, это не совсем удобно. Поэтому возможно стоит рассматривать управление политикой скоростного режима, на основе того или иного привязанного тарифа (Рис. 2).
4. Простой пример СКАТ BRAS L2, без использования Radius
BRAS L2 означает, что у абонента настроен IP-адрес статично на своем устройстве. Очень частая схема PON сетей, на абонентском терминале при выдаче оборудования зашиваются настройки (ip, маска, шлюз, DNS). Оборудование является уникальным, абонент не может его поменять и вносить изменения, поэтому в каком-то смысле прохождение ААА избыточно. Несомненно, в таком выборе простота и скорость работы является большим плюсом. Если Вы используете другую схему, рассмотрите более сложный вариант или усовершенствуйте текущий.
Настройку FastDPI оставляем по умолчанию. FastPCRF и Radius не участвуют. Трафик пропускаем насквозь, NAT и маршрутизацию отводим на следующую железку. Для DPI, назначаем следующие роли:
- Policing (полоса пропускания);
- Captive portal (переадресация отключенных за не уплату);
- DPI (списки РКН).
Рис.3. id тарифных планов
Смотрим в LightBilling идентификаторы тарифных планов (Рис.3), для них будем создавать политики. На данном СКАТ будут использоваться два тарифных плана «Безлимитный 50Мб» и «Безлимитный 100Мб», соответственно id 30 и 102 (Рис.3).
Создадим папку для политик:
mkdir /etc/dpi/lightbilling/policing
Перейдем в каталог:
cd /etc/dpi/lightbilling/policing
Создаем политику для «Безлимитный 50Мб»:
echo > rate_50M.cfg
Наполним созданный файл содержимым:
vi rate_50M.cfg
Содержимое:
htb_inbound_root=rate 50mbit
htb_inbound_class0=rate 10mbit ceil 50mbit
htb_inbound_class1=rate 10mbit ceil 50mbit
htb_inbound_class2=rate 8bit ceil 50mbit
htb_inbound_class3=rate 8bit ceil 50mbit
htb_inbound_class4=rate 8bit ceil 50mbit
htb_inbound_class5=rate 8bit ceil 50mbit
htb_inbound_class6=rate 8bit ceil 50mbit
htb_inbound_class7=rate 8bit ceil 50mbit
htb_root=rate 50mbit
htb_class0=rate 10mbit ceil 50mbit
htb_class1=rate 10mbit ceil 50mbit
htb_class2=rate 8bit ceil 50mbit
htb_class3=rate 8bit ceil 50mbit
htb_class4=rate 8bit ceil 50mbit
htb_class5=rate 8bit ceil 50mbit
htb_class6=rate 8bit ceil 50mbit
htb_class7=rate 8bit ceil 50mbit
Создаем политику для «Безлимитный 100Мб»:
echo > rate_100M.cfg
Наполним созданный файл содержимым:
vi rate_100M.cfg
Содержимое:
htb_inbound_root=rate 100mbit
htb_inbound_class0=rate 20mbit ceil 100mbit
htb_inbound_class1=rate 20mbit ceil 100mbit
htb_inbound_class2=rate 8bit ceil 100mbit
htb_inbound_class3=rate 8bit ceil 100mbit
htb_inbound_class4=rate 8bit ceil 100mbit
htb_inbound_class5=rate 8bit ceil 100mbit
htb_inbound_class6=rate 8bit ceil 100mbit
htb_inbound_class7=rate 8bit ceil 100mbit
htb_root=rate 100mbit
htb_class0=rate 20mbit ceil 100mbit
htb_class1=rate 20mbit ceil 100mbit
htb_class2=rate 8bit ceil 100mbit
htb_class3=rate 8bit ceil 100mbit
htb_class4=rate 8bit ceil 100mbit
htb_class5=rate 8bit ceil 100mbit
htb_class6=rate 8bit ceil 100mbit
htb_class7=rate 8bit ceil 100mbit
У тарифных планов мы выделили гарантированную скорость 10М/20М соответственно, для htb_class0-1. htb_class2-7 - минимальную полосу 8bit, что означает, что может зажиматься в 0 Мбит/с (0 - указывать нельзя зарезервировано). Подробнее можете изучить в базе знаний СКАТ, ссылка на источник https://wiki.vasexperts.ru/doku.php?id=dpi:dpi_bestpractice:qs_rateplans .
Загружаем политики в FastDPI, с жесткой перезагрузкой сервиса:
fdpi_ctrl load profile --policing /etc/dpi/lightbilling/policing/rate_50M.cfg --profile.name rate_50M
fdpi_ctrl load profile --policing /etc/dpi/lightbilling/policing/rate_100M.cfg --profile.name rate_100M
service fastdpi restart
Аналогичном способом создаем тарифный план с именем blocked для заблокированных абонентов. Разрешаем только трафик cs0. Ограничиваем скорость до 2Мбит/с, для белого списка.
Создаем файл политики:
echo > blocked.cfg
Наполним созданный файл содержимым:
vi blocked.cfg
Содержимое:
htb_inbound_root=rate 2mbit
htb_inbound_class0=rate 1mbit ceil 2mbit
htb_inbound_class1=rate 8bit ceil 8bit
htb_inbound_class2=rate 8bit ceil 8bit
htb_inbound_class3=rate 8bit ceil 8bit
htb_inbound_class4=rate 8bit ceil 8bit
htb_inbound_class5=rate 8bit ceil 8bit
htb_inbound_class6=rate 8bit ceil 8bit
htb_inbound_class7=rate 8bit ceil 8bit
htb_root=rate 2mbit
htb_class0=rate 1mbit ceil 2mbit
htb_class1=rate 8bit ceil 8bit
htb_class2=rate 8bit ceil 8bit
htb_class3=rate 8bit ceil 8bit
htb_class4=rate 8bit ceil 8bit
htb_class5=rate 8bit ceil 8bit
htb_class6=rate 8bit ceil 8bit
htb_class7=rate 8bit ceil 8bit
Загружаем политику в FastDPI, с жесткой перезагрузкой сервиса:
fdpi_ctrl load profile --policing /etc/dpi/lightbilling/policing/blocked.cfg --profile.name blocked
service fastdpi restart
Преступим к подготовке captive portal (сообщение о неоплате). Для этого нам нужно подготовить белый список сайтов, которые будут доступны всегда. Затем создать именованный профиль для белого списка, с заданием переадресации на страницу заглушку. В системе СКАТ такой сервис идет под номером 5 (https://wiki.vasexperts.ru/doku.php?id=dpi:dpi_options:opt_capture:start ). LightBilling дает возможность использования заглушки из коробки, подробнее можете почитать на официальном сайте http://lightbilling.cloud, в разделе база знаний.
Создадим рабочую папку для captive portal:
mkdir /etc/dpi/lightbilling/captive_portal
Перейдем в каталог:
cd /etc/dpi/lightbilling/captive_portal
Создаем файл для сайтов:
echo > white_list.txt
Наполним созданный файл содержимым:
vi white_list.txt
Содержимое
lightbilling.cloud
*.lightbilling.cloud
online.sberbank.ru
*.online.sberbank.ru
qiwi.com
*.qiwi.com
Важно! Полное содержимое белых списков, необходимо взять из обновляемой ссылки:https://api.lightbilling.cloud/static/library/skat/white.txt
Конвертирование во внутренний формат:
cat white_list.txt|url2dic url_list.bin
cat white_list.txt|url2dic cn_list.bin
cat white_list.txt|url2dic sni_list.bin
Создаем именованный профиль для белого списка, с жесткой перезагрузкой сервиса:
fdpi_ctrl load profile --service 5 --profile.name captive_portal --profile.json '{ "url_list" : "/etc/dpi/lightbilling/captive_portal/url_list.bin" , "sni_list" : "/etc/dpi/lightbilling/captive_portal/sni_list.bin", "cn_list" : "/etc/dpi/lightbilling/captive_portal/cn_list.bin", "redirect" : "http://stub.lightbilling.cloud/suspend/?url=http%3A%2F%2Fya.ru" }'
service fastdpi restart
Часть строки: ?url=http%3A%2F%2Fya.ru, необходимо поменять на ссылку, ведущую в личный кабинет абонента (раздел шлюзы, панель управления Менеджера LightBilling).
Настройка СКАТ завершена, осталось совсем немного. Нам необходимо обеспечить синхронизацию актуальных данных с LightBilling. На самом деле тут все очень просто. Загружаем актуальные данные по тарифам и отключаем абонентов за неуплату. Для этого редактируем файл lightbilling.sh из «Главы 3. Подготовка». Данные вставляем после строки разделителя «#########».
Открываем скрипт lightbilling.sh, для редактирования:
vi /etc/dpi/lightbilling/lightbilling.sh
Добавляем строки, после ####### (разделителя):
fdpi_ctrl load --policing --profile.name rate_50M --file lightbilling_tariff_30_enabled.lst
fdpi_ctrl load --policing --profile.name rate_100M --file lightbilling_tariff_102_enabled.lst
fdpi_ctrl load --service 5 --profile.name captive_portal --file lightbilling_tariff_30_disabled.lst
fdpi_ctrl load --service 5 --profile.name captive_portal --file lightbilling_tariff_102_disabled.lst
Идентификаторы тарифов 30 и 102, мы взяли выше. Подробнее про листы с данными, мы с Вами говорили в разделе «Глава 2. Концепция».
5. Сложный пример СКАТ BRAS L2 PPPoE (L3, ARP, DHCP), с использованием Radius. CG-NAT, FireWall
В этой главе разберем использование СКАТ, как комбайн со всеми возможными функциями. Статья написана для специалистов. Нет подробных углублений и много ссылок.
Начнем с того, что у LightBilling отсутствует свой Radius сервер, так как это подвергло бы Вас в не оправданную зависимость. Но это не мешает нам поднять свой локальный Radius прямо на DPI, и уже подключить этот сервер к облачному биллингу. Данные для Radius загружаются с дампа, в таком виде, в котором Вы пожелаете (смотрите Глава 2. Концепция).
Перед тем как приступить, не смотря на наши рекомендации использования CentOS 7/+, мы производим настройку на 6-ой версии. Поэтому возможны небольшие отклонения. Есть небольшие расхождения и со статьей https://wiki.vasexperts.ru/doku.php?id=dpi:dpi_bestpractice:dpi_bestpractice_brasl2pppoe , которую рекомендуем изучить.
Устанавливаем минимальный набор FreeRadius:
yum install freeradius freeradius-utils
Делаем backup настроек Radius:
tar -cvf backup.tar.gz /etc/raddb
Удаляем базу пользователей Radius, чтобы она Вас не смущала:
rm /etc/raddb/users
Добавляем в /etc/raddb/clients.conf следующие строки:
client fastdpi {
secret = testing123
ipaddr = 127.0.0.1
require_message_authenticator = yes
# add_cui = yes
nastype = vasexperts
virtual_server = fastdpi-vs
}
Создаем конфигурацию виртуального сервера:
echo > /etc/raddb/sites-enabled/fastdpi-vs
Содержимое:
server fastdpi-vs {
listen {
ipaddr = 127.0.0.1
port = 18122
type = auth
interface = lo
}
authorize {
files
preprocess
chap
mschap
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
unix
}
preacct {
preprocess
acct_unique
files
}
accounting {
detail
exec
}
session {
radutmp
}
post-auth {
exec
if ( Chargeable-User-Identity == 0x00 ) {
update reply {
Chargeable-User-Identity := "%{Framed-IP-Address}"
}
}
else {
update reply {
Chargeable-User-Identity := "%{Chargeable-User-Identity}"
}
}
update reply {
#Framed-IP-Address := "10.1.0.23"
#VasExperts-DHCP-DNS := "8.8.8.8"
#VasExperts-Enable-Service := "9:on"
#VasExperts-Service-Profile := "11:nat"
}
}
pre-proxy {
}
post-proxy {
eap
}
}
Копируем словарь VasExperts:
cp /usr/share/dpi/dictionary.vasexperts /usr/share/freeradius
Добавляем в главный словарь /usr/share/freeradius/dictionary строку:
$INCLUDE dictionary.vasexperts
Копируем словарь VasExperts:
cp /usr/share/dpi/dictionary.vasexperts /usr/share/freeradius
На нашей системе, после запуска radiusd вышла ошибка, неизвестный тип данных integer64. Пришлось выполнить команду:
sed -i 's/integer64/integer/' /usr/share/freeradius/dictionary.vasexperts
Пробуем запустить Radius в режиме отладки:
radiusd –XXX
Подготовка Radius завершена, теперь давайте определимся с дальнейшим сценарием настройки. Настало время соединения с LightBilling, а потом уже перейдем к СКАТ. Для наглядности дальше будет настраивать PPPoE BRAS, т.к. такой тип авторизации очень популярен. PPPoE, прежде всего это логин и пароль. Помните (Глава 3. Подготовка) мы говорили, что СКАТ любит логины. При авторизации через Radius, DPI нам даст работать только через логины. Вот тут и пригодятся, нам все функции (Глава 3. Подготовка).
Ах да, в прошлом примере (Глава 4. Простой пример), мы создали схему на основе привязанных тарифов, какой тариф привязан, такая и скорость. Теперь давайте соберем схему на основе персональной скорости (Рис. 1) из профиля пользователя (Глава 3. Подготовка).
Добавим в файл /etc/dpi/lightbilling/lighbilling.sh, генерацию базы данных Radius.
Содержимое:
# +------------------------+
# | Parsing Users | RADIUS |
# +------------------------+
echo "[log] raddb generate users"
echo "" > users
while read i; do
LOGIN=$(echo "$i" | awk '{print $1}')
PASSWORD=$(echo "$i" | awk '{print $2}')
IP=$(echo "$i" | awk '{print $3}')
DOWNLOAD=$(echo "$i" | awk '{print $4}')
UPLOAD=$(echo "$i" | awk '{print $5}')
LIST=$(echo "$i" | awk '{print $6}')
echo "#" >> users
echo "$LOGIN Cleartext-Password := \"$PASSWORD\"" >> users
echo " Framed-IP-Address = $IP," >> users
echo " VasExperts-DHCP-DNS = 8.8.8.8," >> users
echo " VasExperts-Service-Profile += \"11:nat\"," >> users
if [ $(ip2disabled $IP) == "1" ] ; then
echo " VasExperts-Policing-Profile = \"lightbilling_disabled\"," >> users
echo " VasExperts-Service-Profile += \"5:captive_portal\"" >> users
else
echo " VasExperts-Policing-Profile = \"$LIST\"" >> users
fi
echo "#" >> users
echo "#" >> users
done <lightbilling_users.lst
if cmp -s users /etc/raddb/users ; then
echo "[log] raddb : users actual"
else
echo "[log] raddb : update users"
cp users /etc/raddb/users
echo "[log] freeradius : refresh data"
pkill -HUP radiusd
fi
Создается файл users, в него складываются реквизиты абонентов. Каждому абоненту добавляется сервис CG-NAT с именем nat. Если пользователь отключен, накладывается политика lighbilling_disabled и сервис captive_portal. Включенному пользователю накладывается политика с его персональной скоростью. После цикла, сверяется текущая база Radius и новая, в случае расхождения происходит обновление.
Для обновления данных в памяти radiusd, без перезагрузки сервиса, используется команда pkill -HUP radiusd.
Для того, чтобы обновить политики/сервисы текущих абонентов онлайн (без повторного подключения), добавим дополнительно следующий кусок кода:
# +----------------+
# | Users disabled |
# +----------------+
echo "[log] users disabled"
file_ip2login lightbilling_disabled.lst
fdpi_ctrl load --policing --profile.name lightbilling_disabled --file lightbilling_disabled.login.lst
fdpi_ctrl load --service 5 --profile.name captive_portal --file lightbilling_disabled.login.lst
# +----------------+
# | Users enabled |
# +----------------+
echo "[log] users enabled"
file_ip2login lightbilling_enabled.lst
for i in $(fdpi_ctrl list all --service 5 | grep "5*(0x" | awk '{ print $1 }')
do
if grep --silent "$i\b" lightbilling_enabled.login.lst ; then
LOGIN=$i
LIST=$(login2list $LOGIN)
echo "VOZOBNOVLENIE $LOGIN LIST $LIST"
fdpi_ctrl load --policing --profile.name $LIST --login $LOGIN
fi
done
fdpi_ctrl del --service 5 --profile.name captive_portal --file lightbilling_enabled.login.lst
Приступим к настройке FastPCRF. Добавим информацию о Radius сервере в файл /etc/dpi/fastpcrf.conf.
Содержимое:
radius_server=testing123@127.0.0.1%lo:18122;coa_port=0
По умолчанию сервис fastpcrf не запущен. Запустить его можно командой:
service fastpcrf start
Настроим FastDPI. Добавим информацию в файл /etc/dpi/fastdpi.conf.
Содержимое:
# FastDPI configuration parameters
#
# Interface pairs for ethernet bridge
#
# For example this setup
# in_dev=dna0:dna2:dna4
# out_dev=dna1:dna3:dna5
# creates following bridges:
# dna0 <--> dna1
# dna2 <--> dna3
# dna4 <--> dna5
#
in_dev=dna0
out_dev=dna1
# Enable automatic update of black list from the Cloud
federal_black_list=true
black_list_redirect=http://vasexperts.ru/test/blocked.php
#Scale factor is about 1 for every 1 Gigabit of bandwidth
scale_factor=1
mem_tracking_flow=1500000
mem_tracking_ip=3000000
timeout_check_dev=0
#FDPI Control
ctrl_port=29000
ctrl_dev=lo
#Turn on UDP detection
only_tcp=0
#Turn on UDR
udr=1
#custom
bras_enable=1
enable_auth=1
bras_arp_ip=177.77.82.2
bras_arp_mac=00:08:A2:0E:E8:6B
bras_terminate_l2=1
bras_gateway_ip=177.77.82.1
bras_gateway_mac=00:0c:42:af:52:91
bras_term_by_as=1
auth_servers=127.0.0.1%lo:29002
bras_pppoe_enable=1
bras_pppoe_session=1000
bras_ppp_auth_list=2,3
bras_vlan_terminate=1
bras_terminate_local=1
enable_acct=1
netflow=4
netflow_timeout=60
#trace_ip=10.0.3.1
Из предыдущего примера (Глава 4. Простой пример) необходимо добавить сервис captive_portal, без изменения наименования. Для отключенных абонентов, создадим политику с именем lighbilling_disabled, по аналогии blocked (Глава 4. Простой пример). Из нового у нас CG-NAT, почитать можно по ссылке https://wiki.vasexperts.ru/doku.php?id=dpi:dpi_options:opt_cgnat:start . Очень важно иметь большой пул исходящих адресов (https://wiki.vasexperts.ru/doku.php?id=dpi:dpi_options:opt_cgnat:cgnat_faq:cgnat_faq_1 ) и обратный маршрут на бордере. Добавим сервис CG-NAT:
fdpi_ctrl load profile --service 11 --profile.name nat --profile.json '{"nat_ip_pool" : "177.77.82.128/26", "nat_type" : 1}'
База данных Radius составляется ссылками на политики вида lightbilling_rate_50000_50000 (для Рис. 1). Добавить конфигурацию политик, нужно заранее для каждой персональной скорости. Пример:
fdpi_ctrl load profile --policing /etc/dpi/lightbilling/policing/lightbilling_rate_50000_50000.cfg --profile.name lightbilling_rate_50000_50000
Авто создание политик можете организовать сами. Или перекроить скрипт на работу с привязанными тарифами. Тут уже все в Ваших руках, все инструменты для этого есть.
5.1. Мини FireWall. Пример дополнительной услуги «Цифровое ТВ»
Продолжение Главы 5. DPI имеет функции FireWall (https://wiki.vasexperts.ru/doku.php?id=dpi:dpi_options:opt_firewall:start ). Данный функционал можно использовать, как открытие дополнительной услуги из биллинга. Но, есть не удобства:
- Мини firewall работает на основе портов.
- Правила создаются на основе диапазонов (max_port, port_holes, out_port).
Заранее обдумайте, как обыграете правила с учетом выше описанных нюансов. Мы же в качестве примера рассмотрим услугу Цифровое ТВ. Пусть в LightBilling, она выглядит следующим образом:
Рис.4. Дополнительный тариф «Цифровое ТВ»
Видим (Рис. 4), что тариф имеет идентификатор 29. Значит, у кого услуга не оплачена можем взять из файла /etc/dpi/lightbilling/tmp/lightbilling_tariff_29_disabled.lst . В рассматриваемом примере «Цифровое ТВ», это сервис Unicast трафика, работающий на 25 порту.
Создаем профиль:
fdpi_ctrl load profile --service 13 --profile.name tv --profile.json '{ "max_port" : 25 }'
В скрипте, накладываем на список:
fdpi_ctrl load --service 13 --profile.name tv --file /etc/dpi/lightbilling/tmp/lightbilling_tariff_29_disabled
fdpi_ctrl del --service 13 --profile.name tv --file /etc/dpi/lightbilling/tmp/lightbilling_tariff_29_enabled
6. Планировщик (CRON). Сервисы
Автозагрузка сервисов. CentOS 6:
Посмотреть, есть ли сервис в автозагрузке:
chkconfig –list
Добавить в автозагрузку fastpcrf:
chkconfig fastpcrf on
Добавить в автозагрузку radiusd:
chkconfig radiusd on
Автозагрузка сервисов. CentOS 7+:
Добавить в автозагрузку fastpcrf:
systemctl enable fastpcrf
Добавить в автозагрузку radiusd:
systemctl enable radiusd
Добавьте в файл /etc/crontab, запуск скрипта LightBilling:
*/5 * * * * root sh /etc/dpi/lightbilling/lightbilling.sh > /etc/dpi/lightbilling/cron.log 2>/dev/null
Рекомендации по периоду описаны в Главе 2. Концепция.