Определения
Портал - сторонний сервис, обеспечивающий гостевую авторизацию (предоставление доступа в сети каким-то способом, связанным с идентификацией беспроводного клиента через всплывающее окно, СМС, ваучер и т.п.)
RADIUS-сервер - сторонний сервис, обеспечивающий проверку учётных данных (логин, пароль, МАС, сертификат) подключающегося беспроводного клиента
RADIUS-клиент - сервис на контроллере/точке доступа, инициирующий авторизационный запрос в сторону сервера RADIUS.
RADIUS-прокси - сервис на контроллере, позволяющий передавать RADIUS-сообщения от точек доступа до RADIUS-сервера, и обратно, возможно с их модификацией, для упрощения работы сервера
МАС-авторизация - процесс авторизации, при котором в качестве логина и пароля клиента передаются МАС-адрес клиентского устройства
CoA - процесс изменения состояния подключенного клиентского устройства, при котором RADIUS-сервер направляет RADIUS-клиенту специальный запрос "сбрось клиента"
Аккаунтинг - фиксация момента начала работы клиента в сети, промежуточные (interim) обновления его состояния, завершения работы. В аккаунтинг сообщениях передаются счётчики трафика и прочие детали подключения. Аккаунтинг начинается одновременно либо сразу после завершения успешной авторизации
hostapd - компонент точки доступа, отвечающий за вещание беспроводной сети, и процесс подключения беспроводного клиента к ней. Может работать RADIUS-клиентом
хотспот - компонент точки доступа, отвечающий за детектирование, перенаправление, разрешение и запрет доступа пользователя гостевой беспроводной сети (с портальной авторизацией)
Правила
В RADIUS-протоколе инициатор сообщений (авторизация, аккаунтинг) всегда клиент, отправляющий сообщения (запросы) в сторону сервера. Возможно, используя прокси.
Ответом сервера на авторизационные RADIUS сообщения могут быть: отказ, разрешение. В случае разрешения могут, но не обязательно, передаваться дополнительные атрибуты: ограничения длительности сессии, скорости, назначенный VLAN и т.п.
Почти всегда Портал и RADIUS-сервер - это единая сущность. Гостевая авторизация одновременно использует и веб-редиректы и страницы, и RADIUS-протокол.
Сетевая авторизация в открытой, PSK сетях может (но не обязана) использовать МАС-авторизацию и аккаунтинг.
По отдельности можно использовать и МАС-авторизацию, и аккаунтинг.
Сетевая авторизация в WPA2Enterprise сетях обязана использовать МАС-авторизацию (или её более сложные формы), и опционально (но почти всегда) и аккаунтинг.
Гостевая (портальная) авторизация может работать и без МАС авторизации и без аккаунтинга, но такой сценарий не рекомендуется
Гостевая (портальная) авторизация лучше всего работает при включенной МАС авторизации и аккаунтинге, т.к. при этом обеспечивается быстрое переподключение ранее авторизованных клиентов. Логика работы (кого сразу переподключать, а кого отправлять снова на портал авторизации, в всплывающее окно) определяется на стороне настроек портала.
Если в настройке RADIUS-сервера указано, что клиентом будет контроллер, то RADIUS-трафик от точек доступа (клиентов) направляется на контроллер (порты 18120 и 18130), работающий как RADIUS-прокси, и он сам направляет его в сервер. В этом случае RADIUS-сервер взаимодействует только с контроллером, что благоприятно с точки зрения сетевого доступа, минимизации настоек на контроллере. Контроллер между тем становится точкой отказа.
Если в настройке RADIUS-сервера указано, что клиентом будет точка доступа, то RADIUS-трафик от точек доступа (клиентов) напрямую направляется на RADIUS-сервер. В этом случае RADIUS-сервер взаимодействует с каждой точкой по отдельности, что может быть негативно с точки зрения сетевого доступа и минимизации настоек на контроллере. Контроллер между тем не участвует в авторизации и при его недоступности она не прерывается.
Гостевая (портальная) авторизация работает только в режиме RADIUS-прокси (клиентом будет контроллер), когда контроллер обрабатывает СоА сообщения, и проксирует трафик аккаунтинга от точек доступа. Внимание: МАС авторизации от точек доступа, с проксированием, в таком режиме НЕТ. Контроллер сам является RADIUS-клиентом и динамический формирует запросы МАС авторизации на RADIUS-сервер по мере поступления служебных (associated_users_info, connected_time=0) сообщений от точек доступа
Режим динамического назначения VLAN работает только для не-гостевой авторизации. В гостевой авторизации VLAN для клиента задан статически, и не переопределяется в RADIUS ответах
Вы можете настроить RADIUS-сервер для авторизации, но отключить аккаунтинг, если укажете "0" в поле "Порт аккаунтинга"
Возможность обеспечить отказоустойчивость по RADIUS-протоколу (балансировка между двумя заданными серверами RADIUS, когда указаны и основной адрес, и дублирующий адрес), работает только в режиме клиентом будет контроллер. hostapd не имеет возможности настройки двух RADIUS-серверов.
Сводная таблица совместимости
В поле "Тип авторизации" в скобках указан режим работы RADIUS-сервера, если он выбран в профиле SSID.
Тип авторизации | RADIUS-клиент | RADIUS-прокси | RADIUS-сервер | МАС-авторизация | Аккаунтинг | СоА |
---|---|---|---|---|---|---|
Open PSK | нет | нет | нет | нет | нет | нет |
Open+MAC (точка) PSK+MAC (точка) | точка доступа | нет | сервер | да | опционально | нет |
Open+MAC (контроллер) PSK+MAC (контроллер) | точка → контроллер | контроллер | сервер | да | опционально | да |
Open+Guest PSK+Guest | нет | нет | нет | нет | нет | от портала до контроллера |
Open+Guest+MAC (точка) PSK+Guest+MAC (точка) | не поддерживается | |||||
Open+Guest+MAC (контроллер) PSK+Guest+MAC (контроллер) | контроллер (auth) точка → контроллер (acct) | контроллер для аккаунтинга | сервер | да | да | да |
WPA2 Enterprise (точка) | точка доступа | нет | сервер | да | опционально | нет |
WPA2 Enterprise (контроллер) | точка → контроллер | контроллер | сервер | да | опционально | да |
WPA2 Enterprise+Guest | не поддерживается |
Список RADIUS-атрибутов
В дополнение к стандартным (IETF) атрибутам, определенным в RFC ниже, точка доступа и контроллер применяют следующие вендорспецифичные атрибуты:
Вендор: Fplus
Идентификатор (номер) вендора в IANA: 61008
Атрибуты:
ID | Name | Data type | Description |
---|---|---|---|
1 | Fplus-Wlan-Id | integer | Номер профиля беспроводной сети, настроенной на контроллере (число 1...255) |
2 | Fplus-AP-Name | string | Имя точки доступа, к которой произведено подключение данного клиента |
3 | Fplus-AP-Group | string | Имя группы, в которой находится эта точка доступа |
4 | Fplus-Sta-RSSI | integer | Уровень сигнала от устройства клиента (отрицательное число) |
5 | Fplus-Sta-SNR | integer | Соотношение сигнал-шум от устройства клиента (положительное число) |
6 | Fplus-Sta-Channel | integer | Номер радио-канала, к которому произведено подключение (текущий канал точки доступа) |
Указанные атрибуты могут передаваться RADIUS-клиентом или прокси серверу как в Auth, так и в Acct сообщениях.
Процедура подключения клиента в гостевой сети
Описан рекомендуемый сценарий Open+Guest+MAC (контроллер), первоначальное и повторное подключения.
А. первоначальное подключение
- Ассоциация клиента с сетью. hostapd не имеет настройки auth_server, МАС авторизации нет, подключение безусловно успешное
- wda детектирует такое подключение, направляет сообщение associated_users_info[1], connected_time=0 контроллеру
- МАС клиента по умолчанию не в разрешенных списках
- Клиент получает IP адрес. wda детектирует и это, направляет сообщение associated_users_info[1], connected_time=1 контроллеру
- hostapd имеет настройку acct_server, и отправляет accounting-start в контроллер (он в режиме радиус-прокси)
- Пока клиент делает dhcp запросы, резолвит captive.apple.com и пробует сделать tcp коннект на него на порт 80, контроллер:
- Получив первое associated_users_info, контроллер (RadiusMAB) формирует (как клиент) Radius Auth (MAB) запрос в радиус-сервер
- Получив acct-start от точки доступа, контроллер (RadiusProxy) пересылает (с модификацией) Radius Acct Start запрос в радиус-сервер
- Радиус-сервер, не зная Wi-Fi клиента по МАС-адресу, отправляет контроллеру Access-Reject, а так же OK на Acct Start запрос
- Сервис RadiusProxy контроллера пересылает Acct...ОК точке доступа; hostapd точки по сути игнорирует это
- Сервис RadiusMAB контроллера, получив Access-Reject от сервера, далее ничего не делает
- Со временем (порядка 1-3 сек. от начала подключения) Wi-Fi клиент делает веб-запрос на captive.apple.com, который попадает на веб-прокси-сервис точки доступа
- Точка доступа пересылает (HTTP Location:) веб-запрос на сервер Портала. Wi-Fi клиенту показывается портал авторизации в всплывающем окне
- Клиент проходит цикл авторизации (идентификации по СМС, звонку, ваучеру и т.п.)
- В конце цикла авторизации портал принимает предварительное решение, что данного клиента надо выпустить в Интернет, для чего он направляет RADIUS CoA запрос в контроллер
- Получив RADIUS CoA, контроллер определяет МАС адрес клиента, точку доступа
- Контроллер снова формирует RADIUS Auth (MAB) запрос в радиус-сервер (с другим параметром Connect-Info)
- Радиус-сервер, зная только что прошедшего авторизацию Wi-Fi клиента по МАС-адресу, отправляет контроллеру Access-Accept, и возможно другие атрибуты (ограничение скорости, длительности сессии, имя/телефон клиента в User-Name)
- Контроллер получает от радиус-сервера ответ, определяет точку доступа клиента, и направляет ей MQTT-сообщение CAPTIVE_MAC_ADD с адресом клиента
- Точка доступа открывает клиенту доступ в интернет (помещает МАС клиента и IP клиента в таблицы ядра)
- Клиент работает в Интернет, hostapd периодически отправляет контроллеру (как прокси) RADIUS-аккаунтинг трафик, до отключения клиента
- В момент отключения клиента wda формирует и отправляет контроллеру сообщение associated_users_info[1], connected_time=-1, а также удаляет МАС, IP клиента из таблиц ядра
- Контроллер в момент получения сообщения только уменьшает счетчик активных клиентов. RADIUS-сообщения аккаунтинга он уже спроксировал.
Б. Повторное подключение
- При повторном подключении клиента с тем же МАС адресом к той же сети (SSID), но возможно к другому радио и к другой точке доступа, происходит ассоциация клиента. hostapd не имеет настройки auth_server, МАС авторизации нет, подключение безусловно успешное
- wda детектирует такое подключение, направляет сообщение associated_users_info[1], connected_time=0 контроллеру
- МАС клиента по умолчанию не в разрешенных списках
- Клиент получает IP адрес. wda детектирует и это, направляет сообщение associated_users_info[1], connected_time=1 контроллеру
- hostapd имеет настройку acct_server, и отправляет accounting-start в контроллер (он в режиме радиус-прокси)
- Пока клиент делает dhcp запросы, резолвит captive.apple.com и пробует сделать tcp коннект на него на порт 80, контроллер:
- Получив первое associated_users_info, контроллер (RadiusMAB) формирует (как клиент) Radius Auth (MAB) запрос в радиус-сервер
- Получив acct-start от точки доступа, контроллер (RadiusProxy) пересылает (с модификацией) Radius Acct Start запрос в радиус-сервер
- Радиус-сервер, уже зная Wi-Fi клиента по МАС-адресу, отправляет контроллеру Access-Accept, а так же OK на Acct Start запрос. Логика работы RADIUS-сервера, совмещенного с Портальным сервером, может предусматривать отправку и Reject-сообщения, если потребно показать клиенту всплывающую страницу авторизации или рекламы
- Сервис RadiusProxy контроллера пересылает Acct...ОК точке доступа; hostapd точки по сути игнорирует это
- Сервис RadiusMAB контроллера, получив Access-Accept от сервера, направляет точке доступа, на которой подключен клиент, MQTT-сообщение CAPTIVE_MAC_ADD с адресом клиента
- Точка доступа открывает клиенту доступ в интернет (помещает МАС клиента и IP клиента в таблицы ядра)
- С большой вероятностью, процесс 7-12 занимает время меньше, чем клиентское устройство устанавливает веб-соединение (в частности, можно пробовать регулировать задержку на прокси-сервера точки доступа)
- Клиентское устройство, сделав веб-запрос, получает ожидаемый ответ, всплывающих captive-окон не показывает
- Клиент работает в Интернет, hostapd периодически отправляет контроллеру (как прокси) RADIUS-аккаунтинг трафик, до отключения клиента
- В момент отключения клиента wda формирует и отправляет контроллеру сообщение associated_users_info[1], connected_time=-1, а также удаляет МАС, IP клиента из таблиц ядра
- Контроллер в момент получения сообщения только уменьшает счетчик активных клиентов. RADIUS-сообщения аккаунтинга он уже спроксировал.
Для чтения
https://datatracker.ietf.org/doc/html/rfc2865
https://datatracker.ietf.org/doc/html/rfc2866
https://datatracker.ietf.org/doc/html/rfc2869