Strongswan

當來自 Windows VPN 客戶端時,半徑身份驗證在 Strongswan 中不起作用?

  • June 1, 2021

我的 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 = yesstrongswan.conf中進行了配置),或者讓 strongSwan 通過啟用eap-identity外掛並eap_id = %anyremote...部分中進行配置來完成此操作。

引用自:https://serverfault.com/questions/1065300