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

Ключ

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

...

Информация
iconfalse

Начиная с версии 1.6.2524 система WNAM поддерживает работу с контроллерами Cisco нового поколения, использующими операционную систему IOS XE семейства Catalyst 9800 Wireless Controllers. При этом, взаимодействие Взаимодействие реализовано по механизму Central Web Auth (CWA), который разработан компанией Cisco для взаимодействия контроллера с программным обеспечением Cisco ISE. Система WNAM полностью эмулирует поведение ISE в данной задаче. Документация по настройке контроллеров серии 9800 вместе с ISE доступна на сайте производителя контроллера.

Примечание

Данная схема поддержана контроллерами Eltex серии WLC  WLC (начиная с версии ПО 1.30.6) и точками доступа WEP/WOP-30Lx (начиная с версии ПО 2.8.0).

Авторизация по методу CWA основана на следующем:

  • при подключении устройства абонента к сети, контроллером производится RADIUS-запрос к серверу политики (WNAM) с целью получения ACL и URL перенаправления;
  • производится перехват трафика новой веб-сессии и перенаправление пользователя на полученную ссылку (без редиректа на контроллер);
  • осуществляется авторизация на внешней системе (WNAM) и/или показ рекламной/приветственной страницы;
  • по завершении авторизации система WNAM сообщает контроллеру по протоколу RADIUS CoA о необходимости  повторной авторизации сессии пользователя;
  • производится повторная авторизация пользователя контроллером на RADIUS-сервере и применение полученной политики "пропуска";
  • система WNAM осуществляет перенаправление пользователя на заданную ссылку.

При этом , с точки зрения пользователя нет дополнительных редиректов и ассоциированных с этим проблем. При повторном подключении абонента, если включена МАС-авторизация на сервере доступа и "прозрачные повторные сессии" в настройках ограничений, цепочка действий сокращается: 

  • при подключении устройства абонента к сети, контроллером производится RADIUS-запрос к серверу политики (WNAM);
  • если системе авторизации абонент известен, его авторизация валидна (не истекла и не сброшена), абонент не блокирован и после последней сессии подключения прошло время меньше, чем указано в настройках ограничений "прозрачные повторные сессии", система WNAM отвечает сообщением Access-Accept (с некоторыми дополнительными параметрами);
  • устройство абонента получает доступ в сеть Интернет без дополнительных "всплывающих окон" и редиректов.

Этот механизм полезен в случае необходимости поддержки роуминга абонентов между точками доступа либо после кратковременного отключения абонентского устройства от радио.

Предупреждение

Перед настройкой авторизации через CWA необходимо вначале настроить SSID, точки доступа, маршрутизацию, DHCP, а затем протестировать обычный доступ в сеть Интернет без авторизации.

Требования

  • Eltex WLC не ниже версии 1.30.6
  • Eltex AP не ниже версии 2.8.0 с моделью из списка: WEP-30L, WEP-30L-Z,

...

  • WOP-30L, WOP-30LI, WOP-30LS.

Описание

Данная схема работает исключительно по средствам посредством MAB-авторизации.

  1. На ТД настраивается preAuth_ACL (namedACL).
  2. Ссылка редиректа на портал и имя ACL пересылаются точке доступа в пакете Radius Access-Accept по средствам посредством атрибутов:
    Блок кода
    languagebash
    cisco-av-pair = url-redirect-acl=<<Имя настроенного на контроллере ACL>>
    cisco-av-pair = url-redirect=<<Ссылка на портал WNAM>>

...

Взаимодействие ТД с порталом WNAM

Якорь
Взаимодействие ТД с порталом Cisco ISE
Взаимодействие ТД с порталом Cisco ISE

  1. При первом подключении клиента (WNAM ничего о нем не знает, ТД тоже), ТД пытается пройти MAB-авторизацию на NAC-сервере, подставляя MAC-адрес клиента в атрибуты User-Name и User-Password запроса access-request к Radius-серверу. WNAM ничего не знает о данном клиенте (не находит его в своей базе гостевых endpoints), шлет отправляет access-accept содержащий два атрибута (ссылку редиректа на гостевой портал и имя ограничивающего доступ preAuth-ACL):При первом подключении клиента (WNAM ничего о нем не знает, ТД тоже), ТД пытается пройти MAB авторизацию на NAC сервере, подставляя MAC адрес клиента в атрибуты User-Name и User-Password запроса access-request к Radius серверу. WNAM ничего не знает о данном клиенте (не находит его в своей базе гостевых endpoints), шлет access-accept содержащий два атрибута (ссылку редиректа на гостевой портал и имя ограничивающего доступ preAuth-ACL):
    Блок кода
    languagebash
    cisco-av-pair = url-redirect-acl=test1
    cisco-av-pair = url-redirect=http://100.127.2.150/cp/cisco?client_mac=78:98:E8:1E:67:07&switch_url=100.127.2.200&redirect=&wlan=!WNAM.test-portal&ap_mac=68:13:E2:C2:F7:40&sessionId=2564CCA4-772DE0CA
  2. Клиент получает ограниченный доступ (правилами ACL) и редиректится на портал.
  3. Пользователь попадает на страницу саморегистрации, где вводит идентификационные данные (в нашем случае, ваучер).
  4. После ввода кода ваучера, портал инициирует процесс ре-аутентификации клиента, отправляя на ТД CoA-request c атрибутом:
    Блок кода
    Cisco-AVPair: subscriber:command=reauthenticate
  5. ТД запускает повторную MAB-авторизацию, отправляя запроса запрос access-request к Radius-серверу, и получает в ответ пакет Access-Accept, не содержащий дополнительных атрибутов (ссылки редиректа и ACL).
  6. ТД предоставляет клиенту полный доступ и редиректит на заданную в сценарии портальной авторизации страницу (в нашем случае https://eltex-co.ru/).
Примечание

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

Диаграмма подключения

Диаграмма портальной авторизации на ТД, подключенной через контроллер WLC:

...

  1. Подключается к ТД.
  2. ТД выполняет MAB-аутентификацию устройства пользователя.
  3. WLC выполняет проксирование RADIUS-запроса авторизации, что бы чтобы со стороны WNAM выглядело как подключение со стороны одного устройства (WLC).
  4. RADIUS-запрос приходит в WNAM и он в соответствии с настройкой политик проверяет наличие гостевого эндпоинта в БД.
  5. Т.к. подключение происходит в первый раз - эндпоинт не найден, вместе с ответом Access-Accept возвращаются параметры с адресом портала для редиректа и именем ACL (настроенном на WLC, включающий список разрешенных ресурсов, в который должен быть включен  включен адрес портала).
  6. WLC проксирует ответ на ТД, от которой был получен запрос.
  7. Клиент получает IP-адрес и пытается получить доступ в Интернет. В ответ ТД начинает возвращать редирект со ссылкой на портал.
  8. Пользовательское устройство, получая ссылку редиректа, открывает всплывающий браузер и открывает страницу портальной авторизации.
  9. Успешно пройдя саморегистрацию и авторизацию на портале (по средствам посредством ввода ваучера), для устройства клиента добавляется запись о гостевом эндпоинте, содержащая макMAC-адрес клиента.
  10. После успешной авторизации на портале на WLC отправляется запрос CoA re-authenticate.
  11. WLC перенаправляет данный запрос на ТД.
  12. ТД выполняет повторную ре-аутентификацию устройства пользователя с использованием MAB-аутентификации.
  13. WNAM, повторно получив запрос, в соответствии с настройкой политик проверяет наличие гостевого эндпоинта в БД. 
  14. Т.к. ранее пользователь прошел регистрацию на портале - гостевой эндпоинт в БД есть. На ТД отправляется Access-Accept и пользователь получает доступ в сеть.

...

Далее приведен приведен пример настройки Eltex WLC-30 (v.1.30.6) с точкой WEP-30L(2.8.0). Предполагается, что на контроллере уже настроен IP-адрес, обеспечена сетевая связность с сервером WNAM. Руководство по обновлению ПО Eltex WLC-30 можно найти по ссылке. Полностью ознакомится с документацией по настройке контроллера можно на официальном сайте компании https://eltex-co.ru. За основу будет взята заводская конфигурация, пример настройки которой доступен по ссылке.

Настройка конфигурации контроллера

...

Добавить WNAM, как радиус сервер, и настроить проксирование RADIUS-запросов от ТД на него. Так же Также требуется настроить проксирование CoA-запросов со стороны WNAM на ТД через WLC:

...

В настройке WLC настроить профиль SSID, включить портальную авторизацию, создать профиль для портала,   включить das-server на ТД и в настройках RADIUS-профиля указать настройку, чтобы MAC-адрес пользователя подставлялся в пароль:

...

Блок кода
languageplain
object-group service das
  port-range 1700
exit

security zone-pair untrusted self
  rule 2
    action permit
    match protocol udp
    match destination-port object-group radius_auth  # Разрешить UDP -трафик для RADIUS-аутентификации
    enable
  exit
  rule 3
    action permit
    match protocol udp
    match destination-port object-group das          # Разрешить UDP -трафик для CoA-запросов
    enable
  exit
  rule 4
    action permit
    match protocol tcp
    match destination-port object-group ssh          # Разрешить подключение по SSH (Используйте осторожно, если контроллер подключен напрямую к ISP) 
    enable
  exit
  rule 5
    action permit
    match protocol icmp
    enable
  exit
exit

...

В заводской конфигурации WLC-30 предусмотрено автоматическое подключение точек доступа к контроллеру. Для этого требуется подключить точку доступа в порт gi1/0/2 и контроллер WLC сам выполнит обновление, если версия ПО на точке доступа не соответствует версии, которая размещена на контроллере, выполнит конфигурирование в соответствие с настройками: выбранными профилями конфигурации и SSID. Инструкцию по загрузке актуальной версии ПО точек доступа на контроллер можно найти по ссылке.

Настройка WNAM

Якорь
Настройка WNAM
Настройка WNAM

...

В разделе "Конфигурация" → "Сервера доступа" необходимо создать создайте запись о сервере доступа типа Cisco WLC (сервер доступа - контроллер), где указать укажите адрес, имя и местоположение (логин и пароль не используются).

Во вкладке RADIUS необходимо указать в параметрах "Атрибуты предварительной авторизации" укажите:

  • cisco-avpair=url-redirect=http://имя_вашего_сервера_wnam/cp/cisco?%URL%
  • cisco-avpair=url-redirect-acl=test1

При этом, имя Имя ACL должно соответствовать тому имени, что ранее создали созданному на контроллере имени. Параметр %URL% будет заменен системой WNAM при формировании ответа контроллеру. При копировании атрибутов из данных параметров следует убедиться, что они не начинаются с пробелов.

Также допустимы параметры: %HOSTNAME% (имя сервера, как оно выдаётся командой hostname) и %HOSTIP% (IP-адрес сервера). Например вариант:

  • cisco-avpair=url-redirect=https://%HOSTNAME%.provider.ru/cp/cisco?%URL% позволит реализовать отказоустойчивый доступ в кластере двух серверов WNAM: ссылка на сервер с его именем будет отправлена ответе на RADIUS-запрос и на тот сервер, куда попал этот запрос.

Также необходимо указать секретный RADIUS-ключ (который указали на контроллере в настройках ААА-сервера) и включить МАС-авторизацию.

...

Для возможности сброса сессии абонента с контроллера из интерфейса администратора системы WNAM, необходимо установить параметр "uppercase_session_id" в поле "true" в разделе "Конфигурация" → "Дополнительные настройки".

...

Затем необходимо настроить запись о площадке оказания услуги (раздел "Конфигурация" → "Площадки"). Также можно указать название сети (SSID) и в качестве "Дополнительный ID" указать название "Сервера доступа" (NAS).

На вкладке "Авторизация" выбираем для нашего теста метод "Ввод кода с ваучера" и "Запомнить авторизацию" на 3 минуты (что для теста авторизации вполне достаточно).

Так-же Также для теста авторизации можно выбрать метод "Отправка СМС абоненту", провайдера СМС "Тестовый провайдер (без отправки)" и тогда идентификация на портале (в рамках теста авторизации) будет проходить по присланному коду, после ввода фейкового номера телефона (на нашем тестовом стенде данный функционал не доступен, поэтому используем ваучеры).

На вкладке "Приветствие" выбираем, куда будет направляться клиент после финального редиректа. В нашем случае на сайт https://eltex-co.ru/

...

Создание ваучеров для авторизации

'Конфигурация' → 'Гостевая авторизация' → 'Ваучеры' → 'Создать группу ваучеров' 

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

...

В разделе "Конфигурация" → "Правила аутентификации" настраиваем правило, как на скрине ниже.

  • Источник запроса

...

  • – беспроводной
  • Эндпоинт – не известен и просрочен/не валиден (т. к. при первом подключении наш клиент неизвестен и его

...

  • MAC-адрес не изучен

...

  • )
  • Результат – Redirect на гостевой портал авторизации

...

  • (будут переданы атрибуты указанные нами ранее при создании "Сервера доступа")

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

Image ModifiedСоздаем правило

Создание правила аутентификации для доступа клиента в Internet

Данное правило проверяет наличие макMAC-адреса в хранилище гостевых эндпоинтов. МакЬФС-адрес попадает туда после того как клиент идентифицировал себе на гостевом портале. Поэтому в настройках "Эндпоит" выбираем пункт "Известен и валиден", а в "Результат" выбираем "Allow (и проверять правила авторизации)".  Также обращаю внимание на необходимости уникальности тега (объяснение выше)

...

Создание правил авторизации

Первое правило для редиректа на портал

Результатом должно стать отправка пакета Radius 'Access-Accept' контроллеру (NAS) обогащенным двумя атрибутами (ссылкой редиректа на портал и именем ACL)
Пример . Пример настройки представлен на скрине ( ниже).

Примечание

...

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

 

Второе правило авторизации

...

для предоставления доступа в Internet

...

Результатом должно стать: отправка пакета Radius 'Access-Accept' контроллеру (NAS), без дополнительных атрибутов (ссылки редиректа и ACL)
Пример . Пример настройки представлен на скрине ( ниже).

...

После подключения к сети (если клиент не идентифицировался ранее на портале или его сессия не истекла), то его редиректит на клиент будет перенаправлен на гостевой портал.

На котором клиент вводит код ваучера в предназначенное для этого поледанной странице введите код ваучера и нажмите "Подтвердить код".

После ввода кода ваучера и нажатия на кнопку "Подтвердить код", клиента редиректит на страницу, которую мы настроили Клиент будет перенаправлен на страницу, которая была настроена для финального редиректа , при настройке "Площадки" в закладке "Приветствие".

Диагностика на стороне WLC

...

Блок кода
languagebash
titleradius-debug проксирования radius обмена
collapsetrue
wlc-30(debug)# sh radius-debug t 0
(302) Wed Feb 11 10:01:03 2026: Debug: Received Access-Request Id 20 from 192.168.1.3:51780 to 192.168.1.1:1812 length 302
(302) Wed Feb 11 10:01:03 2026: Debug:   User-Name = "78:98:e8:1e:67:07"
(302) Wed Feb 11 10:01:03 2026: Debug:   User-Password = "78:98:e8:1e:67:07"
(302) Wed Feb 11 10:01:03 2026: Debug:   Framed-IP-Address = 0.0.0.0
(302) Wed Feb 11 10:01:03 2026: Debug:   Framed-MTU = 1500
(302) Wed Feb 11 10:01:03 2026: Debug:   Connect-Info = "CONNECT 0Mbps 802.11a"
(302) Wed Feb 11 10:01:03 2026: Debug:   Eltex-AP-Domain = "default-location"
(302) Wed Feb 11 10:01:03 2026: Debug:   Eltex-Domain = "default"
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Port-Id = "7;Vlan-ID=3"
(302) Wed Feb 11 10:01:03 2026: Debug:   Called-Station-Id = "68-13-e2-c2-f7-40:!WNAM.test-portal"
(302) Wed Feb 11 10:01:03 2026: Debug:   Calling-Station-Id = "78-98-e8-1e-67-07"
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Port = 1
(302) Wed Feb 11 10:01:03 2026: Debug:   Framed-MTU = 1500
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Port-Type = Wireless-802.11
(302) Wed Feb 11 10:01:03 2026: Debug:   Acct-Session-Id = "3A03EB20-4E1933E6"
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-IP-Address = 192.168.1.3
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Identifier = "68-13-E2-C2-F7-40"
(302) Wed Feb 11 10:01:03 2026: Debug:   Service-Type = Call-Check
(302) Wed Feb 11 10:01:03 2026: Debug:   Message-Authenticator = 0x6a10e91f1eb8f383bf2236464af8a8a2
(302) Wed Feb 11 10:01:03 2026: Debug: # Executing section authorize from file /etc/raddb/sites-enabled/_default
(302) Wed Feb 11 10:01:03 2026: Debug:   authorize {
(302) Wed Feb 11 10:01:03 2026: Debug:     policy filter_username {
(302) Wed Feb 11 10:01:03 2026: Debug:       if (&User-Name) {
(302) Wed Feb 11 10:01:03 2026: Debug:       if (&User-Name)  -> TRUE
(302) Wed Feb 11 10:01:03 2026: Debug:       if (&User-Name)  {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ / /) {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ / /)  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /@[^@]*@/ ) {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /@[^@]*@/ )  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /\.\./ ) {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /\.\./ )  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
(302) Wed Feb 11 10:01:03 2026: Debug:         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /\.$/)  {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /\.$/)   -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /@\./)  {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&User-Name =~ /@\./)   -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:       } # if (&User-Name)  = notfound
(302) Wed Feb 11 10:01:03 2026: Debug:     } # policy filter_username = notfound
(302) Wed Feb 11 10:01:03 2026: Debug:     [preprocess] = ok
(302) Wed Feb 11 10:01:03 2026: Debug:     if (&Cisco-AVPair && &Cisco-AVPair == "subscriber:command=ip-shaper") {
(302) Wed Feb 11 10:01:03 2026: Debug:     if (&Cisco-AVPair && &Cisco-AVPair == "subscriber:command=ip-shaper")  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:     else {
(302) Wed Feb 11 10:01:03 2026: Debug:       policy get_ssid {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}") {
(302) Wed Feb 11 10:01:03 2026: Debug:         EXPAND %{8}
(302) Wed Feb 11 10:01:03 2026: Debug:            --> !WNAM.test-portal
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  -> TRUE
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  {
(302) Wed Feb 11 10:01:03 2026: Debug:           update request {
(302) Wed Feb 11 10:01:03 2026: Debug:             EXPAND %{8}
(302) Wed Feb 11 10:01:03 2026: Debug:                --> !WNAM.test-portal
(302) Wed Feb 11 10:01:03 2026: Debug:           } # update request = noop
(302) Wed Feb 11 10:01:03 2026: Debug:           [updated] = updated
(302) Wed Feb 11 10:01:03 2026: Debug:         } # if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  = updated
(302) Wed Feb 11 10:01:03 2026: Debug:         ... skipping else: Preceding "if" was taken
(302) Wed Feb 11 10:01:03 2026: Debug:       } # policy get_ssid = updated
(302) Wed Feb 11 10:01:03 2026: Debug:       policy auth_by_ssid_default {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&Called-Station-SSID) {
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&Called-Station-SSID)  -> TRUE
(302) Wed Feb 11 10:01:03 2026: Debug:         if (&Called-Station-SSID)  {
(302) Wed Feb 11 10:01:03 2026: Debug:           policy auth_default {
(302) Wed Feb 11 10:01:03 2026: Debug:             update request {
(302) Wed Feb 11 10:01:03 2026: Debug:             } # update request = noop
(302) Wed Feb 11 10:01:03 2026: Debug:             update control {
(302) Wed Feb 11 10:01:03 2026: Debug:             } # update control = noop
(302) Wed Feb 11 10:01:03 2026: Debug:           } # policy auth_default = noop
(302) Wed Feb 11 10:01:03 2026: Debug:         } # if (&Called-Station-SSID)  = noop
(302) Wed Feb 11 10:01:03 2026: Debug:         ... skipping else: Preceding "if" was taken
(302) Wed Feb 11 10:01:03 2026: Debug:       } # policy auth_by_ssid_default = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     } # else = updated
(302) Wed Feb 11 10:01:03 2026: Debug:     [chap] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     [mschap] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     [digest] = noop
(302) Wed Feb 11 10:01:03 2026: Debug: suffix: Checking for suffix after "@"
(302) Wed Feb 11 10:01:03 2026: Debug: suffix: No '@' in User-Name = "78:98:e8:1e:67:07", looking up realm NULL
(302) Wed Feb 11 10:01:03 2026: Debug: suffix: No such realm "NULL"
(302) Wed Feb 11 10:01:03 2026: Debug:     [suffix] = noop
(302) Wed Feb 11 10:01:03 2026: Debug: files_multi: users: Matched entry DEFAULT at line 1
(302) Wed Feb 11 10:01:03 2026: Debug:     [files_multi] = ok
(302) Wed Feb 11 10:01:03 2026: Debug:     if (&reply:Eltex-Tls-Enabled == 1) {
(302) Wed Feb 11 10:01:03 2026: Debug:     if (&reply:Eltex-Tls-Enabled == 1)  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:     else {
(302) Wed Feb 11 10:01:03 2026: Debug: eap: No EAP-Message, not doing EAP
(302) Wed Feb 11 10:01:03 2026: Debug:       [eap] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     } # else = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     if (ok) {
(302) Wed Feb 11 10:01:03 2026: Debug:     if (ok)  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:     [expiration] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     [logintime] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     [pap] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:   } # authorize = updated
(302) Wed Feb 11 10:01:03 2026: Debug: Starting proxy to home server 100.127.2.150 port 1812
(302) Wed Feb 11 10:01:03 2026: Debug: server default {
(302) Wed Feb 11 10:01:03 2026: Debug:   # Executing section pre-proxy from file /etc/raddb/sites-enabled/_default
(302) Wed Feb 11 10:01:03 2026: Debug:     pre-proxy {
(302) Wed Feb 11 10:01:03 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy)) {
(302) Wed Feb 11 10:01:03 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy))  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:     } # pre-proxy = noop
(302) Wed Feb 11 10:01:03 2026: Debug: }
(302) Wed Feb 11 10:01:03 2026: Debug: Sent Access-Request Id 1 from 0.0.0.0:37773 to 100.127.2.150:1812 length 312
(302) Wed Feb 11 10:01:03 2026: Debug:   User-Name = "78:98:e8:1e:67:07"
(302) Wed Feb 11 10:01:03 2026: Debug:   User-Password = "78:98:e8:1e:67:07"
(302) Wed Feb 11 10:01:03 2026: Debug:   Framed-IP-Address = 0.0.0.0
(302) Wed Feb 11 10:01:03 2026: Debug:   Framed-MTU = 1500
(302) Wed Feb 11 10:01:03 2026: Debug:   Connect-Info = "CONNECT 0Mbps 802.11a"
(302) Wed Feb 11 10:01:03 2026: Debug:   Eltex-AP-Domain = "default-location"
(302) Wed Feb 11 10:01:03 2026: Debug:   Eltex-Domain = "default"
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Port-Id = "7;Vlan-ID=3"
(302) Wed Feb 11 10:01:03 2026: Debug:   Called-Station-Id = "68-13-e2-c2-f7-40:!WNAM.test-portal"
(302) Wed Feb 11 10:01:03 2026: Debug:   Calling-Station-Id = "78-98-e8-1e-67-07"
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Port = 1
(302) Wed Feb 11 10:01:03 2026: Debug:   Framed-MTU = 1500
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Port-Type = Wireless-802.11
(302) Wed Feb 11 10:01:03 2026: Debug:   Acct-Session-Id = "3A03EB20-4E1933E6"
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-IP-Address := 100.127.2.200
(302) Wed Feb 11 10:01:03 2026: Debug:   NAS-Identifier = "68-13-E2-C2-F7-40"
(302) Wed Feb 11 10:01:03 2026: Debug:   Service-Type = Call-Check
(302) Wed Feb 11 10:01:03 2026: Debug:   Message-Authenticator = 0x6a10e91f1eb8f383bf2236464af8a8a2
(302) Wed Feb 11 10:01:03 2026: Debug:   Event-Timestamp = "Feb 11 2026 10:01:03 GMT+7"
(302) Wed Feb 11 10:01:03 2026: Debug:   Proxy-State = 0x3230
(302) Wed Feb 11 10:01:03 2026: Debug: Clearing existing &reply: attributes
(302) Wed Feb 11 10:01:03 2026: Debug: Received Access-Accept Id 1 from 100.127.2.150:1812 to 100.127.2.200:37773 length 244
(302) Wed Feb 11 10:01:03 2026: Debug:   Cisco-AVPair = "url-redirect=http://100.127.2.150/cp/cisco?client_mac=78:98:E8:1E:67:07&switch_url=100.127.2.200&redirect=&wlan=!WNAM.test-portal&ap_mac=68:13:E2:C2:F7:40&sessionId=3A03EB20-4E1933E6"
(302) Wed Feb 11 10:01:03 2026: Debug:   Cisco-AVPair = "url-redirect-acl=test1"
(302) Wed Feb 11 10:01:03 2026: Debug:   Proxy-State = 0x3230
(302) Wed Feb 11 10:01:03 2026: Debug: server default {
(302) Wed Feb 11 10:01:03 2026: Debug:   # Executing section post-proxy from file /etc/raddb/sites-enabled/_default
(302) Wed Feb 11 10:01:03 2026: Debug:     post-proxy {
(302) Wed Feb 11 10:01:03 2026: Debug: eap: No pre-existing handler found
(302) Wed Feb 11 10:01:03 2026: Debug:       [eap] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     } # post-proxy = noop
(302) Wed Feb 11 10:01:03 2026: Debug: }
(302) Wed Feb 11 10:01:03 2026: Debug: Found Auth-Type = Accept
(302) Wed Feb 11 10:01:03 2026: Debug: Auth-Type = Accept, accepting the user
(302) Wed Feb 11 10:01:03 2026: Debug: # Executing section post-auth from file /etc/raddb/sites-enabled/_default
(302) Wed Feb 11 10:01:03 2026: Debug:   post-auth {
(302) Wed Feb 11 10:01:03 2026: Debug:     if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) {
(302) Wed Feb 11 10:01:03 2026: Debug:     if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name))  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:     update {
(302) Wed Feb 11 10:01:03 2026: Debug:       No attributes updated for RHS &session-state:
(302) Wed Feb 11 10:01:03 2026: Debug:     } # update = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     [exec] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     policy remove_reply_message_if_eap {
(302) Wed Feb 11 10:01:03 2026: Debug:       if (&reply:EAP-Message && &reply:Reply-Message) {
(302) Wed Feb 11 10:01:03 2026: Debug:       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:       else {
(302) Wed Feb 11 10:01:03 2026: Debug:         [noop] = noop
(302) Wed Feb 11 10:01:03 2026: Debug:       } # else = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     } # policy remove_reply_message_if_eap = noop
(302) Wed Feb 11 10:01:03 2026: Debug:     if (EAP-Key-Name && &reply:EAP-Session-Id) {
(302) Wed Feb 11 10:01:03 2026: Debug:     if (EAP-Key-Name && &reply:EAP-Session-Id)  -> FALSE
(302) Wed Feb 11 10:01:03 2026: Debug:     update reply {
(302) Wed Feb 11 10:01:03 2026: Debug:     } # update reply = noop
(302) Wed Feb 11 10:01:03 2026: Debug:   } # post-auth = noop
(302) Wed Feb 11 10:01:03 2026: Debug: Sent Access-Accept Id 20 from 192.168.1.1:1812 to 192.168.1.3:51780 length 240
(302) Wed Feb 11 10:01:03 2026: Debug:   Cisco-AVPair = "url-redirect=http://100.127.2.150/cp/cisco?client_mac=78:98:E8:1E:67:07&switch_url=100.127.2.200&redirect=&wlan=!WNAM.test-portal&ap_mac=68:13:E2:C2:F7:40&sessionId=3A03EB20-4E1933E6"
(302) Wed Feb 11 10:01:03 2026: Debug:   Cisco-AVPair = "url-redirect-acl=test1"
(302) Wed Feb 11 10:01:03 2026: Debug: Finished request
(302) Wed Feb 11 10:01:08 2026: Debug: Cleaning up request packet ID 20 with timestamp +514260
(303) Wed Feb 11 10:01:48 2026: Debug: Received CoA-Request Id 195 from 100.127.2.150:40057 to 100.127.2.200:1700 length 166
(303) Wed Feb 11 10:01:48 2026: Debug:   Calling-Station-Id = "78:98:E8:1E:67:07"
(303) Wed Feb 11 10:01:48 2026: Debug:   Cisco-AVPair = "audit-session-id=3A03EB20-4E1933E6"
(303) Wed Feb 11 10:01:48 2026: Debug:   Cisco-AVPair = "subscriber:command=reauthenticate"
(303) Wed Feb 11 10:01:48 2026: Debug:   Cisco-AVPair = "subscriber:reauthenticate-type=rerun"
(303) Wed Feb 11 10:01:48 2026: Debug: # Executing section recv-coa from file /etc/raddb/sites-enabled/_default
(303) Wed Feb 11 10:01:48 2026: Debug:   recv-coa {
(303) Wed Feb 11 10:01:48 2026: Debug:     [wlc_coa_proxy] = ok
(303) Wed Feb 11 10:01:48 2026: Debug:     [ok] = ok
(303) Wed Feb 11 10:01:48 2026: Debug:   } # recv-coa = ok
(303) Wed Feb 11 10:01:48 2026: Debug: Starting proxy to home server 192.168.1.3 port 3799
(303) Wed Feb 11 10:01:48 2026: Debug: server default {
(303) Wed Feb 11 10:01:48 2026: Debug:   # Executing section pre-proxy from file /etc/raddb/sites-enabled/_default
(303) Wed Feb 11 10:01:48 2026: Debug:     pre-proxy {
(303) Wed Feb 11 10:01:48 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy)) {
(303) Wed Feb 11 10:01:48 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy))  -> TRUE
(303) Wed Feb 11 10:01:48 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy))  {
(303) Wed Feb 11 10:01:48 2026: Debug:         update proxy-request {
(303) Wed Feb 11 10:01:48 2026: Debug:         } # update proxy-request = noop
(303) Wed Feb 11 10:01:48 2026: Debug:         [ok] = ok
(303) Wed Feb 11 10:01:48 2026: Debug:       } # if ((control:Eltex-WLC-CoA-Proxy))  = ok
(303) Wed Feb 11 10:01:48 2026: Debug:     } # pre-proxy = ok
(303) Wed Feb 11 10:01:48 2026: Debug: }
(303) Wed Feb 11 10:01:48 2026: Debug: Sent CoA-Request Id 207 from 0.0.0.0:37773 to 192.168.1.3:3799 length 166
(303) Wed Feb 11 10:01:48 2026: Debug:   Calling-Station-Id = "78:98:E8:1E:67:07"
(303) Wed Feb 11 10:01:48 2026: Debug:   Cisco-AVPair = "audit-session-id=3A03EB20-4E1933E6"
(303) Wed Feb 11 10:01:48 2026: Debug:   Cisco-AVPair = "subscriber:command=reauthenticate"
(303) Wed Feb 11 10:01:48 2026: Debug:   Cisco-AVPair = "subscriber:reauthenticate-type=rerun"
(304) Wed Feb 11 10:01:48 2026: Debug: Received Access-Request Id 21 from 192.168.1.3:51780 to 192.168.1.1:1812 length 302
(304) Wed Feb 11 10:01:48 2026: Debug:   User-Name = "78:98:e8:1e:67:07"
(304) Wed Feb 11 10:01:48 2026: Debug:   User-Password = "78:98:e8:1e:67:07"
(304) Wed Feb 11 10:01:48 2026: Debug:   Framed-IP-Address = 192.168.2.45
(304) Wed Feb 11 10:01:48 2026: Debug:   Framed-MTU = 1500
(304) Wed Feb 11 10:01:48 2026: Debug:   Connect-Info = "CONNECT 0Mbps 802.11a"
(304) Wed Feb 11 10:01:48 2026: Debug:   Eltex-AP-Domain = "default-location"
(304) Wed Feb 11 10:01:48 2026: Debug:   Eltex-Domain = "default"
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Id = "7;Vlan-ID=3"
(304) Wed Feb 11 10:01:48 2026: Debug:   Called-Station-Id = "68-13-e2-c2-f7-40:!WNAM.test-portal"
(304) Wed Feb 11 10:01:48 2026: Debug:   Calling-Station-Id = "78-98-e8-1e-67-07"
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port = 1
(304) Wed Feb 11 10:01:48 2026: Debug:   Framed-MTU = 1500
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Type = Wireless-802.11
(304) Wed Feb 11 10:01:48 2026: Debug:   Acct-Session-Id = "3A03EB20-4E1933E6"
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-IP-Address = 192.168.1.3
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Identifier = "68-13-E2-C2-F7-40"
(304) Wed Feb 11 10:01:48 2026: Debug:   Service-Type = Call-Check
(304) Wed Feb 11 10:01:48 2026: Debug:   Message-Authenticator = 0xe0f6df61e6610ab12dd4f21374940c34
(304) Wed Feb 11 10:01:48 2026: Debug: # Executing section authorize from file /etc/raddb/sites-enabled/_default
(304) Wed Feb 11 10:01:48 2026: Debug:   authorize {
(304) Wed Feb 11 10:01:48 2026: Debug:     policy filter_username {
(304) Wed Feb 11 10:01:48 2026: Debug:       if (&User-Name) {
(304) Wed Feb 11 10:01:48 2026: Debug:       if (&User-Name)  -> TRUE
(304) Wed Feb 11 10:01:48 2026: Debug:       if (&User-Name)  {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ / /) {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ / /)  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /@[^@]*@/ ) {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /@[^@]*@/ )  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /\.\./ ) {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /\.\./ )  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
(304) Wed Feb 11 10:01:48 2026: Debug:         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /\.$/)  {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /\.$/)   -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /@\./)  {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&User-Name =~ /@\./)   -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:       } # if (&User-Name)  = notfound
(304) Wed Feb 11 10:01:48 2026: Debug:     } # policy filter_username = notfound
(304) Wed Feb 11 10:01:48 2026: Debug:     [preprocess] = ok
(304) Wed Feb 11 10:01:48 2026: Debug:     if (&Cisco-AVPair && &Cisco-AVPair == "subscriber:command=ip-shaper") {
(304) Wed Feb 11 10:01:48 2026: Debug:     if (&Cisco-AVPair && &Cisco-AVPair == "subscriber:command=ip-shaper")  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:     else {
(304) Wed Feb 11 10:01:48 2026: Debug:       policy get_ssid {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}") {
(304) Wed Feb 11 10:01:48 2026: Debug:         EXPAND %{8}
(304) Wed Feb 11 10:01:48 2026: Debug:            --> !WNAM.test-portal
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  -> TRUE
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  {
(304) Wed Feb 11 10:01:48 2026: Debug:           update request {
(304) Wed Feb 11 10:01:48 2026: Debug:             EXPAND %{8}
(304) Wed Feb 11 10:01:48 2026: Debug:                --> !WNAM.test-portal
(304) Wed Feb 11 10:01:48 2026: Debug:           } # update request = noop
(304) Wed Feb 11 10:01:48 2026: Debug:           [updated] = updated
(304) Wed Feb 11 10:01:48 2026: Debug:         } # if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  = updated
(304) Wed Feb 11 10:01:48 2026: Debug:         ... skipping else: Preceding "if" was taken
(304) Wed Feb 11 10:01:48 2026: Debug:       } # policy get_ssid = updated
(304) Wed Feb 11 10:01:48 2026: Debug:       policy auth_by_ssid_default {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&Called-Station-SSID) {
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&Called-Station-SSID)  -> TRUE
(304) Wed Feb 11 10:01:48 2026: Debug:         if (&Called-Station-SSID)  {
(304) Wed Feb 11 10:01:48 2026: Debug:           policy auth_default {
(304) Wed Feb 11 10:01:48 2026: Debug:             update request {
(304) Wed Feb 11 10:01:48 2026: Debug:             } # update request = noop
(304) Wed Feb 11 10:01:48 2026: Debug:             update control {
(304) Wed Feb 11 10:01:48 2026: Debug:             } # update control = noop
(304) Wed Feb 11 10:01:48 2026: Debug:           } # policy auth_default = noop
(304) Wed Feb 11 10:01:48 2026: Debug:         } # if (&Called-Station-SSID)  = noop
(304) Wed Feb 11 10:01:48 2026: Debug:         ... skipping else: Preceding "if" was taken
(304) Wed Feb 11 10:01:48 2026: Debug:       } # policy auth_by_ssid_default = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     } # else = updated
(304) Wed Feb 11 10:01:48 2026: Debug:     [chap] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     [mschap] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     [digest] = noop
(304) Wed Feb 11 10:01:48 2026: Debug: suffix: Checking for suffix after "@"
(304) Wed Feb 11 10:01:48 2026: Debug: suffix: No '@' in User-Name = "78:98:e8:1e:67:07", looking up realm NULL
(304) Wed Feb 11 10:01:48 2026: Debug: suffix: No such realm "NULL"
(304) Wed Feb 11 10:01:48 2026: Debug:     [suffix] = noop
(304) Wed Feb 11 10:01:48 2026: Debug: files_multi: users: Matched entry DEFAULT at line 1
(304) Wed Feb 11 10:01:48 2026: Debug:     [files_multi] = ok
(304) Wed Feb 11 10:01:48 2026: Debug:     if (&reply:Eltex-Tls-Enabled == 1) {
(304) Wed Feb 11 10:01:48 2026: Debug:     if (&reply:Eltex-Tls-Enabled == 1)  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:     else {
(304) Wed Feb 11 10:01:48 2026: Debug: eap: No EAP-Message, not doing EAP
(304) Wed Feb 11 10:01:48 2026: Debug:       [eap] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     } # else = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     if (ok) {
(304) Wed Feb 11 10:01:48 2026: Debug:     if (ok)  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:     [expiration] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     [logintime] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     [pap] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:   } # authorize = updated
(304) Wed Feb 11 10:01:48 2026: Debug: Starting proxy to home server 100.127.2.150 port 1812
(304) Wed Feb 11 10:01:48 2026: Debug: server default {
(304) Wed Feb 11 10:01:48 2026: Debug:   # Executing section pre-proxy from file /etc/raddb/sites-enabled/_default
(304) Wed Feb 11 10:01:48 2026: Debug:     pre-proxy {
(304) Wed Feb 11 10:01:48 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy)) {
(304) Wed Feb 11 10:01:48 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy))  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:     } # pre-proxy = noop
(304) Wed Feb 11 10:01:48 2026: Debug: }
(304) Wed Feb 11 10:01:48 2026: Debug: Sent Access-Request Id 165 from 0.0.0.0:37773 to 100.127.2.150:1812 length 312
(304) Wed Feb 11 10:01:48 2026: Debug:   User-Name = "78:98:e8:1e:67:07"
(304) Wed Feb 11 10:01:48 2026: Debug:   User-Password = "78:98:e8:1e:67:07"
(304) Wed Feb 11 10:01:48 2026: Debug:   Framed-IP-Address = 192.168.2.45
(304) Wed Feb 11 10:01:48 2026: Debug:   Framed-MTU = 1500
(304) Wed Feb 11 10:01:48 2026: Debug:   Connect-Info = "CONNECT 0Mbps 802.11a"
(304) Wed Feb 11 10:01:48 2026: Debug:   Eltex-AP-Domain = "default-location"
(304) Wed Feb 11 10:01:48 2026: Debug:   Eltex-Domain = "default"
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Id = "7;Vlan-ID=3"
(304) Wed Feb 11 10:01:48 2026: Debug:   Called-Station-Id = "68-13-e2-c2-f7-40:!WNAM.test-portal"
(304) Wed Feb 11 10:01:48 2026: Debug:   Calling-Station-Id = "78-98-e8-1e-67-07"
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port = 1
(304) Wed Feb 11 10:01:48 2026: Debug:   Framed-MTU = 1500
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Type = Wireless-802.11
(304) Wed Feb 11 10:01:48 2026: Debug:   Acct-Session-Id = "3A03EB20-4E1933E6"
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-IP-Address := 100.127.2.200
(304) Wed Feb 11 10:01:48 2026: Debug:   NAS-Identifier = "68-13-E2-C2-F7-40"
(304) Wed Feb 11 10:01:48 2026: Debug:   Service-Type = Call-Check
(304) Wed Feb 11 10:01:48 2026: Debug:   Message-Authenticator = 0xe0f6df61e6610ab12dd4f21374940c34
(304) Wed Feb 11 10:01:48 2026: Debug:   Event-Timestamp = "Feb 11 2026 10:01:48 GMT+7"
(304) Wed Feb 11 10:01:48 2026: Debug:   Proxy-State = 0x3231
(303) Wed Feb 11 10:01:48 2026: Debug: Clearing existing &reply: attributes
(303) Wed Feb 11 10:01:48 2026: Debug: Received CoA-ACK Id 207 from 192.168.1.3:3799 to 192.168.1.1:37773 length 44
(303) Wed Feb 11 10:01:48 2026: Debug:   Event-Timestamp = "Feb 11 2026 10:01:48 GMT+7"
(303) Wed Feb 11 10:01:48 2026: Debug:   Message-Authenticator = 0xf581712c6a7380f18f25ac4fe895b155
(303) Wed Feb 11 10:01:48 2026: Debug: server default {
(303) Wed Feb 11 10:01:48 2026: Debug:   # Executing section post-proxy from file /etc/raddb/sites-enabled/_default
(303) Wed Feb 11 10:01:48 2026: Debug:     post-proxy {
(303) Wed Feb 11 10:01:48 2026: Debug: eap: No pre-existing handler found
(303) Wed Feb 11 10:01:48 2026: Debug:       [eap] = noop
(303) Wed Feb 11 10:01:48 2026: Debug:     } # post-proxy = noop
(303) Wed Feb 11 10:01:48 2026: Debug: }
(303) Wed Feb 11 10:01:48 2026: Debug: # Executing section send-coa from file /etc/raddb/sites-enabled/_default
(303) Wed Feb 11 10:01:48 2026: Debug:   send-coa {
(303) Wed Feb 11 10:01:48 2026: Debug:     [ok] = ok
(303) Wed Feb 11 10:01:48 2026: Debug:   } # send-coa = ok
(303) Wed Feb 11 10:01:48 2026: Debug: Sent CoA-ACK Id 195 from 100.127.2.200:1700 to 100.127.2.150:40057 length 44
(303) Wed Feb 11 10:01:48 2026: Debug:   Event-Timestamp = "Feb 11 2026 10:01:48 GMT+7"
(303) Wed Feb 11 10:01:48 2026: Debug:   Message-Authenticator = 0xf581712c6a7380f18f25ac4fe895b155
(303) Wed Feb 11 10:01:48 2026: Debug: Finished request
(304) Wed Feb 11 10:01:48 2026: Debug: Clearing existing &reply: attributes
(304) Wed Feb 11 10:01:48 2026: Debug: Received Access-Accept Id 165 from 100.127.2.150:1812 to 100.127.2.200:37773 length 24
(304) Wed Feb 11 10:01:48 2026: Debug:   Proxy-State = 0x3231
(304) Wed Feb 11 10:01:48 2026: Debug: server default {
(304) Wed Feb 11 10:01:48 2026: Debug:   # Executing section post-proxy from file /etc/raddb/sites-enabled/_default
(304) Wed Feb 11 10:01:48 2026: Debug:     post-proxy {
(304) Wed Feb 11 10:01:48 2026: Debug: eap: No pre-existing handler found
(304) Wed Feb 11 10:01:48 2026: Debug:       [eap] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     } # post-proxy = noop
(304) Wed Feb 11 10:01:48 2026: Debug: }
(304) Wed Feb 11 10:01:48 2026: Debug: Found Auth-Type = Accept
(304) Wed Feb 11 10:01:48 2026: Debug: Auth-Type = Accept, accepting the user
(304) Wed Feb 11 10:01:48 2026: Debug: # Executing section post-auth from file /etc/raddb/sites-enabled/_default
(304) Wed Feb 11 10:01:48 2026: Debug:   post-auth {
(304) Wed Feb 11 10:01:48 2026: Debug:     if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) {
(304) Wed Feb 11 10:01:48 2026: Debug:     if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name))  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:     update {
(304) Wed Feb 11 10:01:48 2026: Debug:       No attributes updated for RHS &session-state:
(304) Wed Feb 11 10:01:48 2026: Debug:     } # update = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     [exec] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     policy remove_reply_message_if_eap {
(304) Wed Feb 11 10:01:48 2026: Debug:       if (&reply:EAP-Message && &reply:Reply-Message) {
(304) Wed Feb 11 10:01:48 2026: Debug:       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:       else {
(304) Wed Feb 11 10:01:48 2026: Debug:         [noop] = noop
(304) Wed Feb 11 10:01:48 2026: Debug:       } # else = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     } # policy remove_reply_message_if_eap = noop
(304) Wed Feb 11 10:01:48 2026: Debug:     if (EAP-Key-Name && &reply:EAP-Session-Id) {
(304) Wed Feb 11 10:01:48 2026: Debug:     if (EAP-Key-Name && &reply:EAP-Session-Id)  -> FALSE
(304) Wed Feb 11 10:01:48 2026: Debug:     update reply {
(304) Wed Feb 11 10:01:48 2026: Debug:     } # update reply = noop
(304) Wed Feb 11 10:01:48 2026: Debug:   } # post-auth = noop
(304) Wed Feb 11 10:01:48 2026: Debug: Sent Access-Accept Id 21 from 192.168.1.1:1812 to 192.168.1.3:51780 length 20
(304) Wed Feb 11 10:01:48 2026: Debug: Finished request
(305) Wed Feb 11 10:01:48 2026: Debug: Received Accounting-Request Id 22 from 192.168.1.3:52818 to 192.168.1.1:1813 length 245
(305) Wed Feb 11 10:01:48 2026: Debug:   Acct-Session-Id = "3A03EB20-4E1933E6"
(305) Wed Feb 11 10:01:48 2026: Debug:   Acct-Status-Type = Start
(305) Wed Feb 11 10:01:48 2026: Debug:   User-Name = "7898e81e6707"
(305) Wed Feb 11 10:01:48 2026: Debug:   Service-Type = Login-User
(305) Wed Feb 11 10:01:48 2026: Debug:   Eltex-Domain = "default"
(305) Wed Feb 11 10:01:48 2026: Debug:   Event-Timestamp = "Feb 11 2026 10:01:48 GMT+7"
(305) Wed Feb 11 10:01:48 2026: Debug:   Called-Station-Id = "68-13-E2-C2-F7-40:!WNAM.test-portal"
(305) Wed Feb 11 10:01:48 2026: Debug:   Calling-Station-Id = "78-98-E8-1E-67-07"
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Type = Wireless-802.11
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-IP-Address = 192.168.1.3
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-Identifier = "68-13-E2-C2-F7-40"
(305) Wed Feb 11 10:01:48 2026: Debug:   Framed-IP-Address = 192.168.2.45
(305) Wed Feb 11 10:01:48 2026: Debug:   Framed-MTU = 1500
(305) Wed Feb 11 10:01:48 2026: Debug:   Connect-Info = "CONNECT 0Mbps 802.11a"
(305) Wed Feb 11 10:01:48 2026: Debug:   Eltex-AP-Domain = "default-location"
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Id = "7;Vlan-ID=3"
(305) Wed Feb 11 10:01:48 2026: Debug: # Executing section preacct from file /etc/raddb/sites-enabled/_default
(305) Wed Feb 11 10:01:48 2026: Debug:   preacct {
(305) Wed Feb 11 10:01:48 2026: Debug:     [preprocess] = ok
(305) Wed Feb 11 10:01:48 2026: Debug:     policy acct_unique {
(305) Wed Feb 11 10:01:48 2026: Debug:       update request {
(305) Wed Feb 11 10:01:48 2026: Debug:       } # update request = noop
(305) Wed Feb 11 10:01:48 2026: Debug:       if (("%{hex:&Class}" =~ /^%{hex:&Tmp-String-9}/) &&            ("%{string:&Class}" =~ /^ai:([0-9a-f]{32})/i)) {
(305) Wed Feb 11 10:01:48 2026: Debug:       EXPAND %{hex:&Class}
(305) Wed Feb 11 10:01:48 2026: Debug:          -->
(305) Wed Feb 11 10:01:48 2026: Debug:       EXPAND ^%{hex:&Tmp-String-9}
(305) Wed Feb 11 10:01:48 2026: Debug:          --> ^61693a
(305) Wed Feb 11 10:01:48 2026: Debug:       if (("%{hex:&Class}" =~ /^%{hex:&Tmp-String-9}/) &&            ("%{string:&Class}" =~ /^ai:([0-9a-f]{32})/i))  -> FALSE
(305) Wed Feb 11 10:01:48 2026: Debug:       else {
(305) Wed Feb 11 10:01:48 2026: Debug:         update request {
(305) Wed Feb 11 10:01:48 2026: Debug:           EXPAND %{md5:%{User-Name},%{Acct-Session-ID},%{%{NAS-IPv6-Address}:-%{NAS-IP-Address}},%{NAS-Identifier},%{NAS-Port-ID},%{NAS-Port}}
(305) Wed Feb 11 10:01:48 2026: Debug:              --> 98176558f40a11af646270971625a7ed
(305) Wed Feb 11 10:01:48 2026: Debug:         } # update request = noop
(305) Wed Feb 11 10:01:48 2026: Debug:       } # else = noop
(305) Wed Feb 11 10:01:48 2026: Debug:     } # policy acct_unique = noop
(305) Wed Feb 11 10:01:48 2026: Debug:     policy get_ssid {
(305) Wed Feb 11 10:01:48 2026: Debug:       if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}") {
(305) Wed Feb 11 10:01:48 2026: Debug:       EXPAND %{8}
(305) Wed Feb 11 10:01:48 2026: Debug:          --> !WNAM.test-portal
(305) Wed Feb 11 10:01:48 2026: Debug:       if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  -> TRUE
(305) Wed Feb 11 10:01:48 2026: Debug:       if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  {
(305) Wed Feb 11 10:01:48 2026: Debug:         update request {
(305) Wed Feb 11 10:01:48 2026: Debug:           EXPAND %{8}
(305) Wed Feb 11 10:01:48 2026: Debug:              --> !WNAM.test-portal
(305) Wed Feb 11 10:01:48 2026: Debug:         } # update request = noop
(305) Wed Feb 11 10:01:48 2026: Debug:         [updated] = updated
(305) Wed Feb 11 10:01:48 2026: Debug:       } # if (&Called-Station-Id && (&Called-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})([^0-9a-f](.+))?$/i) && "%{8}")  = updated
(305) Wed Feb 11 10:01:48 2026: Debug:       ... skipping else: Preceding "if" was taken
(305) Wed Feb 11 10:01:48 2026: Debug:     } # policy get_ssid = updated
(305) Wed Feb 11 10:01:48 2026: Debug: suffix: Checking for suffix after "@"
(305) Wed Feb 11 10:01:48 2026: Debug: suffix: No '@' in User-Name = "7898e81e6707", looking up realm NULL
(305) Wed Feb 11 10:01:48 2026: Debug: suffix: No such realm "NULL"
(305) Wed Feb 11 10:01:48 2026: Debug:     [suffix] = noop
(305) Wed Feb 11 10:01:48 2026: Debug: files_multi: acct_users: Matched entry DEFAULT at line 1
(305) Wed Feb 11 10:01:48 2026: Debug:     [files_multi] = ok
(305) Wed Feb 11 10:01:48 2026: Debug:   } # preacct = updated
(305) Wed Feb 11 10:01:48 2026: Debug: # Executing section accounting from file /etc/raddb/sites-enabled/_default
(305) Wed Feb 11 10:01:48 2026: Debug:   accounting {
(305) Wed Feb 11 10:01:48 2026: Debug:     [exec] = noop
(305) Wed Feb 11 10:01:48 2026: Debug: attr_filter.accounting_response: EXPAND %{User-Name}
(305) Wed Feb 11 10:01:48 2026: Debug: attr_filter.accounting_response:    --> 7898e81e6707
(305) Wed Feb 11 10:01:48 2026: Debug: attr_filter.accounting_response: Matched entry DEFAULT at line 12
(305) Wed Feb 11 10:01:48 2026: Debug:     [attr_filter.accounting_response] = updated
(305) Wed Feb 11 10:01:48 2026: Debug:     policy acct_by_ssid_default {
(305) Wed Feb 11 10:01:48 2026: Debug:       if (&Called-Station-SSID) {
(305) Wed Feb 11 10:01:48 2026: Debug:       if (&Called-Station-SSID)  -> TRUE
(305) Wed Feb 11 10:01:48 2026: Debug:       if (&Called-Station-SSID)  {
(305) Wed Feb 11 10:01:48 2026: Debug:         policy acct_default {
(305) Wed Feb 11 10:01:48 2026: Debug:           update request {
(305) Wed Feb 11 10:01:48 2026: Debug:           } # update request = noop
(305) Wed Feb 11 10:01:48 2026: Debug:           update control {
(305) Wed Feb 11 10:01:48 2026: Debug:           } # update control = noop
(305) Wed Feb 11 10:01:48 2026: Debug:         } # policy acct_default = noop
(305) Wed Feb 11 10:01:48 2026: Debug:       } # if (&Called-Station-SSID)  = noop
(305) Wed Feb 11 10:01:48 2026: Debug:       ... skipping else: Preceding "if" was taken
(305) Wed Feb 11 10:01:48 2026: Debug:     } # policy acct_by_ssid_default = noop
(305) Wed Feb 11 10:01:48 2026: Debug:     if (&control:Proxy-To-Realm) {
(305) Wed Feb 11 10:01:48 2026: Debug:     if (&control:Proxy-To-Realm)  -> TRUE
(305) Wed Feb 11 10:01:48 2026: Debug:     if (&control:Proxy-To-Realm)  {
(305) Wed Feb 11 10:01:48 2026: Debug:       [noop] = noop
(305) Wed Feb 11 10:01:48 2026: Debug:     } # if (&control:Proxy-To-Realm)  = noop
(305) Wed Feb 11 10:01:48 2026: Debug:     ... skipping else: Preceding "if" was taken
(305) Wed Feb 11 10:01:48 2026: Debug:   } # accounting = updated
(305) Wed Feb 11 10:01:48 2026: Debug: Starting proxy to home server 100.127.2.150 port 1813
(305) Wed Feb 11 10:01:48 2026: Debug: server default {
(305) Wed Feb 11 10:01:48 2026: Debug:   # Executing section pre-proxy from file /etc/raddb/sites-enabled/_default
(305) Wed Feb 11 10:01:48 2026: Debug:     pre-proxy {
(305) Wed Feb 11 10:01:48 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy)) {
(305) Wed Feb 11 10:01:48 2026: Debug:       if ((control:Eltex-WLC-CoA-Proxy))  -> FALSE
(305) Wed Feb 11 10:01:48 2026: Debug:     } # pre-proxy = noop
(305) Wed Feb 11 10:01:48 2026: Debug: }
(305) Wed Feb 11 10:01:48 2026: Debug: Sent Accounting-Request Id 149 from 0.0.0.0:37773 to 100.127.2.150:1813 length 249
(305) Wed Feb 11 10:01:48 2026: Debug:   Acct-Session-Id = "3A03EB20-4E1933E6"
(305) Wed Feb 11 10:01:48 2026: Debug:   Acct-Status-Type = Start
(305) Wed Feb 11 10:01:48 2026: Debug:   User-Name = "7898e81e6707"
(305) Wed Feb 11 10:01:48 2026: Debug:   Service-Type = Login-User
(305) Wed Feb 11 10:01:48 2026: Debug:   Eltex-Domain = "default"
(305) Wed Feb 11 10:01:48 2026: Debug:   Event-Timestamp = "Feb 11 2026 10:01:48 GMT+7"
(305) Wed Feb 11 10:01:48 2026: Debug:   Called-Station-Id = "68-13-E2-C2-F7-40:!WNAM.test-portal"
(305) Wed Feb 11 10:01:48 2026: Debug:   Calling-Station-Id = "78-98-E8-1E-67-07"
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Type = Wireless-802.11
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-IP-Address := 100.127.2.200
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-Identifier = "68-13-E2-C2-F7-40"
(305) Wed Feb 11 10:01:48 2026: Debug:   Framed-IP-Address = 192.168.2.45
(305) Wed Feb 11 10:01:48 2026: Debug:   Framed-MTU = 1500
(305) Wed Feb 11 10:01:48 2026: Debug:   Connect-Info = "CONNECT 0Mbps 802.11a"
(305) Wed Feb 11 10:01:48 2026: Debug:   Eltex-AP-Domain = "default-location"
(305) Wed Feb 11 10:01:48 2026: Debug:   NAS-Port-Id = "7;Vlan-ID=3"
(305) Wed Feb 11 10:01:48 2026: Debug:   Proxy-State = 0x3232
(305) Wed Feb 11 10:01:48 2026: Debug: Clearing existing &reply: attributes
(305) Wed Feb 11 10:01:48 2026: Debug: Received Accounting-Response Id 149 from 100.127.2.150:1813 to 100.127.2.200:37773 length 24
(305) Wed Feb 11 10:01:48 2026: Debug:   Proxy-State = 0x3232
(305) Wed Feb 11 10:01:48 2026: Debug: server default {
(305) Wed Feb 11 10:01:48 2026: Debug:   # Executing section post-proxy from file /etc/raddb/sites-enabled/_default
(305) Wed Feb 11 10:01:48 2026: Debug:     post-proxy {
(305) Wed Feb 11 10:01:48 2026: Debug: eap: No pre-existing handler found
(305) Wed Feb 11 10:01:48 2026: Debug:       [eap] = noop
(305) Wed Feb 11 10:01:48 2026: Debug:     } # post-proxy = noop
(305) Wed Feb 11 10:01:48 2026: Debug: }
(305) Wed Feb 11 10:01:48 2026: Debug: Sent Accounting-Response Id 22 from 192.168.1.1:1813 to 192.168.1.3:52818 length 20
(305) Wed Feb 11 10:01:48 2026: Debug: Finished request
(305) Wed Feb 11 10:01:49 2026: Debug: Cleaning up request packet ID 22 with timestamp +514305
(303) Wed Feb 11 10:01:53 2026: Debug: Cleaning up request packet ID 195 with timestamp +514305
(304) Wed Feb 11 10:01:53 2026: Debug: Cleaning up request packet ID 21 with timestamp +514305

Dump-файл Radius-обмена WLC и WNAM

dump_radius+CoA.pcap

Диагностика на стороне WNAM
Якорь
Radius Logs
Radius Logs

Корпоративные подключения

Диагностика → Корпоративные подключения

...