當來自 Windows VPN 客戶端時,半徑身份驗證在 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 = "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那樣將使用者名作為ID傳遞?
- 第二:為什麼將使用者名從 Strongswan 傳遞給 Freeradius
"\300\250\000d"
?在 Windows 客戶端上進行更多調試:
上面的範例是在使用 MS-CHAP v2 的客戶端上使用 EAP-TTLS 時生成的。
當使用 MS-CHAP 時,Freeradius 確實會使用正確的使用者名呼叫,但是當請求被代理時,使用者名/密碼身份驗證失敗。
我想 MS-CHAP 登錄需要封裝或其他什麼,因為身份驗證請求的編碼與 Android 使用者連接時的編碼不同?
您的兩個問題的答案是相同的:Windows 將其 IP 地址作為 IKE 身份發送(然後在 RADIUS 消息中作為使用者名屬性逐字轉發)。
相反,您應該將 RADIUS 伺服器配置為進行 EAP-Identity 交換(如果您
eap_start = yes
在strongswan.conf中進行了配置),或者讓 strongSwan 通過啟用eap-identity外掛並eap_id = %any
在remote...
部分中進行配置來完成此操作。