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

Как видим, строка соответствует пользователю. Шесть колонок разделенных пробелами, где:

  1. 40127 – Логин/договор из биллинга;
  2. 4593027548 – Пароль;
  3. 10.0.40.127 – IP адрес;
  4. 50000 – Персональная входящая скорость, выставленная в профиле;
  5. 50000 – Персональная исходящая скорость, выставленная в профиле;
  6. lightbilling_rate_50000_50000 – Наименование персонального тарифа, соответствует создаваемому файлу .lst (см. выше). Помните про постфикс _enabled/_disabled;
  7. AA:BB:CC:DD:11:33 - Персональный MAC адрес. Значение 0, если отсутствует.
  8. 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, свободно изменяется под Ваши нужны и служит как рабочий пример. Давайте разберем его действия:

  1. Создается временная директория /etc/dpi/lightbilling/tmp. При каждом запуске директория очищается.
  2. Сохраняется md5 сумма предыдущего дампа.
  3. Скачивается дамп архив shar из LightBilling во временную папку.
  4. Проверяется целостность скаченного архива, а также содержимое. Сравнивается md5 сумма старого архива (сохранили ранее) и нового. Если суммы равны или возникает ошибка, скрипт прекращает работу.
  5. Запускается самораспаковывающийся 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 LPPPoE (L3, ARPDHCP), с использованием RadiusCG-NATFireWall

 

В этой главе разберем использование СКАТ, как комбайн со всеми возможными функциями. Статья написана для специалистов. Нет подробных углублений и много ссылок.

Начнем с того, что у 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. Концепция.