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
这个问题在官方文档有提到
https://docs.strongswan.org/docs/5.9/interop/windowsClients.html#strong_ke
修改下服务器端的算法强度
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
加载失败 查阅下官方文档
https://docs.strongswan.org/docs/5.9/plugins/eap-dynamic.html
关于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
的命令来手动添加路由。 https://docs.strongswan.org/docs/5.9/howtos/forwarding.html
经过搜索,发现windows
内置的ikev2
客户端,不支持根据服务器提供的ikev2
流量选择器自动添加路由。它自动添加的唯一路由是基于分配给客户端的IP
地址的基于类的路由,比如分配给客户端是10.10.1.1
的地址,它添加到路由表中的路由就是10.0.0.0/8
。
如果想要访问服务器端192.168.10.0/24
的地址,一个方法是使用powershell
命令Add-VpnConnectionRoute
手动添加。
使用Add-VpnConnectionRoute
在windows
上添加静态路由测试下,需要先去掉”在远程网络上使用默认网关“选项。
在vpn
连接上添加一条到192.168.10.0/24
的路由
PS C:\> Add-VpnConnectionRoute -ConnectionName "strongswan" -DestinationPrefix "192.168.10.0/24" -PassThru
route print
的查看路由表
ping
测试
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/4886.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~