Vlan per user + Cisco IP subscriber interface + ISG

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

(Различия между версиями)
Перейти к: навигация, поиск
(Типы устройств)
(Устройства и ресурсы)
Строка 251: Строка 251:
radius.ipoe.nas_port_id.pattern.3.replacement=255/0/$1
radius.ipoe.nas_port_id.pattern.3.replacement=255/0/$1
</source>
</source>
 +
 +
Обратите внимание на строчку:
 +
<source lang="ini">radius.inetOption.1.template=cisco-SSG-Account-Info=A$optionTitle</source>
 +
 +
==== ServciceActivator ====
 +
==== ProtocolHandler ====
=== Устройства ===
=== Устройства ===

Версия 08:58, 24 июля 2013

Содержание

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

Клиентам предоставляется доступ по схеме vlan per user на роутерах cisco. Необходимо реализовать учёт и управление услугами в модуле Inet.

Решение

Сразу оговоримся, что в нашем случае речь идёт об услуге MPLS IP VPN. Для доступа интернет, возможно, появятся какие-то нюансы, но в целом механизм тот же.

Схема решения такая:

  • на клиентском интерфейсе настраивается ip subscriber interface + isg
  • интерфейсы авторизуются в BGInetAccess по паре "устройство+интерфейс"
  • Настройки скорости выдаются через ISG-сервисы, смена тарифа происходит через CoA
  • Трафик собираем по радиус-счётчикам ISG-сервисов и родительской сессии, либо через Netflow
  • В сервисе модуля Inet указываем только устройство и интерфейс

В нашем случае в биллинге не задаются ни сеть IP клиента на интерфейсе, ни его VLAN, т.к. для тарификации они не играют роли. Но это можно реализовать для учёта ресурсов, а также для автоматического конфигурирования.

Дополнительно усложним задачу: В некоторых случаях клиенту предоставляется VPN + доступ в интернет через NAT на нашей циске. Доступ в интернет считается в другом модуле, но такая схема несколько усложняет задачу, поскольку тогда в каждой точке VPN-а нужно разделять трафик на собственно VPN и интернет, чтобы не тарифицировать последний 2 раза. Эту схему мы реализуем отдельным типом сервиса с отдельной привязкой трафика и отдельными сервисами ISG.

Настройка биллнга

Настройка модуля

Для услуг VPN было решено завести отдельный экземпляр модуля Inet с названием 'VPN'. Плюсы:

  • Можно учитывать услуги интернета и vpn на одном договоре без проблем с пересечением тарифных планов (основная причина, т.к. в наследство осталось много таких договоров)
  • Учёт услуг, визуальное разделение услуг на договоре и в отчётах.

Минусы:

  • Дублирование ресурсов между несколькими экземплярами модулей Inet: одни и те же устройства, vlan, интерфейсы используются в разных местах. Могут быть проблемы с учётом.

Конфигурация модуля:

# Активные и приостановленные статусы договора
contract.status.active.codes=0
contract.status.suspend.codes=3,4
# Проверка цены в тарифе: 0 - проверка отсутсвует, 1 - ошибка, только если у сессии есть трафик определенного типа,
# но для него нет цены, 2 - ошибка, если хотя бы для одного типа трафика в привязке типа сервиса нет цены (по умолчанию - 1)
#http://forum.bgbilling.ru/viewtopic.php?p=65629#p65629
accounting.tariffication.checkPrice=0
# Режим активации учетного периода, если не используется скрипт на событие активации,
# 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

Типы трафиков и привязки

Типы трафиков

Файл:traffic_types.png

Привязки

Radius - full

Простая привязка с 2 типами трафика: входящий/исходящий, которые берутся из стандартных счетчиков радиус-пакетов родительской сессии. Для входящего: вендор = -2, атрибут = 1 Для исходящего: вендор = -2, атрибут = 2

Radius - NAT

Привязка для VPN + NAT. Для родительской сессии будет 2 дочерних сессии ISG: IPVPN-NAT-INET и IPVPN-NAT-VPN-xxx, где xxx - скорость. Будем брать трафики из них. Для входящего: вендор = -2, атрибут = 1 Для исходящего: вендор = -2, атрибут = 2 Файл:radius-nat.png

Опции

Заведём опции для соответствующих ISG-сервисов. Опции FLOWON/FLOWOFF нужны для включения/выключения netflow на интерфейсе Файл:options.png

Устройства и ресурсы

Группы устройств

Не используются.

Типы устройств

Мы используем 3 типа устройств:

  • Группа (ProcessGroup) - пустой тип устройств. Указывается в качестве рута для BGInetAccess и BGInetAccounting (см соответствующий раздел)
  • Город - пустой тип устройства, добавлен для разбиения дерева по городам. В будущем, возможно, к нему будут привязываться специфические ProcessHandler-ы, отдельные конфиги или выделяться свои Access и Accounting сервера для каждого города.
  • IPoE - тип устройства для цисок с поддержкой ip subscriber interface + ISG

Файл:devicetype-ipoe.png

Конфиг типа устройства IPoE:

# Realm default атрибуты
radius.realm.default.attributes=cisco-SSG-Account-Info=ADEFAULT;cisco-avpair=subscriber:accounting-list=BG-DSI-IPVRF
#коды ошибок, которые обрабатываются системой Reject-To-Accept (то же самое, что и realm.reject.error)
#http://bgbilling.ru/v5.2/doc/ch18s20.html
#-------reject-to-accept отсутствует
#radius.disable.accessCodes=4,10,11,12,44
# Какие адреса выдавать при ответе Access-Accept в состоянии disable: 
# 0 (по умолчанию) - из radius.disable.ipCategories, 1 - так же, как если бы не было ошибки (в том числе привязанные к сервису в договоре)
#radius.disable.mode=0
# код категории ресурсов Fake пула
#radius.disable.ipCategories=7
# радиус атрибуты, отправляемые в режиме Reject-To-Accept
#radius.disable.attributes=
# Id фиктивного сервиса, к которому будут привязываться сессии, по которым нормальный сервис не был найден (код ошибки: 1, логин не найден).
# Необходим, если в radius.disable.accessCodes присутствует код 1
#radius.disable.servId=
# Атрибуты, при наличии которых соединение должно считаться в состоянии DISABLE (т.е. с ограниченным доступом)
#radius.disable.pattern.attributes=
# Вендор атрибута, где хранится MAC-адрес
# Берём стандартный NAS-Port-Id
radius.macAddress.vendor=-1
# Код атрибута, где хранится MAC-адрес
# Берём NAS-Port-Id
radius.macAddress.type=87
# Префикс атрибута (если есть), где хранится MAC-адрес. Например, для cisco avpair 
#radius.macAddress.prefix=
#Порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт)
radius.port=1700
#
# Режим поиска сервиса: 0 (по умолчанию) - по логину, 1 - по интерфейсу на устройстве (в предобработке должны быть
# проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или INTERFACE_ID), 2 - по VLAN на устройстве (в предобработке
# должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID), 4 - по VLAN на устройстве или
# дочернем устройстве (в предобработке должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID),
# 5 - по MAC-адресу на устройстве (в предобработке должна быть проставлена опция MAC_ADDRESS), 6 - по MAC-адресу на
# устройстве или дочернем устройстве (в предобработке должна быть проставлена опция MAC_ADDRESS).
radius.servSearchMode=1,0
#
# Нужно ли проверять пароль: 0 - нет, 1 (по умолчанию) - да.
radius.password.verification=0
#
# При выдаче access-accept добавлять запись в базу
# необходимо, если используется reject-to-accept и по старт пакету нельзя определить в каком состоянии соединение
#чтобы Access при Access-Accept добавлял соединение в базе со статусом WAIT и указанием выданного состояния и опций
connection.start.fromAccept=1
# Бывают ситуации, когда start-пакет не дошел до Accounting-сервера. В этом случае, при
# 1 (значение по умолчанию) - сессия создастся от текущего момента,
# 2 - Accounting проверит, что время сессии из update/stop пакета не больше, чем значение connection.close.timeout и создаст сессию от ее начала, иначе,
# если время сессии больше чем connection.close.timeout, сессия создастся от текущего момента,
# 0 - сессия без старт-пакета создана не будет.
connection.start.fromUpdate=1
# таймаут перевода соединения в статус suspended при остутствии радиус пакетов
connection.suspend.timeout=1200
# таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout)
connection.close.timeout=1260
#При завершении соединения по сигналу Stop-пакетом (RADIUS-Stop) оно фактически завершается через количество секунд, определяемое переменной connection.finish.timeout. Это позволяет, в частности, реализовать сбор "запоздалой" информации о трафике, которая может прийти после Stop-пакета.
connection.finish.timeout=2
# Проверка на повторную аутентификацию при Access-Request. Бывает нужна в случаях, когда NAS сбрасывает (теряет) сессию, но
# Stop-пакет не присылает и клиент пытается подключиться повторно, но у него стоит ограничение на максимум одну сессию. При совпадении
# callingStationId с одной из активных сессий и установленным параметром: 1 - осуществляется попытка закрытия старой сессии (connectionClose),
# 2 - попытка закрытия сессии (connectionClose) и завершение ее в базе, не дожидаясь стоп пакета, 3 - завершение в базе.
#radius.connection.checkDuplicate=0
#
# Нужно ли убирать домен перед поиском сервиса по логину из поля User-Name. По умолчанию - да (1).
# Следует отключить, если при посылке CoA и PoD пакетов NAS'у необходим атрибут User-Name.
#для IPoE какой пришёл, такой и берём, там не должно быть лишнего
radius.username.removeDomain=0
#
# Нужно ли убирать пробелы из поля User-Name перед поиском логина. По умолчанию - нет (0).
# Следует отключить, если при посылке CoA и PoD пакетов NAS'у необходим атрибут User-Name.
radius.username.removeWhitespace=0
#
# Шаблон вывода ошибки в мониторе с использованием атрибутов из RADIUS-пакета
#radius.accessError.infoPattern=LOGIN:$User-Name
#
# Параметры активации сервисов
# длина паузы, если возникла ошибка
#sa.error.pause=60
# количество заданий за раз
#sa.batch.size=20
# время (сек) ожидания завершения всех заданий (при асинхронной работе)
#sa.batch.wait=5
# пауза (сек) после обработки заданий
#sa.batch.pause=0
# время (сек) ожидания новой задачи перед вызовом disconnect.
#sa.batch.waitNext=5
#
#----------------------------------------
#параметры обработчика активации сервисов
#----------------------------------------
# откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации)
#sa.radius.option.attributesPrefix=radius.inetOption.
#sa.radius.connection.attributes=NAS-Port, Acct-Session-Id, User-Name, Framed-IP-Address, NAS-IP-Address, NAS-Identifier
sa.radius.connection.attributes=Acct-Session-Id, User-Name
#режим отправки CoA. 0 - команды 0xc и 0xb в одном пакете для всех сервисов, 1 - команды 0xc и 0xb в отдельном пакете для каждого сервиса, 2 - атрибуты subscriber:command= в раздельных пакетах для каждого сервиса
sa.radius.connection.coa.mode=1
#Что делать для закрытия соединения:
# 0 (default) - ничего
# 2 - шлём PoD
# 3 - шлём subscriber:command=account-logoff
sa.radius.connection.close.mode=3
#если dhcp lease time большой, а при положительном балансе доступ нужно дать (даже если адрес сейчас выдан серый), нужно установить 1
sa.radius.connection.coa.onEnable=0
#атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1)
#sa.radius.disable.attributes={@radius.disable.attributes}
#фиксированные атрибуты, добавляемые в запрос перед отправкой CoA
#sa.radius.coa.attributes=
#добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes)
#sa.radius.realm.addAttributes=0
#фиксированные атрибуты, добавляемые в запрос перед отправкой PoD
#sa.radius.pod.attributes=
#
#
###### VPN services ######
radius.inetOption.1.template=cisco-SSG-Account-Info=A$optionTitle
#Сопоставление nas-port-id из запроса с id порта в биллинге по имени интерфейса (см ru.dsi.bgbilling.modules.inet.dyn.device.cisco.ISGIPoEProtocolHandler)
radius.ipoe.nas_port_id.pattern.1.pattern=^(?:Gi|Fa)(\d+)/?\d*/(\d+)\.(?=\d{1,4}$)0{0,3}([1-9]\d{0,3})$
radius.ipoe.nas_port_id.pattern.1.replacement=$1/0/$2/$3
radius.ipoe.nas_port_id.pattern.2.pattern=^(?:Gi|Fa)(\d+)/?\d*/(\d+)\.(?=\d{8}$)0{0,3}([1-9]\d{0,3})(?=\d{4}$)0{0,3}([1-9]\d{0,3})$
radius.ipoe.nas_port_id.pattern.2.replacement=$1/0/$2/$4.$3
radius.ipoe.nas_port_id.pattern.3.pattern=^BD(\d+)$
radius.ipoe.nas_port_id.pattern.3.replacement=255/0/$1

Обратите внимание на строчку:

radius.inetOption.1.template=cisco-SSG-Account-Info=A$optionTitle

ServciceActivator

ProtocolHandler

Устройства

IP-ресурсы

Не используются.

VLAN-ресурсы

Не используются.

Конфигурация на cisco

...

TODO

  • Автоконфигурирование интерфейса по telnet/ssh при создании/удалении
Личные инструменты