Настройка NASов
Основная информация, которую должна содержать конфигурация NASа - это его идентификатор, IP-адрес и секрет (необходим для шифрования пароля пользователя, должен совпадать на RADIUS-клиенте и сервере).
Кроме того, к нему должны быть привязаны услуги, определены параметры инспектора (осуществляет управление NASом с целью проверки активности соединения, либо его завершения).
Настройка сервера доступа происходит в два шага.
Сначала кнопкой Новый элемент создаётся новый NAS, ему прописывается идентификатор (что будет приходить от него в атрибуте NAS-Identifier), IP-адрес (что будет приходить от него в атрибуте NAS-IP-Address), RADIUS-секрет, вендор и комментарий. Список вендоров задаётся в конфигурации модуля. После нажатия кнопки Ок должна появиться новая строка в таблице.
Обязательно устанавливайте правильного вендора для NASа.
Двойным кликом мыши откройте её для редактирования и кнопкой Создать добавьте текстовую конфигурацию. Название - произвольное.
Возможна также настройка общих конфигураций для NASов. Создание общих конфигураций происходит аналогично описанному далее, за исключением того, что они могут использоваться в нескольких NASах. При этом локальные настройки имеют больший приоритет (т.е. если оба флага присутствуют и во включенной общей, и в выбранной локальной конфигурациях, то будет использован локальный).
Содержимое конфигурации может меняться в зависимости от типа 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 читайте далее.
Ставится задача предоставления доступа по трафику и двух видов повременного доступа на скоростях 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=