Аутентификация Radius не работает в Strongswan при переходе от клиента Windows VPN?

Мой VPN-сервер strongswan выполняет аутентификацию VPN-клиентов на локальном сервере Freeradius.

Все журналы пользователей передаются на удаленный сервер RADIUS, который проверяет пользователей на сервере Samba Active Directory.

Однако я столкнулся с небольшой проблемой.

Следующий раздел работает для пользователей Android, использующих VPN-клиент Strongswan:

connections
{
  rw-eap {
    local_addrs = SERVER_PUBLIC_IPV4, SERVER_PUBLIC_IPV6

    local {
      auth = pubkey
      certs = example-ecdsa.cer
      id = vpn.example.com
    }
    remote-android {
      auth = eap-radius
      id = *@example.com
    }
  }
}

Результаты мониторинга Freeradius показывают такие вещи, как:

(5) Received Access-Request Id 135 from 192.168.200.1:47851 to 192.168.200.1:1812 length 193
(5)   User-Name = "user@example.com"
(5)   NAS-Port-Type = Virtual
(5)   Service-Type = Framed-User
(5)   NAS-Port = 4
(5)   NAS-Port-Id = "rw-eap"
(5)   NAS-IP-Address = SERVER_PUBLIC_IPV4
(5)   Called-Station-Id = "SERVER_PUBLIC_IPV4[4500]"
(5)   Calling-Station-Id = "CLIENT_IPV4[3988]"

И журнал Strongswan дает:

06[IKE] IKE_SA rw-eap[6] established between SERVER_PUBLIC_IPV4[vpn.example.com]...CLIENT_IPV4[user@example.com]

Однако при попытке подключиться к серверу из клиента Windows он в значительной степени мертв в воде, если я не использую следующую конфигурацию в Strongswan:

connections
{
  rw-windows {
    local_addrs = SERVER_PUBLIC_IPV4, SERVER_PUBLIC_IPV6

    local {
      auth = pubkey
      certs = example-ecdsa.cer
      id = vpn.example.com
    }

    remote-windows {
      auth = eap-radius

      # Don't use *@example.com here - as windows does not pass username as id, 
      # so this config will not match in that case.
      id = %any
    }
  }
}

Используя эту конфигурацию, я могу, по крайней мере, заставить Strongswan инициировать аутентификацию Radius, но я не пойду намного дальше этого.

Выходные данные Freeradius дают мне что-то вроде:

(21) Received Access-Request Id 151 from 192.168.200.1:47851 to 192.168.200.1:1812 length 306
(21)   User-Name = "\300\250\000d"
(21)   NAS-Port-Type = Virtual
(21)   Service-Type = Framed-User
(21)   NAS-Port = 7
(21)   NAS-Port-Id = "rw-windows"
(21)   NAS-IP-Address = SERVER_PUBLIC_IPV4
(21)   Called-Station-Id = "SERVER_PUBLIC_IPV4[4500]"
(21)   Calling-Station-Id = "CLIENT_PUBLIC_IPV4[3989]"

И это приводит к следующей записи в журнале Strongswan:

06[CFG] looking for peer configs matching SERVER_PUBLIC_IPV4[%any]...CLIENT_PUBLIC_IPV4[CLIENT_PRIVATE_IPV4]

Это вызывает у меня несколько вопросов, например:

  • Во-первых: почему клиент Windows VPN не передает имя пользователя как его идентификатор похож на Strongswan?

  • Второй: Почему имя пользователя передается из Strongswan в Freeradius «\ 300 \ 250 \ 000d» ?

Еще немного отладки на клиенте Windows:

приведенный выше пример создается при использовании EAP-TTLS на стороне клиента с MS-CHAP v2.

При использовании MS-CHAP вместо этого Freeradius вызывается с правильным именем пользователя, но когда запрос передается через прокси, аутентификация имени пользователя и пароля не выполняется.

Я полагаю, что логин MS-CHAP должен быть инкапсулирован или что-то в этом роде, поскольку кодировка запроса аутентификации не такая, как при подключении пользователей Android?

0
задан 1 June 2021 в 13:06
1 ответ

Ответ на оба ваших вопроса одинаков: Windows отправляет свой IP-адрес в качестве идентификатора IKE (который затем дословно передается как атрибут User-Name в сообщении RADIUS).

Вместо этого, вы должны либо настроить ваш RADIUS сервер на обмен EAP-Identity (если вы настроили eap_start = yes в strongswan.conf), либо позволить strongSwan сделать это, включив eap-identity плагин и настроив eap_id = %any в remote.... секции.

1
ответ дан 28 July 2021 в 14:06

Теги

Похожие вопросы