当来自 Windows VPN 客户端时,Radius 身份验证在 Strongswan 中不起作用?

当来自 Windows VPN 客户端时,Radius 身份验证在 Strongswan 中不起作用?

我的 strongswan VPN 服务器正在针对本地 Freeradius 服务器对 VPN 客户端进行身份验证。

所有用户登录都代理到远程 radius 服务器,该服务器根据 Samba Active Directory 服务器验证用户。

然而我遇到了一点问题。

以下部分适用于使用 Strongswan VPN 客户端的 Android 用户:

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 = "[email protected]"
(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[[email protected]]

然而,当尝试从 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 那样将用户名作为其 ID 传递?

  • 第二:为什么用户名从Strongswan传递到Freeradius "\300\250\000d"

在 Windows 客户端上进行更多调试:

上述示例是在客户端使用 EAP-TTLS 与 MS-CHAP v2 时生成的。

当使用 MS-CHAP 时,Freeradius 会使用正确的用户名进行调用,但是当请求通过代理时,用户名/密码验证会失败。

我猜测 MS-CHAP 登录需要封装或者其他什么,因为身份验证请求的编码与 Android 用户连接时的编码不一样?

答案1

两个问题的答案是相同的:Windows 将其 IP 地址作为 IKE 身份发送(然后将其作为 RADIUS 消息中的用户名属性逐字转发)。

相反,你应该配置你的 RADIUS 服务器来执行 EAP-Identity 交换(如果你eap_start = yesstrongswan.conf),或者让 strongSwan 通过启用eap 身份插件并eap_id = %anyremote...部分中配置。

相关内容