Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Иногда есть необходимость пересылать RADIUS-Accounting пакеты на сторонний сервер - например, на устройство СОРМ, для корректной его работы. Для дублирования полученных RADIUS Accounting-запросов на сторонний сервер в В BGBilling есть возможность осуществлять пересылку Radius-пакетов (как запросов, так и ответов) во внешние системы. Это бывает необходимо для реализации зеркалирования radius-трафика на сервера СОРМ. Для каждого типа пакета можно задать отдельные настройки пересылки. В конфигурации устройства или типа устройства -NAS'а следует указать можете указать следующие опции (также их можно указать в конфигурации корневого устройства):

Блок кода
languageruby
# хост, #хост, на который будут зеркалироваться accounting-запросы (start, stop, update)
#устаревшим вариантом данной опции является опция radius.forward.host=<host>
radius.forward.accounting.request.host=<host>
#порт, на который будут ретранслироваться пакетызеркалироваться accounting-запросы (start, единственный обязательный параметр для включения функционала
radius.forward.host=<host>
# порт, stop, update). По-умолчанию 1813
#устаревшим вариантом данной опции является опция radius.forward.port=<port>
radius.forward.accounting.request.port=<port>
#исходящий порт, с которого будут зеркалироваться accounting-запросы (start, stop, update). Если опция не задана, то возьмется любой свободный порт в системе
radius.forward.accounting.request.source.port=<source_port>

#хост, на который будут зеркалироваться accounting-ответы
radius.forward.accounting.response.host=<host>
#порт, на который будут зеркалироваться accounting-ответы
radius.forward.accounting.response.port=<port>
#исходящий порт, с которого будут зеркалироваться accounting-ответы. Если опция не задана, то возьмется любой свободный порт в системе
radius.forward.accounting.response.source.port=<source_port>

#хост, на который будут ретранслироваться пакеты, по умолчанию равен 1813
зеркалироваться access-запросы
radius.forward.access.request.host=<host>
#порт, на который будут зеркалироваться access-запросы
radius.forward.access.request.port=<port>
#исходящий порт, с которого будут зеркалироваться access-запросы. Если опция не задана, то возьмется любой свободный порт в системе
radius.forward.access.request.source.port=<source_port>

#хост, на который будут зеркалироваться access-ответы
#устаревшим вариантом данной опции является опция radius.answer.forward.host=<host>
radius.forward.access.response.host=<host>
#порт, на который будут зеркалироваться access-ответы
#устаревшим вариантом данной опции является опция radius.answer.forward.port=<port>
radius.forward.access.response.port=<port>
#исходящий порт, с которого будут зеркалироваться access-ответы. Если опция не задана, то возьмется любой свободный порт в системе
radius.forward.access.response.source.port=<source_port>

# RADIUS-секрет, которым будет подписан пакет, по умолчанию берётся секрет NASа
radius.forward.secret=<secret>
# префикс к значению атрибута User-Name из аккаунтинг accounting-пакета, если не указан - префикс не добавляется
radius.forward.user.name.prefix=<prefix>
# суффикс к значению атрибута User-Name из аккаунтинг пакетaccounting-пакета, если не указан - суффикс не добавляется
radius.forward.user.name.suffix=<suffix>
# шаблон значения атрибута User-Name. -Возможные можетзначения:
быть# указано1) значение $contractTitle, чтобы- User-Name былбудет заменен на номер договора,
# для этого в конфигурации корневого устройства 2) $contractId - User-Name будет заменен на id договора из таблицы contract
# 3) $servId - id сервиса модуля Inet.
# 4) $contractId_$servId - склеивание id договора с id сервиса для уникальности (может понадобится, если на договоре несколько сервисов)
# Для корректной работы данного механизма должен быть указан параметр radius.forward.after.process=1, # т.к. номер договора будет известен только после обработки
#radius.forward.user.name.pattern=$contractTitle
# Размер очереди radius-пакетов для пересылки. По умолчанию равно 500. В случае переполнения данной очереди пакет будет проигнорирован.
#radius.forward.maxQueueSize=500

Обратите внимание на следующий момент. Все запросы и ответы будут иметь один и тот же srcIp:srcPort и dstIp:dstPort. И получается, что биллинг как бы является автором этих запросов и ответов, что может привести к невозможности сопоставления друг другу запросов и ответов на стороне СОРМа. Возможно, что в данном случае придется осуществлять подмену адресов и портов в ином месте (с помощью iptables или на коммутаторе или иным способом).

Данные параметры (если необходимы) нужно указывать в конфигурации корневого устройствамодуля:

Блок кода
languageruby
# если указано, отправка происходит после предобработки (по умолчанию - перед предобработкой)
#radius.forward.after.preprocess=0
# если указано, отправка происходит после обработки
#radius.forward.after.process=0
# если указано, то будут отправляться access-запросы после их обработки приложением.
#radius.forward.access.request=0

Где:

  • <host> - хост, на который будут ретранслироваться пакеты, единственный обязательный параметр для включения функционала;
  • <port> - порт, на который будут ретранслироваться пакеты, по умолчанию равен 1813;
  • <secret> - RADIUS-секрет, которым будет подписан пакет, по умолчанию берётся секрет NASа;
  • <prefix> - префикс к значению атрибута User-Name из аккаунтинг пакета, если не указан - префикс не добавляется;
  • <suffix> - суффикс к значению атрибута User-Name из аккаунтинг пакет, если не указан - суффикс не добавляется.

...

Пример с подстановкой номера договора в атрибут User-Name, в корневом устройствеконфигурации модуля:

Блок кода
languageruby
radius.forward.after.process=1

...