24
2024
01
01:14:22

strongSwan-远程接入-eap-mschapv2

strongSwan介绍

测试环境

测试目的

定义一个eap连接,允许windows客户端连接到strongSwan VPN网关

测试拓扑更新

测试拓扑更新

在 strongSwan测试环境的基础上,增加了一个“移动办公”的区域,使用一台win10虚拟机,模拟windows客户端连接到strongSwan VPN网关。

拓扑中增加的配置

增加的R-1路由器配置

# 接口和路由配置
interface GigabitEthernet0/0  
ip address 192.168.40.254 255.255.255.0  
ip nat inside

interface GigabitEthernet0/15  
ip address 51.1.1.1 255.255.255.0  
ip nat outside

ip route 0.0.0.0 0.0.0.0 51.1.1.254

# NAT配置
access-list 10 permit 192.168.40.0 0.0.0.255
ip nat inside source list 10 interface GigabitEthernet0/15 overload

# DHCP配置
ip dhcp pool client  
network 192.168.40.0 255.255.255.0  
default-router 192.168.40.254    
dns-server 202.102.224.68

Internet路由器增加配置

interface GigabitEthernet4  
ip address 51.1.1.254 255.255.255.0  
ip nat inside

ip access-list standard 10  
......
40 permit 51.1.1.0 0.0.0.255  
!


aliyun站点主要配置

connections {  
    # 创建名为 eap 的连接
   eap {  
       # 调用创建的名为 ipv4 的地址池
       pools = ipv4  
       # 本端认证配置
       local {  
           auth = pubkey  
           certs = aliyunCert.pem  
           # vpn网关的 ikev2 id, 必须作为 subjectAltName包含在网关使用的证书中
           id = aliyun.strongswan.local  
           }  
        remote {  
            # eap-dynamic插件允许协商strongswan.conf中定义的任何EAP方法
            auth = eap-dynamic  
            # 此选项激活EAP标识的发送,用于标识windows客户端
            # 如果是动态的,则没有任何标识。            eap_id = %any  
            }  
        children {  
            eap {
                # 所有ipv4流量都将通过隧道从windwos客户端传输到 vpn网关  
                local_ts = 0.0.0.0/0  
                }  
        }  
    }  }  pools {  
   ipv4 {  
       addrs = 10.10.1.0/24  
       dns = 202.102.224.68  
       }  }  secrets {  
   # 基于eap-mschapv2 身份验证所需的用户名密码。
   eap-win10 {  
       id = win10  
       secret = win10  
       }  }

windwos增加vpn连接

在设置页面,选择 网络和internet 。

选择 VPN,添加VPN连接

VPN提供商选择windwos内置

设置一个连接名称

服务器名称或地址,这里需要使用VPN网关的完全限定主机名。主机名必须使用网关证书中包含的subjectAltName

登录信息的类型选择 用户名和密码

点击保存

修改连接的加密强度,数据加密这里选择 最大强度的加密(如果服务器拒绝断开连接)

点击 连接

问题处理

无法匹配策略

点击连接后,显示 策略匹配失败


服务器端的日志显示 received proposals unacceptable 拒绝了接受到的安全提议。

13[IKE] remote host is behind NAT  
13[IKE] received proposals unacceptable  
13[ENC] generating IKE_SA_INIT response 0 [ N(NO_PROP) ]  
13[NET] sending packet: from 192.168.10.253[500] to 51.1.1.1[500] (36 bytes)

日志上显示了接收到的安全提议和配置的安全提议,我们对比看下发现,服务器收到的windows发出的安全提议,算法强度很弱,服务器配置的默认算法强度要比windows的算法强度高得多。

13[CFG] received proposals: IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024, IKE:AES_CBC_256/HMAC_SHA1_96/PR  
F_HMAC_SHA1/MODP_1024, IKE:3DES_CBC/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_1024, IKE:AES_CBC_256/HMAC_SHA2_2  
56_128/PRF_HMAC_SHA2_256/MODP_1024, IKE:3DES_CBC/HMAC_SHA2_384_192/PRF_HMAC_SHA2_384/MODP_1024, IKE:AES_CBC_25  
6/HMAC_SHA2_384_192/PRF_HMAC_SHA2_384/MODP_1024  



13[CFG] configured proposals: IKE:AES_CBC_128/AES_CBC_192/AES_CBC_256/AES_CTR_128/AES_CTR_192/AES_CTR_256/CAME  
LLIA_CBC_128/CAMELLIA_CBC_192/CAMELLIA_CBC_256/CAMELLIA_CTR_128/CAMELLIA_CTR_192/CAMELLIA_CTR_256/3DES_CBC/HMA  
C_SHA2_256_128/HMAC_SHA2_384_192/HMAC_SHA2_512_256/HMAC_SHA1_96/AES_XCBC_96/AES_CMAC_96/PRF_HMAC_SHA2_256/PRF_  
HMAC_SHA2_384/PRF_HMAC_SHA2_512/PRF_AES128_XCBC/PRF_AES128_CMAC/PRF_HMAC_SHA1/CURVE_25519/CURVE_448/ECP_256/EC  
P_384/ECP_521/ECP_256_BP/ECP_384_BP/ECP_512_BP/MODP_3072/MODP_4096/MODP_6144/MODP_8192/MODP_2048, IKE:AES_GCM_  
16_128/AES_GCM_16_192/AES_GCM_16_256/AES_CCM_16_128/AES_CCM_16_192/AES_CCM_16_256/CHACHA20_POLY1305/CAMELLIA_C  
CM_16_128/CAMELLIA_CCM_16_192/CAMELLIA_CCM_16_256/AES_GCM_12_128/AES_GCM_12_192/AES_GCM_12_256/AES_GCM_8_128/A  
ES_GCM_8_192/AES_GCM_8_256/AES_CCM_12_128/AES_CCM_12_192/AES_CCM_12_256/AES_CCM_8_128/AES_CCM_8_192/AES_CCM_8_  
256/CAMELLIA_CCM_8_128/CAMELLIA_CCM_8_192/CAMELLIA_CCM_8_256/CAMELLIA_CCM_12_128/CAMELLIA_CCM_12_192/CAMELLIA_  
CCM_12_256/PRF_HMAC_SHA2_256/PRF_HMAC_SHA2_384/PRF_HMAC_SHA2_512/PRF_AES128_XCBC/PRF_AES128_CMAC/PRF_HMAC_SHA1  
/CURVE_25519/CURVE_448/ECP_256/ECP_384/ECP_521/ECP_256_BP/ECP_384_BP/ECP_512_BP/MODP_3072/MODP_4096/MODP_6144/  
MODP_8192/MODP_2048

这个问题在官方文档有提到

docs.strongswan.org/doc


修改下服务器端的算法强度

connections {  
   eap {  
       pools = ipv4  
       local {  
           auth = pubkey  
           certs = aliyunCert.pem  
           id = aliyun.strongswan.local  
           }  
        remote {  
            auth = eap-dynamic  
            eap_id = %any  
            }  
        children {  
            eap {
                local_ts = 0.0.0.0/0  
                }  
        }
        # 增加向下兼容win10的安全提议        proposals = 3des-aes128-aes192-aes256-sha1-sha256-sha384-modp1024  
    }  }  ......

IKE身份验证凭证不可接受

上一个问题解决后,又出现了IKE身份验证凭证不可接受 的问题。

查看日志,发现ed25519签名算法不支持,IKE_AUTH失败。

11[IKE] private key of type ED25519 not supported

尝试重新生成自签名证书

创建CA私钥,使用RSA算法

pki --gen --type rsa --outform pem > rw_win.pem

生成自签名CA根证书

pki --self --ca --lifetime 3652 --in rw_win.pem --dn    "C=CN,O=strongSwan,CN=strongSwan Root CA" --outform pem > rw_winCert.pem

查看自签名CA根证书

root@aliyun:~/remote_win_cer# pki --print --in rw_winCert.pem    
TPM 2.0 - could not load "libtss2-tcti-tabrmd.so.0"  
plugin 'tpm': failed to load - tpm_plugin_create returned NULL  
 subject:  "C=CN, O=strongSwan, CN=strongSwan Root CA"  
 issuer:   "C=CN, O=strongSwan, CN=strongSwan Root CA"  
 validity:  not before Jul 20 08:27:12 2023, ok  
            not after  Jul 19 08:27:12 2033, ok (expires in 3651 days)  
 serial:    32:1f:96:5a:11:b5:7f:8a  
 flags:     CA CRLSign self-signed    
 subjkeyId: 91:2c:79:18:14:bf:ef:71:e2:57:c4:61:20:ea:93:e3:51:a5:14:c5  
 pubkey:    RSA 2048 bits  
 keyid:     f0:5d:10:63:ce:f5:8f:da:2a:d3:43:1a:23:70:1d:45:da:93:9e:0c  
 subjkey:   91:2c:79:18:14:bf:ef:71:e2:57:c4:61:20:ea:93:e3:51:a5:14:c5  
root@aliyun:~/remote_win_cer#

创建服务器证书的私钥,使用RSA算法

pki --gen --type rsa --size 2048 > aliyunRsaKey.pem

生成证书请求文件

pki --req --type priv --in aliyunRsaKey.pem \
--dn "C=CN,O=strongswan,CN=aliyun.strongswan.local" \
--san aliun.strongwaan.local \
--san aliyun@strongswan.local 
--outform pem > aliyunRsaReq.pem

使用自签名CA根证书签发aliyunRsaReq.pem

pki --issue --cacert rw_winCert.pem \
--cakey rw_win.pem --type pkcs10 \
--in aliyunRsaReq.pem --serial 01  \
--lifetime 365 \
--outform pem > aliyunRsaCert.pem

CA根证书、签发的aliyunRsaCert.pem证书和aliyun的私钥aliyunRsa.pem拷贝到/etc/swanctl相应目录

root@aliyun:~/remote_win_cer# cp rw_winCert.pem /etc/swanctl/x509ca/  
root@aliyun:~/remote_win_cer# cp aliyunRsaCert.pem /etc/swanctl/x509/  
root@aliyun:~/remote_win_cer# cp aliyunRsaKey.pem /etc/swanctl/private/

修改/etc/swanctl.conf配置文件中使用的证书名称

connections {  
   eap {  
       pools = ipv4  
       local {  
           auth = pubkey  
           # certs = aliyunCert.pem  
           certs = aliyunRsaCert.pem
           id = aliyun.strongswan.local  ......

重新加载配置

swanctl --load-all

windows客户端连接测试,还是IKE身份验证凭证不可接受

再查看下认证日志,服务端认证签名完成,并向客户端发送了 IKE_AUTH响应,但是客户端没有回复。

11[IKE] peer supports MOBIKE  
11[IKE] authentication of 'aliyun.strongswan.local' (myself) with RSA signature successful  
11[IKE] sending end entity cert "C=CN, O=strongswan, CN=aliyun.strongswan.local"  
11[ENC] generating IKE_AUTH response 1 [ IDr CERT AUTH EAP/REQ/ID ]  
11[NET] sending packet: from 192.168.10.253[4500] to 51.1.1.1[4500] (1228 bytes)  
12[IKE] sending keep alive to 51.1.1.1[4500]  
16[JOB] deleting half open IKE_SA with 51.1.1.1 after timeout

尝试在windwos终端上安装了新生成的CA根证书到受信任证书颁发机构中。

再次连接尝试,客户端显示IKE身份验证凭据不可接受

aliyunRsaCert.pem签发证书的时候,把subjectAltName写错了

root@aliyun:~/remote_win_cer# pki --print --in aliyunRsaCert.pem    
TPM 2.0 - could not load "libtss2-tcti-tabrmd.so.0"  
plugin 'tpm': failed to load - tpm_plugin_create returned NULL  
 subject:  "C=CN, O=strongswan, CN=aliyun.strongswan.local"  
 issuer:   "C=CN, O=strongSwan, CN=strongSwan Root CA"  
 validity:  not before Jul 20 16:36:19 2023, ok  
            not after  Jul 19 16:36:19 2024, ok (expires in 364 days)  
 serial:    01  
 altNames:  aliyun.strongwaan.local, aliyun@strongswan.local  
 flags:        
 authkeyId: 91:2c:79:18:14:bf:ef:71:e2:57:c4:61:20:ea:93:e3:51:a5:14:c5  
 subjkeyId: cc:b6:b4:78:19:25:7b:48:61:4c:c4:ad:2a:28:75:8a:da:e3:c8:fe  
 pubkey:    RSA 2048 bits  
 keyid:     85:c0:51:3f:8f:9b:eb:20:c7:70:8d:ac:ed:7b:fa:37:f7:74:b2:5b  
 subjkey:   cc:b6:b4:78:19:25:7b:48:61:4c:c4:ad:2a:28:75:8a:da:e3:c8:fe

重新生成相应的证书,并拷贝的相应的目录中,再次尝试,客户端还是显示“IKE身份验证凭据不可接受”

检查windows终端中的系统日志,发现错误代码13801

检索下13801代码的问题,Windows-server/remote/remote-access/troubleshoot-always-on-vpn" class=" wrap external" target="_blank" rel="nofollow noreferrer" data-za-detail-view-id="1043" style="text-decoration-line: none; border-bottom: 1px solid rgb(129, 133, 143); cursor: pointer;">微软官方的说明

错误代码: 13801
错误说明。 不接受 IKE 身份验证凭据。

可能的原因。 在以下情况下,通常会发生此错误:

    1. RAS 服务器上用于 IKEv2 验证的计算机证书在“增强型密钥用法”下没有“服务器身份验证”。
    2. RAS 服务器上的计算机证书已过期。
    3. 客户端计算机上不存在用于验证 RAS 服务器证书的根证书。
    4. 客户端计算机上使用的 VPN 服务器名称与服务器证书的 subjectName 不匹配。

可能的解决方案。 

    验证服务器证书是否在“增强型密钥用法”下包含“服务器身份验证”。 
    验证服务器证书是否仍然有效。 
    验证所使用的 CA 是否列在 RRAS 服务器上的“受信任的根证书颁发机构”下。 
    验证 VPN 客户端是否使用 VPN 服务器的 FQDN 进行连接,如 VPN 服务器的证书所示。

对照检查一下,首先第一个 ”验证服务器证书是否在“增强型密钥用法”下包含“服务器身份验证”。 我创建证书的时候,确实没有加入serverAuth的标志。

重新签发一个带有serverAuth标志的服务器证书

root@aliyun:~/remote_win_cer# pki --issue --cacert rw_winCert.pem \  
> --cakey rw_win.pem \  
> --type pkcs10 \  
> --in aliyunRsaReq.pem \  
> --serial 01 \  
> --lifetime 365 \  
> --flag serverAuth \  
> --outform pem > aliyunRsaCert.pem
root@aliyun:~/remote_win_cer# pki --print --in aliyunRsaCert.pem    
TPM 2.0 - could not load "libtss2-tcti-tabrmd.so.0"  
plugin 'tpm': failed to load - tpm_plugin_create returned NULL  
 subject:  "C=CN, O=strongswan, CN=aliyun.strongswan.local"  
 issuer:   "C=CN, O=strongSwan, CN=strongSwan Root CA"  
 validity:  not before Jul 20 17:48:16 2023, ok  
            not after  Jul 19 17:48:16 2024, ok (expires in 364 days)  
 serial:    01  
 altNames:  aliyun.strongswan.local, aliyun@strongswan.local  
 flags:     serverAuth    
 authkeyId: 91:2c:79:18:14:bf:ef:71:e2:57:c4:61:20:ea:93:e3:51:a5:14:c5  
 subjkeyId: cc:b6:b4:78:19:25:7b:48:61:4c:c4:ad:2a:28:75:8a:da:e3:c8:fe  
 pubkey:    RSA 2048 bits  
 keyid:     85:c0:51:3f:8f:9b:eb:20:c7:70:8d:ac:ed:7b:fa:37:f7:74:b2:5b  
 subjkey:   cc:b6:b4:78:19:25:7b:48:61:4c:c4:ad:2a:28:75:8a:da:e3:c8:fe  
root@aliyun:~/remote_win_cer#

将新创建的,携带有serverAuth标志的证书拷贝到/etc/swanctl/x509/目录下。

使用swanctl --load-all重新加载

使用windows客户端登录。还是登录失败,不过这次换个了问题。

已拒绝远程连接

在分析下日志,看看这次是到那个阶段协商失败了

#第一个包 IKE_SA_INIT Request
13[NET] received packet: from 51.1.1.1[500] to 192.168.10.253[500] (624 bytes)  
13[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(FRAG_SUP) N(NATD_S_IP) N(NATD_D_IP) V V V V ]  
13[IKE] received MS NT5 ISAKMPOAKLEY v9 vendor ID  
13[IKE] received MS-Negotiation Discovery Capable vendor ID  
13[IKE] received Vid-Initial-Contact vendor ID  
13[ENC] received unknown vendor ID: 01:52:8b:bb:c0:06:96:12:18:49:ab:9a:1c:5b:2a:51:00:00:00:02  
13[IKE] 51.1.1.1 is initiating an IKE_SA  

13[CFG] selected proposal: IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024  

13[IKE] local host is behind NAT, sending keep alives  
13[IKE] remote host is behind NAT  

# 第二个包IKE_SA_INIT Response
13[IKE] sending cert request for "C=CN, O=strongSwan, CN=strongSwan Root CA--outform"  
13[IKE] sending cert request for "C=CN, O=strongSwan, CN=strongSwan Root CA"  
13[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) CERTREQ N(FRAG_SUP) N(CHDLESS_S  
UP) N(MULT_AUTH) ]  
13[NET] sending packet: from 192.168.10.253[500] to 51.1.1.1[500] (369 bytes)  

# 第三个包IKE_AUTH Request
10[NET] received packet: from 51.1.1.1[4500] to 192.168.10.253[4500] (568 bytes) 
10[ENC] parsed IKE_AUTH request 1 [ EF(1/2) ]  
10[ENC] received fragment #1 of 2, waiting for complete IKE message  
10[NET] received packet: from 51.1.1.1[4500] to 192.168.10.253[4500] (192 bytes) 
10[ENC] parsed IKE_AUTH request 1 [ EF(2/2) ]  
10[ENC] received fragment #2 of 2, reassembled fragmented IKE message (692 bytes)  
10[ENC] parsed IKE_AUTH request 1 [ IDi CERTREQ N(MOBIKE_SUP) CPRQ(ADDR DNS NBNS SRV) SA TSi TSr ] 

10[IKE] received cert request for "C=CN, O=strongSwan, CN=strongSwan Root CA"  
10[IKE] received 18 cert requests for an unknown ca  

10[CFG] looking for peer configs matching 192.168.10.253[%any]...51.1.1.1[192.168.40.1]  
10[CFG] selected peer config 'eap'  

# 第四个包 IKE_AUTH Response
10[IKE] initiating EAP_IDENTITY method (id 0x00)  
10[IKE] peer supports MOBIKE  
10[IKE] authentication of 'aliyun.strongswan.local' (myself) with RSA signature successful  
10[IKE] sending end entity cert "C=CN, O=strongswan, CN=aliyun.strongswan.local"  
10[ENC] generating IKE_AUTH response 1 [ IDr CERT AUTH EAP/REQ/ID ]  
10[ENC] splitting IKE message (1252 bytes) into 2 fragments  
10[ENC] generating IKE_AUTH response 1 [ EF(1/2) ]  
10[ENC] generating IKE_AUTH response 1 [ EF(2/2) ]  
10[NET] sending packet: from 192.168.10.253[4500] to 51.1.1.1[4500] (1248 bytes) 10[NET] sending packet: from 192.168.10.253[4500] to 51.1.1.1[4500] (64 bytes)  

# 第五个包 IKE_AUTH Request 2
12[NET] received packet: from 51.1.1.1[4500] to 192.168.10.253[4500] (68 bytes)  
12[ENC] parsed IKE_AUTH request 2 [ EAP/RES/ID ]  
12[IKE] received EAP identity 'win10'  

12[IKE] loading EAP_DYNAMIC method failed  
12[ENC] generating IKE_AUTH response 2 [ EAP/FAIL ]  
12[NET] sending packet: from 192.168.10.253[4500] to 51.1.1.1[4500] (68 bytes)

这次是EAP-DYNAMIC 加载失败 查阅下官方文档

docs.strongswan.org/doc

关于eap-dynamic插件的描述,没啥大收获。

经过一些搜索未果,我直接尝试将swanctl.conf配置中的eap-dynamic修改为eap-mschapv2

connections {  
       eap {  
               local_addrs = 192.168.10.253  
               pools = ipv4  
               local {  
                       auth = pubkey  
                       certs = aliyunRsaCert.pem  
                       id = aliyun.strongswan.local  
               }  
               remote {  
                       #auth = eap-dynamic
                       # 将认证方法从eap-dynamic 修改为 eap-mschapv2                       auth = eap-mschapv2  
                       eap_id = %any  
               }  
               children {
               ......

同时我注销掉了/etc/strongswan.conf中关于eap-dynamic插件的配置

root@aliyun:~# cat /etc/strongswan.conf    
# strongswan.conf - strongSwan configuration file  
#  
# Refer to the strongswan.conf(5) manpage for details  
#  
# Configuration changes should be made in the included files  

charon {  
       load_modular = yes  
       plugins {  
               #eap-dynamic {  
               #       prefer_user = yes  
               #       preferred = tls, mschapv2, md5  
               #}  
               include strongswan.d/charon/*.conf  
       }  
}  

include strongswan.d/*.conf

然后我连接成功了。官方文档的示例还是有点差异的,至少客户端是windwos10的时候。

ike_sa信息也正常了

root@aliyun:~# swanctl --list-sas  
eap: #2, ESTABLISHED, IKEv2, 17b199b48006c28e_i 226edbfccbbd5fc5_r*  
 local  'aliyun.strongswan.local' @ 192.168.10.253[4500]  
 remote '192.168.40.1' @ 51.1.1.1[4500] EAP: 'win10' [10.10.1.1]  
 3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024  
 established 246s ago, rekeying in 13094s  
 eap: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-256/HMAC_SHA1_96  
   installed 246s ago, rekeying in 3195s, expires in 3715s  
   in  cc2dcce0,   3068 bytes,    29 packets,   235s ago  
   out 304bfbe0,      0 bytes,     0 packets  
   local  0.0.0.0/0  
   remote 10.10.1.1/32

windwos客户端也显示连接成功

但是路由好像不太对,生成了一条10.0.0.0/8的路由指向了隧道接口。而不是0.0.0.0的默认路由指向隧道。

windows10客户端上,ipv4高级设置里面勾选这个选项,断开重新连接,就OK了。

关于windows客户端ikev2自动添加路由的问题

windows的迷之设置,在ipsec隧道中使用默认路由不是我想要的,我需要的结果是在客户端的路由表中生成指定地址段的路由。

根据官方文档的说明,windwos客户端,只能通过powershell的命令来手动添加路由。 docs.strongswan.org/doc

经过搜索,发现windows内置的ikev2客户端,不支持根据服务器提供的ikev2流量选择器自动添加路由。它自动添加的唯一路由是基于分配给客户端的IP地址的基于类的路由,比如分配给客户端是10.10.1.1的地址,它添加到路由表中的路由就是10.0.0.0/8

如果想要访问服务器端192.168.10.0/24的地址,一个方法是使用powershell命令Add-VpnConnectionRoute手动添加。

参考连接: techcommunity.microsoft.com

使用Add-VpnConnectionRoutewindows上添加静态路由测试下,需要先去掉”在远程网络上使用默认网关“选项。

vpn连接上添加一条到192.168.10.0/24的路由

PS C:\> Add-VpnConnectionRoute -ConnectionName "strongswan" -DestinationPrefix "192.168.10.0/24" -PassThru

route print的查看路由表

ping测试




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/4886.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: