Настройка NASов

Основная информация, которую должна содержать конфигурация NASа - это его идентификатор, IP-адрес и секрет (необходим для шифрования пароля пользователя, должен совпадать на RADIUS-клиенте и сервере).

Кроме того, к нему должны быть привязаны услуги, определены параметры инспектора (осуществляет управление NASом с целью проверки активности соединения, либо его завершения).

images/download/attachments/43385732/x_284.gif

Настройка сервера доступа происходит в два шага.

Сначала кнопкой Новый элемент создаётся новый NAS, ему прописывается идентификатор (что будет приходить от него в атрибуте NAS-Identifier), IP-адрес (что будет приходить от него в атрибуте NAS-IP-Address), RADIUS-секрет, вендор и комментарий. Список вендоров задаётся в конфигурации модуля. После нажатия кнопки Ок должна появиться новая строка в таблице.

Обязательно устанавливайте правильного вендора для NASа.

Двойным кликом мыши откройте её для редактирования и кнопкой Создать добавьте текстовую конфигурацию. Название - произвольное.

Возможна также настройка общих конфигураций для NASов. Создание общих конфигураций происходит аналогично описанному далее, за исключением того, что они могут использоваться в нескольких NASах. При этом локальные настройки имеют больший приоритет (т.е. если оба флага присутствуют и во включенной общей, и в выбранной локальной конфигурациях, то будет использован локальный).

images/download/attachments/43385732/dialup_nas_common_config.png

Содержимое конфигурации может меняться в зависимости от типа NASа, но обязательно содержит следующие данные:

#телефоны по портам, * - все порты (если параметр не указан, вызываемый номер берётся из Calling-Station-Id)
#nas.port_phone.*=900111
#числовые коды услуг времени, трафика входящего и исходящего
nas.port_time.default.*=XXX
nas.port_traffic.default.*=XXX
#разрешение активировать все типы карточек на этом NASе
card.activate.service=0
#поддержка CallBack (1-включено)
callback.support=0
#принудительный разрыв соединений на границе месяца
month.break=1
#время в секундах после начала месяца, в течении которого должны быть сброшены соединения предыдущего месяца с NASа
month.break.period=3600
#интервал между посылками на проверку, либо сброс соединения в секундах
nas.inspector.sleep_time=60
#максимальное число попыток сброса соединения
nas.inspector.kill.max_messages=5

Режим работы UPDATE, либо CHECKER может быть задан независимо для каждого NASа опцией dialup.workmode аналогично конфигурации модуля DialUP. Если режим не установлен - используется значение режима из конфигурации модуля.

Наиболее важной настройкой каждого из NASов является конфигурация услуг. Она определяет, с какими услугами модуля будут сопоставлены трафики соединения и его время. Конфигурация услуг должна быть определена для каждого сочетания REALM+NAS-Port, доступного на данном NASе, в противном случае при авторизации будет выведена ошибка Not found service id.

Разделение по REALMу позволяет выделять отдельные услуги на разные сервисы, потребляемые пользователем. Например, вход просто с логином являет из себя услугу VPN-время, для которой определена цена 0 в тарифном плане и для данного типа входа обсчитывается трафик. А вход под REALMом time (login@time) определяет услугу время как VPN-повременный, для которой в том же тарифе определена ненулевая цена, а трафик при данном входе не учитывается (пустая конфигурация трафиков).

Разделение по порту предоставляет возможность разделения услуг для многоканальных и обычных телефонов доступа в пределах одного NASа.

Строка привязки услуги типа "время" к REALMу и порту выглядит следующим образом:

nas.port_time.<realm>.<port>=<sid>

где:

  • <realm> - REALM под которым авторизуется пользователь (если после логина ничего не указано - REALM считается default);

  • <port> - NAS-Port на который авторизуется пользователь, возможность привязки отдельной услуги типа время на выделенные порты полезна, например, для выделения многоканальных телефонов, * - любой порт;

  • <sid> - числовой код услуги типа "время".

Привязка услуг типа "трафик" к REALMу и порту выглядит следующим образом:

nas.port_traffic.<realm>.<port>=<service1>;<service2>;...<serviceN>

где значения <realm> и <port> идентичны таким же параметрам в указании услуги типа "время", а записи <serviceX> представляют из себя строку следующего вида:

<sid>:<keyword>

где <sid> определяет код услуги типа "трафик", а <keyword> может принимать следующие значения:

  • RADIN - объем услуги в байтах, получается на основании RADIUS-пакета (атрибуты Acct-Output-Octets, Acct-Output-Gigawords);

  • RADOUT - объем услуги в байтах, получается на основании RADIUS-пакета (атрибуты Acct-Input-Octets, Acct-Input-Gigawords);

  • RAD(<vcode>,<atrcode>,<prefix>) - объем услуги в байтах, получается на основании RADIUS-пакета, строкового атрибута с кодом <atrvcode> вендора с кодом <vcode>, трафик указывается после префикса <prefix> и одного символьного разделителя. Например: 7:RAD(12341,10,local) - получение трафика по седьмой услуге из атрибута MPD mpd-output-octets после префикса "local:";

  • COLLECTOR - объем услуги в байтах, получается по информации NetFlow-коллектора (коллектор определяет тип услуги на основании привязок услуг из конфигурации модуля, см. настройку встроенного коллектора);

  • MAX(<sid2>,<sid3>) - услуга <sid> вычисляется как максимум из услуг <sid2>, <sid3> на каждый из моментов обсчёта;

  • SUM(<sid2>,<sid3>, <sid4>, <sid5>) - услуга <sid> вычисляется как сумма услуг <sid2>..<sid5> на каждый из моментов обсчёта, количество параметров функции может быть от двух до четырёх

При получении трафика посредством NetFlow, либо sFlow-протокола необходима соответствующая настройка встроенного коллектора и конфигурации NASа.

В случае, если трафик не нужно тарифицировать и учитывать, вы можете оставить в конфигурации только:

nas.port_traffic.<realm>.*=

Услуга времени должна быть определена всегда.

Рассмотрим несколько примеров записи конфигураций услуг для NASа:

Простейший случай

Ставится задача обсчёта суммарного входящего трафика клиента. При этом в вашем модуле DialUP заведены 3 услуги - Время (1), Входящий трафик (2), Исходящий трафик (3). А в тарифном плане клиента указаны цены за эти услуги (включая нулевые за время и исходящий трафик). В этом случае конфигурация времени и трафиков будет выглядеть следующим образом:

nas.port_time.default.*=1
nas.port_traffic.default.*=2:RADIN;3:RADOUT

Обсчёт максимального трафика

Ставится задача обсчёта времени работы и максимального из трафиков клиента. При этом в модуле DialUP заведены 4 услуги - Время (1), Входящий трафик (2), Исходящий трафик ( 3), Максимальный трафик (4). В тарифном плане клиента должны быть указаны 4 цены (2 из них нулевые - за входящий и исходящий трафик). Конфигурация будет выглядеть следующим образом:

nas.port_time.default.*=1
nas.port_traffic.default.*=2:RADIN;3:RADOUT;4:MAX(2,3)

Начиная с 4.2 версии в конфигурации трафика возможно использование функции SUM - суммарный трафик. Её использование аналогично MAX, но параметрами могут выступать до 4х кодов услуг.

Обсчёт суммарного трафика

Ставится задача обсчёта времени работы и суммарного из трафиков клиента. При этом в модуле DialUP заведены 4 услуги - Время (1), Входящий трафик (2), Исходящий трафик (3), Максимальный трафик (4). В тарифном плане клиента должны быть указаны 4 цены (две из них с нулевой ценой - за входящий и исходящий трафик). Конфигурация будет выглядеть следующим образом:

nas.port_time.default.*=1
nas.port_traffic.default.*=2:RADIN;3:RADOUT;4:SUM(2,3)

Обсчёт трафика с делением по типам в пределах сессии

Ставится задача обсчитывать по разным ценам локальный и глобальный входящий трафик клиентов. В модуле DialUP заводится 3 услуги: Время (1), Локальный входящий (2), Глобальный входящий (3). В тарифном плане определены все 3 стоимости.

nas.port_time.default.*=1
nas.port_traffic.default.*=2:COLLECTOR;3:COLLECTOR

Ключевое слово COLLECTOR в последнем случае обозначает, что трафик данного типа будет предоставляться со встроенного коллектора. О установке и настройке встроенного NetFlow-коллектора для BGRadiusDialup читайте далее.

Использование REALMов

Ставится задача предоставления доступа по трафику и двух видов повременного доступа на скоростях 64 кбит/с и 256 кбис/с с различной оплатой часа. Для повременного соединения пользователь вводит имя пользователя login@64k, login@256k. Для данных REALMов в конфигурации модуля должны быть определены атрибуты RADIUS, устанавливающие параметры скорости.

В модуле DialUP заводятся 5 услуг: Время обычное (1), Входящий трафик (2), Исходящий трафик (3), Время 64k (4), Время 256k (5). В тарифном плане определены цены: 1 - нулевая стоимость, 2 и 3 - стоимость трафиков обычного соединения, 4 - стоимость соединения на скорости 64кбит/с за единицу времени, 5 - стоимость соединения на скорости 256kбит/с за единицу времени.

nas.port_time.default.*=1
nas.port_traffic.default.*=2:RADIN;3:RADOUT
nas.port_time.64k.*=4
nas.port_traffic.64k.*=
nas.port_time.256k.*=5
nas.port_traffic.256k.*=

Обратите внимание, что для повременного доступа конфигурации услуг трафиков пустые, т.е. трафики не учитываются вовсе.

Разделение по портам

Ставится задача тарификации DialUP-доступа по времени, при этом определённые порты NASа (1 и 5) являются многоканальными, стоимость часа на них выше, чем на остальных. В модуле DialUP заводятся 3 услуги: Время простое (1), Время многоканальный (2). В тарифном плане клиента определяются стоимости часа по каждой из услуг.

nas.port_time.default.1=2
nas.port_time.default.5=2
nas.port_time.default.*=1
nas.port_traffic.default.*=

Чтобы прописать пул IP-адресов, добавьте в конфигурацию NASа строку (пример пула из 3х адресов):

nas.pools.myPool=192.168.169.3-192.168.169.4;192.168.169.33

После ключевого слова nas.pools. указывается имя пула (myPool). После знака равенства определяются один или несколько диапазонов, либо единичных адресов, разделённых точкой с запятой. Пулы, определённые в конфигурации NASов, более приоритетные, чем определённые в конфигурации модуля. Т.е. если пользователю атрибутами сопоставлен некий пул, и пул с таким именем определён как в конфигурации NASа, так и модуля, будет выбран пул из NASа.

Обратите внимание на параметр card.activate.service - это ограничение по типам Интернет-карточек, которые можно активизировать на данном NASе.

0 означает, что на нем можно активизировать любую карточку, в противном случае через точку с запятой необходимо перечислить коды услуг активации карт, разрешённых к активации на данном NASе.

Опция month.break означает, что RADIUS-сервер будет принудительно разрывать соединения на границе месяца для данного NASа. Сделано это для того, чтобы в ходе работы в следующем месяце у клиента не изменялся баланс за предыдущий, т.к. изменяется баланс того месяца, где началось соединение.

Остальная часть конфигурации NASа различается для серверов различного типа и отвечает за настройку инспектора - управляющим ходом соединений подсистемы. Задача инспектора - проверка активности соединения (для режима CHECKER) и сброс соединения по событию биллинга.

Все инспекторы, кроме универсального PoD, работают по протоколу SNMP. SNMP-порт и community устанавливаются следующим образом (дополнительно можно скорректировать размеры входящего/исходящего буферов сокета):

#SNMP порт и пароль (не нужны для PoD инспектора)
nas.inspector.snmp.port=161
nas.inspector.snmp.community=XXXXX
#входящий буфер в мегабайтах
nas.inspector.snmp.buffer.in=4
#исходящий буфер в мегабайтах
nas.inspector.snmp.buffer.out=4

Далее, в зависимости от типа NASа, устанавливаются опции.

1. Huawei Expert (vendor=2011).

snmp.version=1
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.2011.2.3.4.3.5.2.1.3.0
nas.inspector.snmp.check.oid=1.3.6.1.4.1.2011.2.3.4.3.5.2.1.5.0
nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorHuaweiExpert

2. Unix PPP (vendor=2021).

snmp.version=2
#возможные значения 2.4.2 и 2.4.3, для 2.4.4 указывается версия 2.4.3
pppd.version=2.4.2
nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorPPPD
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.2021.255.1
nas.inspector.snmp.check.oid=1.3.6.1.4.1.2021.255

3. FreeBSD MPD 4.x, 5.x (vendor=12341).

dialup.workmode=1
snmp.version=2
nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorMPD
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.2021.255.1
nas.inspector.snmp.check.oid=1.3.6.1.4.1.2021.255

4. Cisco 53x (vendor=9), либо другие модели Cisco см. здесь.

snmp.version=2
nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorCisco
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.9.9.150.1.1.3.1.5
nas.inspector.snmp.check.oid=1.3.6.1.4.1.9.9.150.1.1.3.1.5
#возможна ситуация, когда в Acct-Session-Id передаётся не только код сессии, но и дополнительная "приставка" вначале
#данная опция вырезает из Acct-Session-Id строку от 4го символа для получения SNMP-кода сессии, вместо 4 может быть указано любое число
#session.mode=hex4

5. Cisco 36x (vendor=9).

nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorCisco36x
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.9.2.9.10.0
nas.inspector.snmp.check.oid=1.3.6.1.4.1.9.2.9.2.1.18

6. Lucent Acsend (vendor=529).

nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorCisco
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.529.12.3.1.3
nas.inspector.snmp.check.oid=1.3.6.1.4.1.529.12.3.1.4
#раскомментировать, если код сессии (Acct-Session-Id) приходит в десятичном формате
#session.mode=dec

7. US Robotics NetServer (vendor=429).

nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorUSRoboticsNetServer
nas.inspector.snmp.check.oid=1.3.6.1.4.1.429.4.10.1.1.18
nas.inspector.snmp.kill.oid=1.3.6.1.4.1.429.4.10.13

8. MS RRAS для W2K (vendor=311).

nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.SNMPNasConnectionInspectorMsRRAS

9. Универсальный инспектор, вызывающий для проверки и разрыва соединения внешний скрипт с набором параметров командной строки.

nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.ScriptNasConnectionInspector
#путь к внешнему скрипту проверки, если код выполнения будет 1 - абонент активен, если другой - неактивен
#требуемые параметры командной строки указываются после имени скрипта следующим образом ${NAS_IP} ${NAS_ID} ${USER_LOGIN} ${USER_SESSION} ${USER_PORT}
#например, /usr/local/check.pl ${NAS_IP} ${USER_PORT}
nas.inspector.check.command=
#путь к внешнему скрипту разрыва соединения
#требуемые параметры командной строки указываются после имени скрипта следующим образом ${NAS_IP} ${NAS_ID} ${USER_LOGIN} ${USER_SESSION} ${USER_PORT}
#например, /usr/local/kill.pl ${NAS_IP} ${USER_PORT}
nas.inspector.kill.command=

10. WiFi-портал модуля Dialup.

nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.WiFiConnectionInspector
nas.inspector.wifi.host=<IP адрес, где поднят wifi-агент>
nas.inspector.wifi.port=<порт, на котором поднят wifi-агент >

11. Универсальный инспектор для всех NASов с поддержкой PoD. Использование возможно только в режиме обсчёта UPDATE. Дополнительно данный инспектор обладает возможностью отправки CoA-запросов согласно настройкам в тарифном плане для изменения параметров сессии без разрыва соединения.

Код
dialup.workmode=1
#
nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.PodNasConnectionInspector
#на какой порт слать PoD/CoA запросы
nas.inspector.radius.port=1812
#на какой хост слать (если не указан - берется IP-адрес NASа)
#nas.inspector.radius.host=
#секрет для подписи пакетов (если не указан - берется секрет NASа)
#nas.inspector.radius.secret=
#какие атрибуты добавлять в PoD/CoA-запрос из сессии, если пустой параметр - высылаются все атрибуты
nas.inspector.radius.attributes=User-Name;Framed-IP-Address;Acct-Session-Id
#опции, относящиеся только к CoA-пакетам
#таймаут ожидания ответа в секундах между попытками отправки пакета СoA
nas.inspector.coa.timeout=5
#количество попыток отправить пакет CoA
nas.inspector.coa.retries=2
#количество потоков отправки CoA-пакетов
nas.inspector.coa.threads=4
#отправка при смене CoA-пакета всех атрибутов, аналогично ответу на авторизацию
#nas.inspector.coa.send.all.attributes=1
#логирование в RADIUS-логе сессии, отправляемых CoA-пакетов
#coa.log=1
#фиксированные атрибуты CoA-пакета
#nas.inspector.coa.fixed.attributes=
#фиксированные атрибуты PoD-пакета
#nas.inspector.pod.fixed.attributes=
#отправка PoD-пакета вместо CoA
#nas.inspector.send.pod.instead.coa=1

Подробные инструкции по интеграции BGRadiusDialup с различными NASами доступны в WiKi.

Для использования дополнительной возможности некоторых NASов самостоятельно ограничивать трафик, либо время соединения RADIUS способен высылать атрибуты с максимальными значениями трафика, либо времени с учётом текущего баланса пользователя.

Чтобы RADIUS отправлял атрибут с ограничением, он должен быть прописан в текущем REALMе пользователя, либо в дополнительных атрибутах логина.

Далее необходимо указать, что данный атрибут является ограничительным по какой-либо услуге, это производится в конфигурации NASа подобным образом:

service.limit.attribute=<Название атрибута>:<Код услуги>

Пример

В модуле DialUP есть услуга "Входящий трафик" с кодом 23 и мы хотим, используя простейшие линейные тарифы, устанавливать ограничение на трафик соединения. Для этого в конфигурации модуля DialUP указывается.

realm.default=...;WISPr-Bandwidth-Max-Down=64000;ChilliSpot-Max-Output-Octets=limit

А в конфигурации NASа:

service.limit.attribute=ChilliSpot-Max-Output-Octets:23

Теперь данный атрибут с ограничением трафика будет высылаться всем подключившимся пользователям. Расчёт атрибута производится исходя из тарифного плана клиента.

Для того, чтобы отправлять дубликаты аккаунтинг запросов на другой хост, необходимо добавить в конфиг NASа такие параметры:

#Хост и порт, на который отправлять дубликат аккаунтинг RADIUS-пакета
radius.forward.host=
radius.forward.port=
#Секрет, которым подписывать пакет, если не указан, то используется секрет NASa
#radius.forward.secret=
#Префикс, который нужно добавлять к атрибуту User-Name
#radius.forward.user.name.prefix=
#Суффикс, который нужно добавлять к атрибуту User-Name
#radius.forward.user.name.suffix=