经过三天的苦思冥想,我终于找到了一个解决方案,可以让我的 Windows 10 Professional 内置 VPN 客户端使用 EAP 和 MSCHAPv2 连接到我的 Linux IPSec VPN 服务器。
我将尽力详细说明遇到的所有故障排除步骤和错误,希望能够为其他人节省一些时间和精力。
我确信这不是最佳的,甚至不是最安全的解决方案,但它确实可以连接。
客户端:Windows 10 Pro 22H2 19045.3208 服务器:带有 Linux Libreswan 4.6 (XFRM) 的 Ubuntu
我将 FQDN 指向路由器的 IP 地址,然后对 UDP IPSec 端口进行端口转发。在 Ubuntu 服务器上,我将 FQDN 设为机器的主机名,但在本地我将其解析为内部 IP 地址。
对于证书,我使用自签名证书,这需要在客户端执行一些额外步骤才能注册。
我也将 P.12 证书放在客户端上,尽管我不确定这是否有必要。
https://wiki.strongswan.org/issues/2613 https://docs.strongswan.org/docs/5.9/interop/windowsCaCert.html https://docs.strongswan.org/docs/5.9/interop/windowsMachineCert.html
pki --gen --type rsa --size 4096 --outform pem > caKey.pem
pki --self --ca --lifetime 3650 --in caKey.pem --type rsa --dn "C=CA, O=VPN Server 13801, CN=VPN Server Root CA 13801" --outform pem > caCert.pem
pki --gen --type rsa --size 4096 --outform pem > serverKey.pem
pki --pub --in serverKey.pem --type rsa | pki --issue --lifetime 3650 --cacert caCert.pem --cakey caKey.pem --dn "C=CA, O=VPN Server 13801, CN=fqdn.server.com" --san="fqdn.server.com" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
pki --gen --outform pem > clientKey.pem
pki --pub --in clientKey.pem --type rsa | pki --issue --lifetime 3650 --cacert caCert.pem --cakey caKey.pem --dn "C=CA, O=VPN Server 13801, CN=fqdn.server.com" --san="fqdn.server.com" --outform pem > clientCert.pem
openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "Server VPN Root CA 13801" -out clientCert.p12
cp serverCert.pem /etc/ipsec.d/certs/
cp caCert.pem /etc/ipsec.d/cacerts/
cp caKey.pem serverKey.pem /etc/ipsec.d/private/
ipsec配置文件
config setup
charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2"
uniqueids=no
conn %default
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
reauth=no
mobike=yes
conn ikev2-vpn
auto=add
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
[email protected]
leftcert=serverCert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.0.0.90
rightdns=10.0.0.1
rightsendcert=never
eap_identity=%any
leftauth=pubkey
esp=aes256gcm16
ike=aes256-sha256-modp2048!
我没有将其缩减,但它确实有效。因此,其中一个组合必须正确。请记住在文件中添加一行 serverKey.pem。
ipsec.secrets
vpnusername : EAP "password"
: RSA "serverKey.pem"
vpnusername %identity% : EAP "password"
vpnusername %any% : EAP "password"
vpnusername %any : EAP "password"
%any : EAP "password"
我还对在各个论坛中发现的 Windows 注册表做了一些更改,以忽略 IKE 名称、更新密钥交换算法等.....我无法确认它们是否对此配置有任何影响。