Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

В данном примере MikroTik выступает в роли DHCP-сервера, шейпера и фаерволлафайерволла. Поддержка IPoE-сессий у RouterOS отсутствует, поэтому пакетов RADIUS-аккаунтинга сервер доступа не отправляет, только запросы авторизации. Сбор данных о потреблённом абонентом трафике при такой схеме доступа можно выполнять, например, через агрегацию NetFlow.

...

  1. В поле Тип оборудования указываем номенклатурную позицию абонентского оборудования, например Оконечное оборудование.
  2. В поле Теги услуг выбираем тег, которым промаркировали на предыдущем этапе интернет-тарифы.
  3. Заполняем Наименование.
  4. В блоке Состояние услуги отмечаем все состояния: DHCP-сервер должен выдавать активным абонентам параметры доступа к сети при любом состоянии услуги. Единственным исключением является технологическое состояние Услуга заказана.
    Создание шаблона профилей абонентского оборудованияImage Removed
    Создание шаблона профилей абонентского оборудованияImage Added

  5. Нажимаем на кнопку Добавить — форма создания шаблона сменится формой его редактирования:
    Добавление атрибутов в шаблон профилей абонентского оборудованияImage Removed
    Добавление атрибутов в шаблон профилей абонентского оборудованияImage Added

Наполняем шаблон атрибутами с помощью кнопки Добавить на форме его редактирования:

ПодстановкаНаименованиеПараметры
Адрес компонента оборудованияIP-Address
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Нет.
  • Обязательный атрибут — Да.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Тип адреса — IP-адрес.

    • Вид адреса — Фактический адрес.

    • Внешний адрес — Не важно.

    • Состояние адреса — Не важно.

    • Возвращаемое значение — Код.

Состояние услугиService-Status
  • Временной интервал — Прочерк.
  • Обязательный атрибут — Да.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — Код

 Дочерняя строка приказа по ценамSpeed-Download-kbps
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Нет.
  • Обязательный атрибут — Нет.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — Скорость.

    • Единица измерения скорости — Кбит/с.

    • Услуга — Интернет-трафик вх.

Дочерняя строка приказа по ценамSpeed-Upload-kbps
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Нет.
  • Обязательный атрибут — Нет.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — Скорость.

    • Единица измерения скорости — Кбит/с.

    • Услуга — Интернет-трафик исх.

Info
  • В данном примере предполагается, что IP-адреса у всех абонентов статические.
  • Профили будут формироваться для Оконечного оборудования, а IP-адрес привязывается к его компоненту — используем подстановку Адрес компонента оборудования.

    Атрибут с IP-адресом
  • Атрибуты с подстановкой Дочерняя строка приказа по ценам могут быть вычислены системой только когда по услуге выставлен инвойс — необходимо учитывать это при настройке агента HARD и команд управления MikroTik.
Info

Абонентское оборудование (Оконечное оборудование) должно быть привязано к операторскому (порт коммутатора). При обработке DHCP-запроса будет подбираться профиль операторского оборудования по данным опции 82, а из него будет извлекаться привязанный профиль абонентского оборудования.

 


Меняем состояние шаблона на Активен и нажимаем Сохранить, после чего переформировываем профили по новому шаблону.

Открываем вкладку Профили абонентского оборудования, подписанного на промаркированный тегом интернет-тариф пакет услуг, и убеждаемся, что профили сформировались корректно. Периоды действия профилей определяются периодами действия участвующих в них привязок адресов к оборудованию, поэтому в данном случае у каждого оборудования с одним привязанным IP-адресом должно быть два профиля:

Профили абонентского оборудования

Шаблон конфигураций

В разделе Оборудование → Шаблоны конфигураций создаём новый шаблон:

  1. Заполняем Наименование, например IPoE-доступ через MikroTik.
  2. В поле Шаблон абонентского профиля выбираем созданный на предыдущем этапе шаблон MikroTik IPoE.
  3. В поле Шаблон операторского профиля выбираем ранее настроенный шаблон Абонентский порт коммутатора.
  4. В поле Тип привязки выбираем Сетевое соединение — именно с этим типом необходимо будет абонентское оборудование привязывать к портам коммутаторов.
  5. Устанавливаем флаг Удалять подстановки без значений из команд.
  6. В разделе Команды вводим шаблоны команд для управления доступом абонента к сети Интернет через MikroTik:

    Code Block
    languagebash
    titleПодключение
    /usr/local/hydra-scripts/mikrotik_control.py --action=activate --ip-address={NEXT.IP-Address} --next-down-speed-kbps={NEXT.Speed-Download-kbps} --next-up-speed-kbps={NEXT.Speed-Upload-kbps} --next-serv-status={NEXT.Service-Status}
    Code Block
    languagebash
    titleОтключение
    /usr/local/hydra-scripts/mikrotik_control.py --action=drop --ip-address={PREV.IP-Address} --prev-down-speed-kbps={PREV.Speed-Download-kbps} --prev-up-speed-kbps={PREV.Speed-Upload-kbps} --prev-serv-status={PREV.Service-Status}
    Code Block
    languagebash
    titleИзменение
    /usr/local/hydra-scripts/mikrotik_control.py --action=change --ip-address={NEXT.IP-Address} --prev-down-speed-kbps={PREV.Speed-Download-kbps}  --next-down-speed-kbps={NEXT.Speed-Download-kbps} --prev-up-speed-kbps={PREV.Speed-Upload-kbps} --next-up-speed-kbps={NEXT.Speed-Upload-kbps} --prev-serv-status={PREV.Service-Status} --next-serv-status={NEXT.Service-Status}
    Info

    Если необходимо в отдельных случаях дополнительно управлять коммутатором доступа, например включать и отключать абонентский порт, в данные шаблоны команд можно добавить подстановки с атрибутами Switch-IP-Address и Switch-Port-Number профилей операторского оборудования.

  7. Нажимаем кнопку Добавить и форма создания шаблона сменяется формой его редактирования:

    Редактирование шаблона конфигурацийImage Added

  8. Меняем состояние шаблона на Активен и нажимаем Сохранить.

На вкладке Привязки формы редактирования абонентского оборудования добавляем прямую привязку к нужному порту коммутатора:

Image Added

В результате создания привязки при наличии активных профилей абонентского и операторского оборудования автоматически создаётся конфигурация по настроенному ранее шаблону. Проверяем её на вкладке Конфигурации формы редактирования оборудования:

Активная конфигурация на форме редактирования абонентского оборудованияImage Added

Настройка брокера ActiveMQ

...

Code Block
title/etc/hydra/hard/hard.yml
collapsetrue
# Список активных плагинов
enabled_plugins:
  - 'base/dhcpmikrotik-ipoe-option82'

# Логирование
log:
  # Общий лог агента
  common:
    # Уровень логирования: debug для отладки, info для эксплуатации
    level: 'debug'

# Системные фильтры
filters:
  # Базовая HTTP-аутентификация клиента (hard.pm / hard-dhcp.pm в FreeRADIUS)
  agent.basic_auth:
    main:
      # Логин базовой аутентификации
      login: 'freeradius'
      # Пароль базовой аутентификации
      password: 'freeradius_password'

# Серверные процессы агента
server:
  # IP-адрес сетевого интерфейса для приема запросов
  address: '127.0.0.1'
  # Номер TCP-порта для приема запросов
  port: 11080
  # Количество дочерних процессов агента - обработчиков запросов
  workers: 4

# Подключения к базам данных
connection_pools:
  # Подключение к БД кэша (MongoDB)
  mongo:
    main:
      # IP-адрес mongod
      host: '127.0.0.1'
      # Номер TCP-порта mongod
      port: 27027
      # Наименование базы данных
      name: 'hard_cache'
      # Имя пользователя базы данных
      user: 'hard'
      # Пароль пользователя базы данных
      password: 'mongo_user_password'

  # Подключение к БД провижининга (Oracle)
  database:
    main:
      # Наименование (net service name) базы данных
      name: 'hydra'
      # Имя пользователя базы данных
      user: 'AIS_RADIUS'
      # Пароль пользователя базы данных
      password: 'oracle_user_password'

      # Служебный абонент Гидры
      hydra:
        # Логин пользователя Гидры для доступа к приложению RADIUS-сервер
        user: 'hard'
        # Пароль пользователя Гидры для доступа к приложению RADIUS-сервер
        password: 'hydra_user_password'

# Синхронизация кэша с провижинингом
syncer:
  stomp:
    # IP-адрес сервера ActiveMQ
    host: '127.0.0.1'
    # Номер TCP-порта STOMP-коннектора ActiveMQ
    port: 61613
    # Логин пользователя ActiveMQ
    login: 'hydra'
    # Пароль пользователя ActiveMQ
    password: 'activemq_user_password'

  queues:
    # Наименование ActiveMQ-очереди с сообщениями об изменении профилей оборудования
    profiles: 'hydra_profiles_1'
    # Наименование ActiveMQ-очереди с сообщениями об изменении привязок оборудования
    binds: 'hydra_equipment_binds_1'

...

Добавляем конфигурационный файл экземпляра dhcpmikrotik-ipoe-option82 плагина base агента HARD в соответствии с примером:

Code Block
title/etc/hydra/hard/plugins/base-dhcpmikrotik-ipoe-option82.yml
collapsetrue
plugins:
  base:
    dhcpmikrotik-ipoe-option82:
      actions:
        # Действия authorize и authenticate не используются при работе FreeRADIUS в режиме DHCP-сервера
        authorize:
{}         authenticate: {}

        # Действие post_auth выполняется FreeRADIUS при получении им запросов DHCPDISCOVER, DHCPREQUEST
        post_auth:
          # Для идентификации абонентского оборудования сначала подбираем профиль операторского оборудования
          provider_profile: &get_provider_profile
            # Профиль операторского оборудования нужно искать в БД кэша
            set_by: search_cache
            query:
              # В подопции Remote Id запроса приходит IP-адрес коммутатора, в формате ASCII-HEX.
              # Пример преобразования: 0x495031302e31382e33322e31 → IP10.18.32.1 → 10.18.32.1
              Switch-IP-Address: $request.RAD_REQUEST.DHCP-Relay-Remote-Id.unhex().substring(32)
 
              # В подопции Circuit Id, в последних двух байтах, запроса приходит номер порта
              # Примеры преобразований: 0x000402d7010c → 0c → 12; 0x000402d70105 → 05 → 5
              Switch-Port-Number: $request.RAD_REQUEST.DHCP-Relay-Circuit-Id.substring(12-2).to_i(16)

            # Для авторизации получаем профиль абонентского оборудования
          customer_profile: &get_customer_profile
            # ИзвлекаемПрофиль профиль абонентского оборудования изпривязан профиляк профилю операторского
            set_by: set_first_from_provider_profile
              # В данном примере активный профиль абонентского оборудования может быть только один,
            # поэтому дополнительной фильтрации не требуется
            filter: {}
 
          reply: &auth_reply
            # Профиль абонентского оборудования подобранподобрался -и формируемуслуга ответоказывается
с сетевыми параметрами             - condition: '    $customer_profile.present?()
                          and $customer_profile.attributes.Service-Status == "SERV_STATE_Provision"'
              template:
                RAD_REPLYCHECK: &auth_rad_check
                  # АтрибутыСохраняем данногодля блокаFreeRADIUS будутвсе закодированы FreeRADIUS в соответствующие DHCP-опцииисходные атрибуты RAD_CHECK
                  '*': $request.RAD_CHECK
                  # В качестве правильного пароля для FreeRADIUS подставляем тот, что пришёл в запросе
                   DHCP-Your-IP-Address: $customer_profile.attributes.IP-AddressCleartext-Password: $request.RAD_REQUEST.User-Password

                 DHCP-Subnet-MaskRAD_REPLY: $customer_profile.attributes.Subnet-Mask
    &registered_customer_auth_reply
                  # IP-адрес, который MiktoTik должен выдать устройству
             DHCP-Router     Framed-IP-Address: $customer_profile.attributes.RouterFramed-IP-Address
                  DHCP-DHCP-Server-Identifier: # Наименование списка адресов, в который MiktoTik должен поместить выдаваемый IP-адрес
                  # Списки адресов настроены на MiktoTik и используются для ограничения скорости доступа:
                  # Например список alist_active_speed_limit_5120k_down_5120k_up - симметричное ограничение 5 Мбит/с
                  Mikrotik-Address-List: '   "alist_active_speed_limit_"
                                           + $customer_profile.attributes.RouterSpeed-IPDownload-Addresskbps + "k_down"
                DHCP-Server-IP-Address:                            + $customer_profile.attributes.RouterSpeed-IPUpload-Addresskbps + "k_up"'
                DHCP-Domain-Name-Server:  # Время, по истечении которого MiktoTik повторно запросит авторизацию для абонентского устройства
                  Session-Timeout: '"172.16.0.286400"'
                result: $rlm.OK

 - '"172.16.0.4"'           # Профиль абонентского оборудования подобрался, но услуга не оказывается
            - condition: $customer_profile.present?()
              template:
   DHCP-NTP-Servers:
             # RAD_CHECK формируем так же, как и для полноценного доступа
                RAD_CHECK: *auth_rad_check
                RAD_REPLY:
                  << : *registered_customer_auth_reply
                  # Для заблокированных абонентов отдаём особый Address- '"172.16.0.3"'
  List и короткое время аренды
                  Mikrotik-Address-List: '"172.16.0.4alist_blocked"'
                  DHCP-IP-Address-Lease-TimeSession-Timeout: '"3600600"'
                result: $rlm.OK

            # Профиль абонентского оборудования не найденподобрался - отвечаемотказ
отказом             - template:
                RAD_CHECK:
                  # Сохраняем для FreeRADIUS все исходные атрибуты RAD_CHECK
                  '*': $request.RAD_CHECK
                RAD_REPLY: {}
                 result: $rlm.NOTFOUND

        # Подбор профилей оборудования и формирование ответа выполняется так же, как и в действии authorize
        authenticate:
          provider_profile: *get_provider_profile
          customer_profile: *get_customer_profile
          reply: *auth_reply

        # Действие accounting не используется: приMikroTik работене FreeRADIUSподдерживает вIPoE-сессии режиме DHCP-сервераи не присылает RADIUS-аккаунтинг
        accounting: {}

Настройка сервера FreeRADIUS

Установку и настройку сервера FreeRADIUS выполняем в соответствии со статьёй статьёй Установка и настройка DHCP- сервера FreeRADIUS. В модуле hard-dhcp.pm (файл /etc/freeradius/hard-dhcp.pm) указываем следующие параметры взаимодействия с агентом HARD:

Code Block
languageperl
# Параметры для связи с HARD
my @HARD_API_URLS = (                                     # Пул API URL для запросов
  "http://127.0.0.1:11080/base/dhcpmikrotik-ipoe-option82"
);

use constant HARD_AUTH_USER     => "freeradius";          # Логин
use constant HARD_AUTH_PASSWORD => "freeradius_password"; # Пароль

Пароль в константе HARD_AUTH_PASSWORD укажите тот же, что задан в ключе filters → agent.basic_auth → main → password конфигурации агента HARD.

Результат

...

Настройка агента HEX

Установку агента выполняем в соответствии со статьёй Настройка агента HEX. Конфигурационный файл приводим в соответствие с примером:

Code Block
title/etc/hydra/hex/hex.yml
collapsetrue
log:
  default:
    # Уровень логирования
    level: 'debug'
 
activemq:
  # Хост и порт для подключения к ActiveMQ по протоколу OpenWire
  url: 'tcp://127.0.0.1:61616'
 
hydra:
  # Карта соответствия очередей команд и результатов их выполнения
  command_queues:
    # <Очередь для приёма команд>: <Очередь для отправки результата>
    - 'hydra_commands_1': 'hydra_command_results_1'

Добавляем на сервер указанный ранее в шаблонах команд скрипт /usr/local/hydra-scripts/mikrotik_control.py для управления сервером MikroTik. Данный скрипт может быть написан на любом языке (расширение .py указано здесь только для примера) — важно только, чтобы он мог выполняться агентом HEX локально на сервере. Агент HEX работает под пользователем hex (hex-testing для тестового экземпляра) — данному пользователю выдаём права на исполнение добавленного скрипта.

Info

Сервером MikroTik скрипт может управлять через API RouterOS или же через консоль, подключаясь к серверу по SSH с аутентификацией по DSA или RSA ключу. Во втором случае ключ должен быть настроен для пользователя hex (hex-testing для тестового экземпляра агента).

В данной схеме изменения скорости доступа абонента к сети Интернет, а также блокировки и разблокировки, могут быть выполнены путём помещения IP-адресов абонентского оборудования в соответствующие адресные списки, использующиеся в конфигурации файерволла MikroTik.

Результат

Данные DHCP-опции 82 формируются коммутаторами доступа, которые передают DHCP-запросы абонентских устройств на MikroTik, выступающий в роли DHCP-сервера. MikroTik при получении DHCP-запроса, если подходящая запись об аренде IP-адреса в его кэше отсутствует или просрочена, выполняет RADIUS-запрос к серверу Гидры. В качестве RADIUS-сервера используется FreeRADIUS с Perl-модулем hard.pm, который передаёт полученный запрос на обработку агенту HARD. Агент выполняет идентификацию абонентского оборудования по полученной DHCP-опции 82 и авторизует его в соответствии с состоянием оказания услуг на данном оборудовании.

В ответе для активного абонента серверу MikroTik отправляется статический IP-адрес, максимальный срок DHCP-аренды и наименование адресного списка, в который сервер должен включить выдаваемый IP. Наименование назначаемого адресного списка для активных абонентов формируется агентом динамически в соответствии с указанными в приказах по ценам Гидры значениями скорости трафика. Адресные списки определяются заранее в конфигурации сервера MikroTik и используются им для ограничения скорости доступа абонента к сети Интернет.

Если услуга абоненту не оказывается в связи с временной блокировкой или из-за нехватки средств, то в ответе серверу MikroTik отправляется IP-адрес и специальный адресный список alist_blocked, для которого в MikroTik настроена переадресация HTTP-запросов абонента на страницу с информацией о блокировке.

При регистрации нового абонента, изменении состояния оказания услуги или ограничений скорости доступа (например, при превышении порога трафика для «турбобезлимитного» тарифа), а также при прекращении действия подписки на услугу по конфигурации провижинингом формируются команды для изменения параметров доступа абонентского IP-адреса: удаления записи о DHCP-аренде, перемещении IP-адреса в другой адресный список и т. д.