У меня всё заработало. Нужно добавить эту конфигурацию в файл config.gateway.json, чтобы заставить RADIUS использовать PAP, так как Okta RADIUS сервер сейчас поддерживает только PAP. Обязательно в настройках UniFi Controller, в разделе Services > RADIUS > Server, это должно быть выключено. Затем нажмите Profiles > Create new radius profile.
Имя профиля: oktaVLAN
Поддержка: я не использую, но настроьте по необходимости.
RADIUS Auth Server: введите IP адрес Windows-машины с установленным агентом Okta RADIUS сервера. Я использовал порт по умолчанию 1812.
Настройте общий секрет, который пригодится при настройке агента Okta RADIUS сервера.
Accounting: только если нужно, я не пользуюсь.
Теперь идём в Networks > Create New Network
Имя: remote-user-vpn
Назначение: Remote User VPN
Тип VPN: L2TP Server
Предварительно общий ключ: такой же, как настроен в RADIUS AUTH SERVER
Gateway/Subnet: укажите свои данные
RADIUS Profile: выберите созданный профиль Okta
Не ставьте галочку Require MS-CHAP v2
Нажмите Save.
В Okta создайте новое RADIUS приложение.
В разделе General:
Application label: RADIUS Application - UniFi USG VPN
В Sign On:
Authentication: поставьте галочку Okta performs primary authentication
UDP Port: 1812
Secret Key: тот же ключ, что и выше
Application username format: Okta username
Update application username on: Create and Update
В Advanced RADIUS Settings:
Report Client IP: у меня включено для логов
RADIUS end user IP attribute: 1 User-Name
В GROUPS RESPONSE:
Include groups in RADIUS response: стоит галочка
RADIUS attribute: 11 Filter-Id
Group memberships to return: Everyone (я назначил группе Everyone доступ к этому приложению, чтобы все могли подключаться к VPN — настройте по своему усмотрению)
Response format: Repeating attributes
Group name format: $(group.name)
В AUTHENTICATION:
Accept password and security token in the same login request: галочка для пользователей с MFA
Permit Automatic Push for Okta Verify Enrolled Users: не включено, так как Okta Verify мы не используем, но вам может понадобиться
Single-line MFA prompt: галочка стоит
Enable inline MFA enrollment: включено, хотя я пока не использовал, сейчас MFA есть только у меня
В Sign On Policy:
Политика по умолчанию требует MFA на каждую сессию. Это сбивало меня с толку, ведь я один с MFA, и тогда никто кроме меня не мог войти.
Добавьте правило:
Дайте ему имя
Условия:
People: Пользователи, назначенные на это приложение
Location: Anywhere, настройте по необходимости
Client: я выбрал все варианты
Действия:
Если все условия выполнены, вход в приложение разрешён
Я не ставил «Prompt for factor», так как политика по умолчанию и так настроена, а нам нужно разрешить VPN доступ всем без MFA.
Нажмите Save.
Убедитесь, что порт 1812 проброшен на USG, а не на Windows-машину с агентом Okta RADIUS сервера. Также не забудьте добавить правила в брандмауэр Windows, чтобы разрешить трафик на порт 1812 к агенту Okta RADIUS сервера. Для отладки можно временно отключить брандмауэр Windows, чтобы проверить соединение, а потом включить и поправить правила.
Вот код:
{
"vpn": {
"l2tp": {
"remote-access": {
"authentication": {
"require": "pap"
}
}
}
}
}