Справочник Cisco-ISG сервисов
Материал из BiTel WiKi
Версия от 04:46, 21 июля 2014; Cromeshnic (Обсуждение | вклад)
Содержание |
Описание задачи
Схемы с использованием Cisco ISG обычно предполагают использование отдельного радиус-сервера для выдачи параметров сервисов ISG. Для этого часто используется тот же радиус, но удобнее выносить эту логику отдельно. Тем более, что одновременно может быть реализовано несколько разных схем подключения, использующих ISG.
В данной статье справочник ISG-сервисов поднимается в виде отдельного экземпляра модуля Inet c одним Access-сервером для выдачи атрибутов и без Accounting-серверов.
Описанное решение настраивалось на версии 5.2
Настройка
Установка модуля
- Устанавливаем модуль Inet, если ещё не установлен.
- В клиенте биллинга: Модули -> Редактор модулей и услуг: добавляем новый экземпляр модуля Inet с названием "ISG-справочник", запоминаем Id модуля (в нашем случае=31), добавляем услугу "Время".
- Типы трафика и привязки типов трафиков не добавляем
- Конфигурацию модуля не добавляем (если вам не нужно)
- Добавляем тип устройства ISG - для роутеров с ISG. В конфиге этого типа устройства позже будем прописывать радиус-атрибуты наших сервисов
- Добавляем тип устройства Access - ProcessGroup для сервера BGInetAccess, конфиг и обработчики - пустые
- Получили типы устройств:
- Накидываем дерево устройств:
- Заводим тип сервиса:
Установка 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&characterEncoding=Cp1251&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&queryTimeoutKillsConnection=true&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&characterEncoding=Cp1251&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&elideSetAutoCommits=true&useCursorFetch=true&queryTimeoutKillsConnection=true&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>