我的 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 = yes
在strongswan.conf),或者让 strongSwan 通过启用eap 身份插件并eap_id = %any
在remote...
部分中配置。