м |
|
(3 промежуточные версии не показаны) |
Строка 27: |
Строка 27: |
| *Получение IP адреса абонентом и получение им доступа в сеть (этакий аналог "онлайна") разделены (хотя и зависимы друг от друга). В результате - в мониторе модуля Inet видим две сессии на договор: по одной понимаем, что абонент получил IP адрес, по другой - что он пользуется сетью (при правильно подобранном Idle-Timeout). Если в мониторе всего одна (dhcp) сессия - значит абонент успешно прошел авторизацию (т.е. сидит в разрешенном порту), но интернет ему в данный момент не нужен (или трафик не доходит до BRAS'а). Это очень удобно для аналитики. ISG session-restart также проходит без проблем, потому как ISG сессия авторизуется по source-IP, который у абонента уже есть (при авторизации ISG сессии непосредственно по option82 пришлось бы заново запрашивать IP, чтобы на BRAS попал dhcp запрос). В результате - на циске можно спокойно сбрасывать сессию, будучи уверенным что при первом же пакете она тут же поднимется. Очень удобно при всяком траблшутинге. IMHO. | | *Получение IP адреса абонентом и получение им доступа в сеть (этакий аналог "онлайна") разделены (хотя и зависимы друг от друга). В результате - в мониторе модуля Inet видим две сессии на договор: по одной понимаем, что абонент получил IP адрес, по другой - что он пользуется сетью (при правильно подобранном Idle-Timeout). Если в мониторе всего одна (dhcp) сессия - значит абонент успешно прошел авторизацию (т.е. сидит в разрешенном порту), но интернет ему в данный момент не нужен (или трафик не доходит до BRAS'а). Это очень удобно для аналитики. ISG session-restart также проходит без проблем, потому как ISG сессия авторизуется по source-IP, который у абонента уже есть (при авторизации ISG сессии непосредственно по option82 пришлось бы заново запрашивать IP, чтобы на BRAS попал dhcp запрос). В результате - на циске можно спокойно сбрасывать сессию, будучи уверенным что при первом же пакете она тут же поднимется. Очень удобно при всяком траблшутинге. IMHO. |
| *При отрицательном балансе ISG сессия сбрасывается и создается новая (unauth) сессия с таймером и локальными сервисами, ограничивающими абоненту доступ. Эта сессия каждые N минут переавторизуется на BGBilling'е в надежде, что абонент уже пополнил баланс. И - если баланс выправился - стартует как обычно (с сервисами из биллинга, в соответствие с тарифом). Это не совсем true way для ISG. Правильно - не сбрасывая сессию, снять с нее (через CoA) текущие тарифные ISG сервисы и назначить другие (ограничивающие доступ), а при пополнении баланса - наоборот. BGBilling так может. Почему я сделал по другому? Потому что удобно на циске видеть абонентов с отрицательным балансом (их сессии - unauth) и удобно отслеживать повторные радиус запросы на авторизацию. Это опять же очень удобно для быстрой аналитики и при траблшутинге (почему это у этого абонента ничего не работает? а вот и логи...). Опять же IMHO. | | *При отрицательном балансе ISG сессия сбрасывается и создается новая (unauth) сессия с таймером и локальными сервисами, ограничивающими абоненту доступ. Эта сессия каждые N минут переавторизуется на BGBilling'е в надежде, что абонент уже пополнил баланс. И - если баланс выправился - стартует как обычно (с сервисами из биллинга, в соответствие с тарифом). Это не совсем true way для ISG. Правильно - не сбрасывая сессию, снять с нее (через CoA) текущие тарифные ISG сервисы и назначить другие (ограничивающие доступ), а при пополнении баланса - наоборот. BGBilling так может. Почему я сделал по другому? Потому что удобно на циске видеть абонентов с отрицательным балансом (их сессии - unauth) и удобно отслеживать повторные радиус запросы на авторизацию. Это опять же очень удобно для быстрой аналитики и при траблшутинге (почему это у этого абонента ничего не работает? а вот и логи...). Опять же IMHO. |
| + | *IP-адрес для абонента можно назначать статический и/или динамический. |
| | | |
- | [[ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация сети)]] | + | '''Решение''' |
- | [[ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация BGBilling'а)]] | + | #[[ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация сети)]] |
- | | + | #[[ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация BGBilling'а)]] |
- | == Конфигурация BGBilling'а ==
| + | |
- | | + | |
- | Устанавливаем модуль inet_5.2_1118.zip, создаем его в редакторе модулей и услуг, добавляем услуги.<br />
| + | |
- | Затем, создаем Опции (имена ISG сервисов), типы трафика и тарифный план (в нем прописываем стоимости типов трафика и подключаем Опции, т.е. ISG сервисы):
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0001.jpg|200px|thumb|left|Модуль, услуги]]
| + | |
- | | [[Файл:ISG-INET-0002.jpg|200px|thumb|left|Опции (ISG сервисы)]]
| + | |
- | | [[Файл:ISG-INET-0003.jpg|200px|thumb|left|Типы трафика]]
| + | |
- | | [[Файл:ISG-INET-0024.jpg|200px|thumb|left|Тарифный план: стоимость трафика и подключение опций (ISG сервисов)]]
| + | |
- | |}
| + | |
- | | + | |
- | Описываем откуда брать информацию о количестве каждого из типов трафика (можно конечно использовать netflow, но я ограничился Acct-Input-Octets и Acct-Output-Octets из radius аккаунтинга, так как тарифов по траффику у меня нет и эта информация нужна всего лишь для статистики):
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0004.jpg|200px|thumb|left|Привяка типов трафика: Local Upstream]]
| + | |
- | | [[Файл:ISG-INET-0005.jpg|200px|thumb|left|Привяка типов трафика: Local Downstream]]
| + | |
- | | [[Файл:ISG-INET-0006.jpg|200px|thumb|left|Привяка типов трафика: Internet Upstream]]
| + | |
- | | [[Файл:ISG-INET-0007.jpg|200px|thumb|left|Привяка типов трафика: Internet Downstream]]
| + | |
- | |}
| + | |
- | Далее, создаем пул IP адресов - они должны быть из диапазона адресов интерфейса Loopback52 (на свиче уровня аггрегации), а default gateway должен быть адрес интерфейса Loopback52.<br />
| + | |
- | Создаем сервис INTERNET, который будем подключать к договору в биллинге (не путать с ISG сервисом, назначаемым на ISG сессию абонента на циске), чтобы собственно предоставить ему (договору) доступ в интернет через модуль Inet.
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0008.jpg|200px|thumb|left|IP-ресурсы]]
| + | |
- | | [[Файл:ISG-INET-0009.jpg|200px|thumb|left|Сервис INTERNET]]
| + | |
- | |}
| + | |
- | Создаем сущность ''коммутатор'', привязываем к ней атрибут ''адрес'' (позже пригодится для указания местоположения свичей доступа, чтобы потом хоть как-то ориентироваться что-где):
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0016.jpg|200px|thumb|left|Сущности]]
| + | |
- | | [[Файл:ISG-INET-0023.jpg|200px|thumb|left|Атрибуты]]
| + | |
- | |}
| + | |
- | Создаем типы устройств:
| + | |
- | #абстрактный тип Access+Accounting, являющийся верхушкой иерархии всех типов устройств, объединяя их все (в нем прописываются настройки общие для всех типов устройств)
| + | |
- | #тип ASR ISG, описывающий BRAS'ы
| + | |
- | #тип SW-1, описывающий свичи уровня аггрегации (они же dhcp релеи)
| + | |
- | #тип Switch, описывающий свичи уровня доступа (те, которые вставляют option82), привязываем к нему сущность ''коммутатор''.
| + | |
- | {|
| + | |
- | |-
| + | |
- | | [[Файл:ISG-INET-0011.jpg|200px|thumb|left|Типы устройств]]
| + | |
- | | [[Файл:ISG-INET-0012.jpg|200px|thumb|left|Типы устройств: Access+Accounting (абстрактный тип, верхушка иерархии типов)]]
| + | |
- | |-
| + | |
- | | [[Файл:ISG-INET-0013.jpg|200px|thumb|left|Типы устройств: ASR ISG (BRAS)]]
| + | |
- | | [[Файл:ISG-INET-0014.jpg|200px|thumb|left|Типы устройств: SW-1 (уровень аггрегации)]]
| + | |
- | | [[Файл:ISG-INET-0015.jpg|200px|thumb|left|Типы устройств: Switch (уровень доступа)]]
| + | |
- | |}
| + | |
- | и привязываем сервис INTERNET к всем этим типам (через абстрактный Access+Accounting):
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0010.jpg|200px|thumb|left|Сервис INTERNET, типы устройств]]
| + | |
- | |}
| + | |
- | Создаем сами устройства (соответствующих типов):
| + | |
- | {|
| + | |
- | |-
| + | |
- | | [[Файл:ISG-INET-0017.jpg|200px|thumb|left|Устройства]]
| + | |
- | | [[Файл:ISG-INET-0018.jpg|200px|thumb|left|Устройства: Access+Accounting (абстрактное устройство, верхушка иерархии устройств)]]
| + | |
- | |-
| + | |
- | | [[Файл:ISG-INET-0019.jpg|200px|thumb|left|Устройства: R31_ASR1002 (BRAS)]]
| + | |
- | | [[Файл:ISG-INET-0020.jpg|200px|thumb|left|Устройства: (каталист уровня аггрегации)]]
| + | |
- | | [[Файл:ISG-INET-0021.jpg|200px|thumb|left|Устройства: (каталист уровня доступа)]]
| + | |
- | |}
| + | |
- | Для свичей доступа указываем местоположение (используя сущность и атрибут ''адрес''):
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0022.jpg|200px|thumb|left|Устройства: (каталист уровня доступа, атрибуты)]]
| + | |
- | |}
| + | |
- | Теперь осталось привязать сервис INTERNET (выбрав нужный свич уровня доступа и указав правильный номер порта) к договору:
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0025.jpg|200px|thumb|left|Договор, сервисы (постоянный IP)]]
| + | |
- | | [[Файл:ISG-INET-0026.jpg|200px|thumb|left|Договор, сервисы (случайный IP)]]
| + | |
- | |}
| + | |
- | И не забыть про тариф, так как именно через него (помимо определения стоимостей) назначаются ISG сессии (Опции):
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0029.jpg|200px|thumb|left|Договор, тарифный план (назначение Опций, т.е. ISG сервисов)]]
| + | |
- | |}
| + | |
- | | + | |
- | Теперь ставим ''BGInetAccess сервер для модуля Inet'' (выполняет функции DHCP и RADIUS серверов). Конфиг (файл inet-access.xml):
| + | |
- | <source lang="bash">
| + | |
- | <?xml version="1.0" encoding="UTF-8"?>
| + | |
- | <application context="access">
| + | |
- | <!-- Уникальное имя приложения -->
| + | |
- | <param name="app.name" value="BGInetAccess"/>
| + | |
- | <!-- Уникальный числовой id приложения -->
| + | |
- | <param name="app.id" value="10101"/>
| + | |
- | | + | |
- | <!-- Параметры подключения к БД -->
| + | |
- | <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="***"/>
| + | |
- | <param name="db.validationTimeout" value="10"/>
| + | |
- |
| + | |
- | <!-- Параметры подключения к MQ -->
| + | |
- | <param name="mq.url" value="failover:(tcp://localhost:61616)"/>
| + | |
- | <param name="mq.user" value="bill"/>
| + | |
- | <param name="mq.pswd" value="bgbilling"/>
| + | |
- |
| + | |
- | <!-- id модуля -->
| + | |
- | <param name="moduleId" value="2"/>
| + | |
- | <!-- id корневого устройства -->
| + | |
- | <param name="rootDeviceId" value="1"/>
| + | |
- | <!-- Типы фейковых устройств, являющихся аккаунтинг серверами -->
| + | |
- | <param name="accounting.deviceTypeIds" value="1"/>
| + | |
- | | + | |
- | <!-- Внутренняя переменная приложения, не изменять -->
| + | |
- | <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.InetRadiusHelperProcessor"/>
| + | |
- |
| + | |
- | <!-- Служебный 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="1812"/>
| + | |
- | <!-- Размер буфера приема слушателя -->
| + | |
- | <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>
| + | |
- |
| + | |
- | <context name="dhcp">
| + | |
- | <!-- Cоздание процессора dhcp-пакетов -->
| + | |
- | <bean name="dhcpProcessor" class="ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor"/>
| + | |
- |
| + | |
- | <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" />
| + | |
- | | + | |
- | <!-- Cоздание dataLogger, сохраняющего dhcp-пакеты на диск -->
| + | |
- | <bean name="dhcpDataLogger" class="ru.bitel.bgbilling.modules.inet.dhcp.DhcpHourlyDataLogger">
| + | |
- | <param name="scheduledExecutor">hrlydtlggr</param>
| + | |
- | </bean>
| + | |
- |
| + | |
- | <!-- Cоздание слушателя dhcp-пакетов на порту с передачей ему процессора и dataLogger -->
| + | |
- | <bean name="dhcpListener" class="ru.bitel.bgbilling.kernel.network.dhcp.DhcpListener">
| + | |
- | <constructor>
| + | |
- | <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех -->
| + | |
- | <param name="host" value=""/>
| + | |
- | <!-- Порт, на котором будет открыт сокет -->
| + | |
- | <param name="port" value="67"/>
| + | |
- | <!-- Размер буфера приема слушателя -->
| + | |
- | <param name="recvBufferSize">512 * 1024</param>
| + | |
- | <!-- Количество потоков-обработчиков -->
| + | |
- | <param name="threadCount">10</param>
| + | |
- | <!-- Максимальное количество пакетов в очереди на обработку -->
| + | |
- | <param name="maxQueueSize">200</param>
| + | |
- | <!-- Передача процессора -->
| + | |
- | <param name="processor">dhcpProcessor</param>
| + | |
- | <!-- Передача dataLogger -->
| + | |
- | <param name="dataLogger">dhcpDataLogger</param>
| + | |
- | </constructor>
| + | |
- | </bean>
| + | |
- | </context>
| + | |
- | </application>
| + | |
- | </source>
| + | |
- | Здесь, в <param name="moduleId" value="'''2'''"/> цифра '''2''' - это ID модуля Inet, а<br />
| + | |
- | в <param name="rootDeviceId" value="'''1'''"/> цифра '''1''' - это ID устройства Access+Accounting.
| + | |
- | | + | |
- | Запускаем, подключаем клиента и вот результат:
| + | |
- | {|
| + | |
- | | [[Файл:ISG-INET-0027.jpg|200px|thumb|left|Монитор (активные сессии договора)]]
| + | |
- | | [[Файл:ISG-INET-0028.jpg|200px|thumb|left|Отчет (по-сервисный аккаунтинг)]]
| + | |
- | |}
| + | |
- | | + | |
- | | + | |
- | <u>Полный конфиг типа устройств Access+Acounting</u>:
| + | |
- | <source lang="bash">
| + | |
- | access.group=1
| + | |
- | | + | |
- | #типы устройств - Nas-ов
| + | |
- | #radius.deviceTypeIds=3,4
| + | |
- | #типы устройств, являющиеся dhcp relay
| + | |
- | #dhcp.relay.deviceTypeIds=
| + | |
- | #привязка по ip
| + | |
- | radius.key.deviceTypeIds=3
| + | |
- | | + | |
- | #количество потоков на worker'а
| + | |
- | accounting.worker.1.thread.count=1
| + | |
- | #тарификатор:
| + | |
- | #минимальная сумма трафика, при которой тарифицировать соединение
| + | |
- | accounting.worker.1.tariffication.1.minDeltaAmount=0
| + | |
- | #пауза между заданиями тарификации
| + | |
- | accounting.worker.1.tariffication.1.delay=1
| + | |
- | #максимальное количество тарифицируемых соединений за задание
| + | |
- | accounting.worker.1.tariffication.1.batchSize=100
| + | |
- | #трекер (обработка сессий без наработки):
| + | |
- | #пауза между заданиями трекинга
| + | |
- | accounting.worker.1.tracking.1.delay=2
| + | |
- | #максимальное количество проверенных соединений за задание
| + | |
- | accounting.worker.1.tracking.1.batchSize=100
| + | |
- |
| + | |
- | #количество потоков на worker'а
| + | |
- | accounting.worker.2.thread.count=1
| + | |
- | #сброс в базу трафиков и наработки
| + | |
- | #минимальная наработка, при которой сбрасывать соединения в базу
| + | |
- | accounting.worker.2.flushing.1.minDeltaAccount=0
| + | |
- | #пауза между заданиями сброса в базу
| + | |
- | accounting.worker.2.flushing.1.delay=2
| + | |
- | #максимальное количество сброшенных соединений в базу за задание
| + | |
- | accounting.worker.2.flushing.1.batchSize=500
| + | |
- | | + | |
- | #количество потоков на worker'а
| + | |
- | accounting.worker.3.thread.count=1
| + | |
- | #завершатель соединений
| + | |
- | #пауза между заданиями
| + | |
- | accounting.worker.3.finishing.1.delay=2
| + | |
- | #максимальное количество сброшенных соединений в базу за задание
| + | |
- | accounting.worker.3.finishing.1.batchSize=500
| + | |
- |
| + | |
- | connection.start.fromAccept=1
| + | |
- | #таймаут перевода соединения в статус suspended при остутствии радиус пакетов
| + | |
- | connection.suspend.timeout=900
| + | |
- | #таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout)
| + | |
- | connection.close.timeout=1300
| + | |
- | #таймаут перевода соединения в статус suspended при остутствии радиус пакетов (для сессий с ограниченным доступом)
| + | |
- | connection.disable.suspend.timeout=900
| + | |
- | #таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout, для сессий с ограниченным доступом)
| + | |
- | connection.disable.close.timeout=1300
| + | |
- | #Radius-STOP
| + | |
- | connection.finish.timeout=5
| + | |
- | | + | |
- | session.split.onTariffOption=1
| + | |
- | session.split.onDeviceState=1
| + | |
- | </source>
| + | |
- | | + | |
- | <u>Полный конфиг типа устройств ASR ISG</u>:
| + | |
- | <source lang="bash">
| + | |
- | # Версия SNMP (по умолчанию 1)
| + | |
- | snmp.version=2
| + | |
- | # SNMP OID, из которого ивлекается значение uptime (1.3.6.1.2.1.1.3.0)
| + | |
- | snmp.uptimeOid=1.3.6.1.2.1.1.3.0
| + | |
- | | + | |
- | # По умолчанию для Inet каждое устройство является netflow-агентом,
| + | |
- | # для оптимизации указываем, что у нас только один netflow-агент
| + | |
- | flow.agent.type=netflow
| + | |
- | flow.agent.link={@deviceId}:-1
| + | |
- | | + | |
- | # Поиск устройства по giaddr и remoteId - 1,
| + | |
- | # поиск устройства только по giaddr, агентское устройство ищется отдельно, после preprocessDhcpRequest - 2,
| + | |
- | dhcp.deviceSearchMode=1
| + | |
- | | + | |
- | # убираем заголовок-длину
| + | |
- | dhcp.option82.removeHeader=2
| + | |
- | # позиция agentRemoteId
| + | |
- | dhcp.option82.agentRemoteId.position=0
| + | |
- | | + | |
- | # Поиск сервиса Inet по
| + | |
- | dhcp.servSearchMode=1
| + | |
- | | + | |
- | # выдавать тот же IP адрес, что при открытом доступе
| + | |
- | dhcp.disable.mode=1
| + | |
- | | + | |
- | # Отключаем проверку пароля
| + | |
- | radius.password.verification=0
| + | |
- | | + | |
- | # Берем адрес из Access-Request
| + | |
- | radius.address.fromRequest=1
| + | |
- | | + | |
- | # Код атрибута, из которого извлекать acctSessionId родительской сессии (по умолчанию - из cisco-avpair)
| + | |
- | #radius.parentAcctSessionId.type=1
| + | |
- | # префикс в значении атрибута перед acctSessionId родительской сессии
| + | |
- | #radius.parentAcctSessionId.prefix=parent-session-id=
| + | |
- | # код атрибута, из которого извлекать имя сервиса ISG (по умолчанию cisco-SSG-Service-Info)
| + | |
- | #radius.serviceName.type=251
| + | |
- | # префикс в значении атрибута перед именем сервиса ISG (если есть)
| + | |
- | #radius.serviceName.prefix=
| + | |
- | | + | |
- | # Атрибуты, выдаваемые в Access-Accept
| + | |
- | radius.realm.default.attributes=Acct-Interim-Interval=60;Idle-Timeout=1300;cisco-avpair=subscriber:accounting-list=ipoe-isg-aaa
| + | |
- | | + | |
- | # Радиус атрибуты, выдаваемые при авторизации для сервисов
| + | |
- | radius.inetOption.2.attributes=cisco-SSG-Account-Info=AISG-5MBPS
| + | |
- | radius.inetOption.3.attributes=cisco-SSG-Account-Info=AISG-10MBPS
| + | |
- | radius.inetOption.4.attributes=cisco-SSG-Account-Info=AISG-LOCAL
| + | |
- | | + | |
- | # Категории ip адресов из ресурсов, из которых будут выдаваться адреса ("пул", указывается во вкладке "IP ресурсы")
| + | |
- | radius.realm.default.ipCategories=1
| + | |
- | | + | |
- | # Коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами
| + | |
- | #(пользователю выдается серый адрес и устанавливается HTTP-редирект)
| + | |
- | #radius.disable.accessCodes=1,2,3,4,10,11,12,46
| + | |
- | # атрибуты, выдаваемые при rejectToAccept
| + | |
- | radius.disable.attributes=Acct-Interim-Interval=60;cisco-avpair=subscriber:accounting-list=ipoe-isg-aaa;cisco-SSG-Account-Info=AL4REDIRECT;cisco-SSG-Account-Info=AOPENGARDEN
| + | |
- | #radius.realm.reject.attributes=Acct-Interim-Interval=60;IP-Interface-Name=IP-Interface-Name=ISG-IP-UNAUTH;cisco-SSG-Account-Info=ALOCAL_L4R
| + | |
- | #категории ip адресов из ресурсов, из которых будут выдаваться адреса для отключенных ("пул", указывается во вкладке "IP ресурсы")
| + | |
- | radius.disable.ipCategories=2
| + | |
- |
| + | |
- | # Параметры активации сервисов
| + | |
- | # длина паузы, если возникла ошибка
| + | |
- | #sa.error.pause=60
| + | |
- | # количество заданий за раз
| + | |
- | #sa.batch.size=20
| + | |
- | # время (сек) ожидания завершения всех заданий (при асинхронной работе)
| + | |
- | #sa.batch.wait=5
| + | |
- | # пауза (сек) после обработки заданий
| + | |
- | #sa.batch.pause=0
| + | |
- | # время (сек) ожидания новой задачи перед вызовом disconnect.
| + | |
- | #sa.batch.waitNext=5
| + | |
- | #режим отправки CoA. 1 - команды 0xc и 0xb в одном пакете для каждого сервиса, 2 - атрибуты subscriber:command= в раздельных пакетах для каждого сервиса
| + | |
- | sa.radius.connection.coa.mode=2
| + | |
- | # при отключении посылать команду account-logoff
| + | |
- | sa.radius.connection.close.mode=3
| + | |
- | # не посылать команды на отключение сервисов
| + | |
- | #sa.radius.connection.close.disableServices=1
| + | |
- | # чтобы, если деньги закончились, не закрывал сервисы, а закрывал сразу сессию ISG целиком - 0, иначе - 1
| + | |
- | sa.radius.connection.withoutBreak=0
| + | |
- | # если dhcp lease time большой, а при положительном балансе доступ нужно дать (даже если адрес сейчас выдан серый), нужно установить 1
| + | |
- | #sa.radius.connection.coa.onEnable=0
| + | |
- | # откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации)
| + | |
- | #sa.radius.option.attributesPrefix=
| + | |
- | sa.radius.connection.attributes=Acct-Session-Id,User-Name,Framed-IP-Address
| + | |
- | radius.connection.attributes=Acct-Session-Id,User-Name,Framed-IP-Address
| + | |
- | # атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1)
| + | |
- | #sa.radius.disable.attributes=
| + | |
- | # фиксированные атрибуты, добавляемые в запрос перед отправкой CoA
| + | |
- | #sa.radius.coa.attributes=
| + | |
- | # добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes)
| + | |
- | #sa.radius.realm.addAttributes=0
| + | |
- | # фиксированные атрибуты, добавляемые в запрос перед отправкой PoD
| + | |
- | #sa.radius.pod.attributes=
| + | |
- | sa.radius.connection.close.removeFromKeyMap=0
| + | |
- | | + | |
- | # Лог CoA запросов
| + | |
- | sa.radius.log=1
| + | |
- | | + | |
- | #radius.disable.attributes=cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;cisco-SSG-Account-Info=ALOCAL_L4R
| + | |
- | | + | |
- | #radius.serviceName.disable=L4REDIRECT,OPENGARDEN
| + | |
- | #sa.radius.service.disable=L4REDIRECT,OPENGARDEN
| + | |
- | | + | |
- | #Для автоматического привязывания MAC-адреса к сервису в конфигурации модуля/типа сервиса/устройства/типа устройства можно прописать
| + | |
- | #serv.macAddress.auto=1
| + | |
- | | + | |
- | # Пауза между выполнениями команды после ошибки
| + | |
- | manage.error.pause=5
| + | |
- | # Пауза между получением uptime
| + | |
- | manage.uptime.pause=360
| + | |
- | # Пауза после ошибки, возникшей при получении uptime
| + | |
- | manage.uptime.error.pause=360
| + | |
- | | + | |
- | # Синхронизировать ли сервисы при обнаружении перезагрузки, 0 - не синхронизировать (по умолчанию), 1 - синхронизировать
| + | |
- | # (для обнаружения перезагрузки в типе устройства должен быть установлен обработчик управления устройством)
| + | |
- | #sa.device.sync.onReboot=0
| + | |
- | # Вызывать ли при синхронизации для каждого сервиса, 0 - только serviceCreate или 1 (по умолчанию)
| + | |
- | # сначала serviceCancel, а затем serviceCreate
| + | |
- | #sa.device.sync.cancelBeforeCreate=1
| + | |
- | </source>
| + | |
- | Здесь нужно обратить внимание на:
| + | |
- | <source lang="bash">
| + | |
- | # Поиск устройства по giaddr и remoteId - 1,
| + | |
- | # поиск устройства только по giaddr, агентское устройство ищется отдельно, после preprocessDhcpRequest - 2,
| + | |
- | dhcp.deviceSearchMode=1
| + | |
- | | + | |
- | # Поиск сервиса Inet по
| + | |
- | dhcp.servSearchMode=1
| + | |
- | | + | |
- | # выдавать тот же IP адрес, что при открытом доступе
| + | |
- | dhcp.disable.mode=1
| + | |
- | | + | |
- | # Берем адрес из Access-Request
| + | |
- | radius.address.fromRequest=1
| + | |
- | | + | |
- | # Радиус атрибуты, выдаваемые при авторизации для сервисов
| + | |
- | radius.inetOption.2.attributes=cisco-SSG-Account-Info=AISG-5MBPS
| + | |
- | radius.inetOption.3.attributes=cisco-SSG-Account-Info=AISG-10MBPS
| + | |
- | radius.inetOption.4.attributes=cisco-SSG-Account-Info=AISG-LOCAL
| + | |
- | | + | |
- | # чтобы, если деньги закончились, не закрывал сервисы, а закрывал сразу сессию ISG целиком - 0, иначе - 1
| + | |
- | sa.radius.connection.withoutBreak=0
| + | |
- | </source>
| + | |
- | В radius.inetOption.'''2'''.attributes=cisco-SSG-Account-Info=AISG-5MBPS цифра '''2''' - это ID соответствующей ''Опции'' (ISG-5MBPS).<br />
| + | |
- | А это должно быть закомментировано:
| + | |
- | <source lang="bash">
| + | |
- | # Коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами
| + | |
- | #(пользователю выдается серый адрес и устанавливается HTTP-редирект)
| + | |
- | #radius.disable.accessCodes=1,2,3,4,10,11,12,46
| + | |
- |
| + | |
- | # не посылать команды на отключение сервисов
| + | |
- | #sa.radius.connection.close.disableServices=1
| + | |
- | | + | |
- | #radius.disable.attributes=cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;cisco-SSG-Account-Info=ALOCAL_L4R
| + | |
- | #radius.serviceName.disable=L4REDIRECT,OPENGARDEN
| + | |
- | #sa.radius.service.disable=L4REDIRECT,OPENGARDEN
| + | |
- | </source>
| + | |
- | | + | |
- | <u>Полный конфиг типа устройств SW-1</u>:
| + | |
- | <source lang="bash">
| + | |
- | # Код субопции 82, содержащей VLAN, позиция и длина в субопции
| + | |
- | dhcp.option82.vlanId.code=1
| + | |
- | dhcp.option82.vlanId.position=0
| + | |
- | dhcp.option82.vlanId.length=2
| + | |
- | | + | |
- | dhcp.option82.interfaceId.code=1
| + | |
- | dhcp.option82.interfaceId.position=2
| + | |
- | dhcp.option82.interfaceId.length=2
| + | |
- | | + | |
- | dhcp.option.leaseTime=600
| + | |
- | | + | |
- | # параметры DHCP к сети не привязанные
| + | |
- | dhcp.option.serverIdentifier=0.0.0.0
| + | |
- | #dhcp.option.leaseTime=600
| + | |
- | #dhcp.option.timeServer=ntp.bgbilling.ru
| + | |
- | # параметр DHCP "основной шлюз" для сети
| + | |
- | #dhcp.net.option.188.191.0.0:255.255.255.0.gate=
| + | |
- | #dhcp.net.option.188.191.1.0:255.255.255.0.gate=
| + | |
- | #dhcp.net.option.188.191.2.0:255.255.255.0.gate=
| + | |
- | #dhcp.net.option.188.191.3.0:255.255.255.0.gate=
| + | |
- | | + | |
- | #dhcp.option.timeOffset=43200
| + | |
- | #dhcp.option.domainName=bgbilling.ru
| + | |
- | </source>
| + | |
- | | + | |
- | <u>Полный конфиг устройства Access+Acounting</u>:
| + | |
- | <source lang="bash">
| + | |
- | ip.resource.categoryId=1
| + | |
- | </source>
| + | |
- | | + | |
- | <u>Полный конфиг устройства R31_ASR1002</u>:
| + | |
- | <source lang="bash">
| + | |
- | # Хост для отправки PoD и CoA запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт)
| + | |
- | #radius.host=<хост устройства>
| + | |
- | # порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт)
| + | |
- | radius.port=1700
| + | |
- | # идентификатор - Nas-Identifier (по умолчанию - значение из поля Идентификатор параметров устройства)
| + | |
- | #radius.identifier=<идентификатор устройства>
| + | |
- | # используемый secret для общения по radius-протоколу (по умолчанию - значение из поля Community/secret параметров устройства)
| + | |
- | #radius.secret=<community/sercret устройства>
| + | |
- | sa.radius.secret=***
| + | |
- | # Сommunity (по умолчанию из параметра устройства Сommunity/Secret)
| + | |
- | snmp.community=***
| + | |
- | </source>
| + | |
- | | + | |
- | <u>Полный конфиг устройства SW-1</u>:
| + | |
- | <source lang="bash">
| + | |
- | ip.resource.categoryId=1
| + | |
- | vlan.resource.category=1
| + | |
- | dhcp.ipCategories=1
| + | |
- | </source>
| + | |
- | | + | |
- | <u>Полный конфиг модуля Inet</u>:
| + | |
- | <source lang="bash">
| + | |
- | # Активные и приостановленные статусы договора
| + | |
- | contract.status.active.codes=0
| + | |
- | contract.status.suspend.codes=3,4
| + | |
- | | + | |
- | # Проверка цены в тарифе: 0 - проверка отсутсвует, 1 - ошибка только? если у сессии есть трафик определенного типа,
| + | |
- | # но для него нет цены, 2 - ошибка? если хотя бы для одного типа трафика в привязке типа сервиса нет цены (по умолчанию - 1)
| + | |
- | #accounting.tariffication.checkPrice=1
| + | |
- | | + | |
- | # Режим активации учетного периода, если не используется скрипт на событие активации,
| + | |
- | # 0 (по умолчанию) - активация со дня подключения (старта сессии), 1 - активация с начала месяца.
| + | |
- | # Следует учитывать, что учетный период является второй величиной при вычислении пропорциональности
| + | |
- | # в тарифной ветке "Диапазон трафика"
| + | |
- | #accounting.period.activation.mode=0
| + | |
- | | + | |
- | # Нужно ли отключать сервис с типом инициации "по трафику", если тариф не найден
| + | |
- | #serv.disableOnTariffError=0
| + | |
- | | + | |
- | #Пункты Web - меню
| + | |
- | web.menuItem1=Отчет по сессиям Inet
| + | |
- | web.menuItem2=Смена пароля на логины Inet
| + | |
- | web.menuItem3=none
| + | |
- | #web.menuItem3=Отчет по трафикам Inet
| + | |
- | | + | |
- | # Параметры автоматической генерации логина для сервиса.
| + | |
- | # Минимальное значение логина при генерации логина
| + | |
- | #serv.login.min=1
| + | |
- | # Максимальное значение логина при генерации логина (т.е. если в базе присутствуют логины 1,2,3 и 10000000,
| + | |
- | # то при генерации создастся логин 4, а не 10000001)
| + | |
- | #serv.login.max=9999999
| + | |
- | | + | |
- | # Парамерты автоматической генерации пароля для сервиса. Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса
| + | |
- | # (в последнем случае значения будут главнее):
| + | |
- | # Минимальная длина пароля
| + | |
- | serv.password.length.min=5
| + | |
- | # Максимальная длина пароля
| + | |
- | serv.password.length.max=16
| + | |
- | # Разрешенные символы (используются также при генерации пароля)
| + | |
- | serv.password.chars=1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
| + | |
- | # Описание разрешенных символов, если пользователь ввел другие
| + | |
- | serv.password.chars.description=В пароле допустимы только цифры и латинские буквы.
| + | |
- | # Длина для автоматически генерируемого пароля
| + | |
- | serv.password.length.auto=6
| + | |
- | # Используемые символы для автоматически генерируемого пароля (по умолчанию значение берется из параметра serv.password.chars)
| + | |
- | #serv.password.chars.auto=
| + | |
- | | + | |
- | # Параметры активации карточек модуля card при использовании InetRadiusProcessor,
| + | |
- | # данные параметры можно указать как в конфигурации модуля, так и в конфигурации устройства.
| + | |
- | # Код модуля card
| + | |
- | #card.moduleId=
| + | |
- | # id услуг активации
| + | |
- | #card.activate.serviceIds=
| + | |
- | # Минимальное значение карточного логина используется, чтобы указать, какие числовые логины нужно искать в карточках;
| + | |
- | # если 0, то ограничение не действует.
| + | |
- | #card.login.min=0
| + | |
- | # Максимальное значение карточного логина используется, чтобы указать, какие числовые логины нужно искать в карточках;
| + | |
- | # если 0, то ограничение не действует.
| + | |
- | #card.login.max=0
| + | |
- | </source>
| + | |
- | | + | |
- | ----
| + | |
- | | + | |
- | Вся вышеприведенная конфигурация будет работать только если ISG сервисы будут описаны локально (на BRAS'е). Чтобы загружать сервисы из биллинга (как изначально предполагалось):
| + | |
- | | + | |
- | | + | |
- | | + | |
- | '''продолжение следует...'''
| + | |
Данная схема была собрана на лабе, но спроектирована под реальный проект, т.е. - никакой не сферический ISG в вакууме.
Подключить абонента по IPoE (без дополнительных инкапсуляций PPPoE или PPTP), выдать адрес по DHCP, авторизовать абонента по номеру порта на соответствующем каталисте уровня доступа, ограничить выход в интернет в соответствие с балансом договора.