Справочник Cisco-ISG сервисов

Материал из BiTel WiKi

Перейти к: навигация, поиск

Содержание

Описание задачи

Схемы с использованием Cisco ISG обычно предполагают использование отдельного радиус-сервера для выдачи параметров сервисов ISG. Для этого часто используется тот же радиус, но удобнее выносить эту логику отдельно. Тем более, что одновременно может быть реализовано несколько разных схем подключения, использующих ISG.

В данной статье справочник ISG-сервисов поднимается в виде отдельного экземпляра модуля Inet c одним Access-сервером для выдачи атрибутов и без Accounting-серверов.

Описанное решение настраивалось на версии 5.2

Настройка

Установка модуля

  • Устанавливаем модуль Inet, если ещё не установлен.
  • В клиенте биллинга: Модули -> Редактор модулей и услуг: добавляем новый экземпляр модуля Inet с названием "ISG-справочник", запоминаем Id модуля (в нашем случае=31), добавляем услугу "Время".

Файл:inet-isg-module.png

  • Типы трафика и привязки типов трафиков не добавляем
  • Конфигурацию модуля не добавляем (если вам не нужно)
  • Добавляем тип устройства ISG - для роутеров с ISG. В конфиге этого типа устройства позже будем прописывать радиус-атрибуты наших сервисов

Файл:inet-isg-device-type.png

  • Добавляем тип устройства Access - ProcessGroup для сервера BGInetAccess, конфиг и обработчики - пустые

Файл:inet-isg-device-type-root.png

  • Получили типы устройств:

Файл:inet-isg-device-types.png

  • Накидываем дерево устройств:

Файл:inet-isg-device-tree.png

  • Заводим тип сервиса:

Файл:inet-isg-service-type.png

Установка Access-сервера

  • Устанавливаем Access-сервер по мануалу
  • Переименовываем в Access-ISG имя директории: /usr/local/BGInetAccess-ISG
  • В access.sh: "-Dapp.name=BGInetAccess-ISG":
#!/bin/sh
 
cd ${0%${0##*/}}.
 
. ./setenv.sh
 
APP_HOME=.
CLASSPATH=$APP_HOME:$APP_HOME/lib/ext/bgcommon-boot.jar
COMMON_PARAMS="-Dnetworkaddress.cache.ttl=3600 -Djava.net.preferIPv4Stack=true -Dboot.info=1 -Dapp.name=BGInetAccess-ISG -Djava.endorsed.dirs=${BGBILLING_SERVER_DIR}/lib/endorsed:${JAVA_HOME}/lib/endorsed"
LOG_PARAMS="-Dlog.dir.path=log/ -Dlog4j.configuration=log4j-access.xml"
NAME=inet-access
NAME_SHORT=access
ADMIN_PORT=3951
MEMORY=-Xmx256m
 
if [ "$1" = "start" ]; then
        nohup  ${JAVA_HOME}|>/bin/java ${COMMON_PARAMS}|> ${LOG_PARAMS}|> ${MEMORY}|> -Dadmin.port=$ADMIN_PORT -cp ${CLASSPATH}|> ru.bitel.common.bootstrap.Boot ru.bitel.bgbilling.kernel.application.server.Application ${NAME}|> > ./log/${NAME_SHORT}|>.out 2>&1 & echo $! > .run/${NAME_SHORT}|>.pid &
else
        if [ "$1" = "debug" ]; then
                #starting in debug mode
            nohup  ${JAVA_HOME}|>/bin/java ${COMMON_PARAMS}|> ${MEMORY}|> -Dadmin.port=$ADMIN_PORT -cp ${CLASSPATH}|> -enableassertions -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=5589,server=y,suspend=n ru.bitel.common.bootstrap.Boot ru.bitel.bgbilling.kernel.application.server.Application ${NAME}|> > ./log/${NAME_SHORT}|>.out 2>&1 & echo $! > .run/${NAME_SHORT}|>.pid
        else
                #execute command
                ${JAVA_HOME}|>/bin/java ${COMMON_PARAMS}|> -Dadmin.port=$ADMIN_PORT -cp ${CLASSPATH}|> ru.bitel.common.bootstrap.Boot ru.bitel.bgbilling.kernel.application.server.Application ${NAME}|> $1 $2 $3 $4 $5 $6
        fi
fi
  • В inet-access.xml указываем:
    • app.name=BGInetAccess-ISG
    • app.id - какой у вас свободен (1, если нет других Access/Accounting-серверов)
    • Параметры подключения к базам
    • moduleId - id нашего экземпляра модуля Inet (у меня = 31)
    • rootDeviceId - id корневого устройства типа Access из дерева устройств (у меня = 1)
    • accounting.deviceTypeIds - типы устройств-NAS-ов (у меня = 2)
    • host/port для access-request-ов
  • Для более актуальной настройки inet-access.xml рекомендую свериться с документацией вашей версии.
  • Мой текущий inet-access.xml:
<?xml version="1.0" encoding="UTF-8"?>
<application context="access">
        <!-- Уникальное имя приложения -->
        <param name="app.name" value="BGInetAccess-ISG"/>
        <!-- Уникальный числовой id приложения -->
        <param name="app.id" value="2"/>
 
        <!-- Параметры подключения к БД -->
        <param name="db.driver" value="com.mysql.jdbc.Driver"/>
        <param name="db.url" value="jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&amp;characterEncoding=Cp1251&amp;allowUrlInLocalInfile=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;queryTimeoutKillsConnection=true&amp;connectTimeout=1000"/>
        <param name="db.user" value="bill"/>
        <param name="db.pswd" value="bill"/>
        <param name="db.maxIdle" value="10"/>
        <param name="db.validationTimeout" value="10"/>
 
        <!-- Параметры подключения к slave БД -->
        <param name="db.slave.1.url" value="jdbc:mysql://192.168.10.10:3306/bgbilling?useUnicode=true&amp;characterEncoding=Cp1251&amp;allowUrlInLocalInfile=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;elideSetAutoCommits=true&amp;useCursorFetch=true&amp;queryTimeoutKillsConnection=true&amp;connectTimeout=1000"/>
        <param name="db.slave.1.user" value="bill"/>
        <param name="db.slave.1.pswd" value="bill"/>
        <param name="db.slave.1.maxIdle" value="10"/>
        <param name="db.slave.1.maxActive" value="100"/>
        <param name="slave.alarm.second.behind.master" value="400"/>
        <param name="slave.disable.second.behind.master" value="390"/>
 
        <!-- Параметры подключения к MQ -->
        <param name="mq.url" value="failover:(tcp://127.0.0.1:61616)"/>
        <param name="mq.user" value="bill"/>
        <param name="mq.pswd" value="bgbilling"/>
 
        <!-- id модуля -->
        <param name="moduleId" value="31"/>
        <!-- id корневого устройства -->
        <param name="rootDeviceId" value="1"/>
        <!-- Типы фейковых устройств, являющихся аккаунтинг серверами -->
        <param name="accounting.deviceTypeIds" value="2"/>
 
        <!-- Внутренняя переменная приложения, не изменять -->
        <param name="commonIdentifierName" value="rootDeviceId"/>
 
        <!-- Параметры сохранения логов данных -->
        <!-- Директория, в которую сохранять radius логи -->
        <param name="datalog.radius.dir" value="data/radius" />
        <!-- Размер блока данных в файле лога, также размер буфера на лог файл -->
        <param name="datalog.radius.chunk.size" value="262144" />
        <!-- Сжимать radius логи: 0 - не сжимать, 1 - zlib -->
        <param name="datalog.radius.compression.type" value="1" />
        <!-- Директория, в которую сохранять flow логи -->
        <param name="datalog.dhcp.dir" value="data/dhcp" />
        <!-- Размер блока данных в файле лога, также размер буфера на лог файл -->
        <param name="datalog.dhcp.chunk.size" value="131072" />
        <!-- Сжимать flow логи: 0 - не сжимать, 1 - zlib -->
        <param name="datalog.dhcp.compression.type" value="1" />
 
 
        <!-- Создание Access -->
        <bean name="access" class="ru.bitel.bgbilling.modules.inet.access.Access" />
 
        <context name="radius">
                <!-- Cоздание процессора radius-пакетов -->
                <bean name="radiusProcessor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/>
 
                <!-- Служебный ScheduledExecutorService, необходимый для dataLogger -->
                <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" />
 
                <!-- Cоздание dataLogger, сохраняющего radius-пакеты на диск (только один экземпляр) -->
                <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger">
                        <param name="scheduledExecutor">hrlydtlggr</param>
                </bean>
 
                <!-- Cоздание слушателя radius-пакетов на порту с передачей ему процессора и dataLogger -->
                <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener">
                        <constructor>
                                <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех -->
                                <param name="host" value=""/>
                                <!-- Порт, на котором будет открыт сокет -->
                                <param name="port" value="3912"/>
                                <!-- Размер буфера приема слушателя -->
                                <param name="recvBufferSize">512 * 1024</param>
                                <!-- Рекомендуемый SO_RCVBUF сокета -->
                                <param name="soRCVBUF"></param>
                                <!-- Количество потоков-обработчиков -->
                                <param name="threadCount">10</param>
                                <!-- Максимальное количество пакетов в очереди на обработку -->
                                <param name="maxQueueSize">200</param>
                                <!-- Передача процессора -->
                                <param name="processor">radiusProcessor</param>
                                <!-- Режим работы, RadiusListener.Mode.authentication -->
                                <param name="mode">RadiusListener.Mode.authentication</param>
                                <!-- Передача dataLogger -->
                                <param name="dataLogger">radiusDataLogger</param>
                        </constructor>
                </bean>
        </context>
 
</application>
  • Запускаем BGInetAccess-ISG, убеждаемся, что он запустился, смотрим логи на предмет ошибок

Настройка сервисов ISG

Каждому сервису ISG у нас будет соответствовать пара: сервис модуля "ISG-справочник" на договоре + опция модуля "ISG-справочник".

Сервисы модуля

  • Заводим служебный договор для авторизации сервисов.
  • Вешаем на него простейший тариф:

Файл:inet-isg-tariff.png

Личные инструменты