Mic*_*ter 8 vpn windows-7 ipsec strongswan
我有一个想要成为 VPN 服务器的 AWS 实例。它将 Windows 7 客户端连接到亚马逊云中的专用网络。
strongswan-ikev2软件包。ipsec version 报告 Linux strongSwan U4.5.2/K3.2.0-52-virtual这是/etc/ipsec.conf:
config setup
plutostart=no
conn %default
keyexchange=ikev2
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
dpdaction=clear
dpddelay=300s
rekey=no
conn win7vpn
left=%any
leftsubnet=<amazon VPC CIDR block>
leftauth=pubkey
leftcert=openssl-cert.pem
leftid=<vpn server public dns name>
right=%any
rightsourceip=<amazon private IP address, which elastic ip is forwarded to>
rightauth=eap-mschapv2
rightsendcert=never
eap_identity=%any
auto=add
Run Code Online (Sandbox Code Playgroud)这是/etc/ipsec.secrets:
: RSA openssl-key.rsa
TESTDOMAIN\testuser : EAP "testpassword"
Run Code Online (Sandbox Code Playgroud)我已将签署服务器主机证书的 CA 证书添加到本地计算机(而非用户)证书存储区,以便 Windows 可以对服务器进行身份验证。
然后,我尝试使用此处规定的 Windows 7 客户端连接到服务器,但有一个例外 - 我使用的是 DNS 名称而不是 IP 地址。我在 ipsec.secrets 文件中输入用户名、域和密码,然后它尝试连接。
当它发生时,我会得到看起来像这样的 strongSwan 日志。为了审查和清晰度,我对这些进行了一些修改;CLIENTPUB/CLIENTPRIV 是客户端的公共和私有 IP 地址,而 AMAZONPRIV 是服务器的私有 IP 地址(这是服务器的公共 IP - 亚马逊称之为“弹性 IP” - 转发到的地址)。
Sep 4 00:16:17 localhost charon: 14[IKE] CLIENTPUB is initiating an IKE_SA
Sep 4 00:16:17 localhost charon: 14[NET] received packet: from CLIENTPUB[500] to AMAZONPRIV[500]
Sep 4 00:16:17 localhost charon: 14[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
Sep 4 00:16:17 localhost charon: 14[IKE] CLIENTPUB is initiating an IKE_SA
Sep 4 00:16:17 localhost charon: 14[IKE] local host is behind NAT, sending keep alives
Sep 4 00:16:17 localhost charon: 14[IKE] remote host is behind NAT
Sep 4 00:16:17 localhost charon: 14[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(MULT_AUTH) ]
Sep 4 00:16:17 localhost charon: 14[NET] sending packet: from AMAZONPRIV[500] to CLIENTPUB[500]
Sep 4 00:16:17 localhost charon: 15[NET] received packet: from CLIENTPUB[4500] to AMAZONPRIV[4500]
Sep 4 00:16:17 localhost charon: 15[ENC] unknown attribute type INTERNAL_IP4_SERVER
Sep 4 00:16:17 localhost charon: 15[ENC] parsed IKE_AUTH request 1 [ IDi CERTREQ N(MOBIKE_SUP) CP(ADDR DNS NBNS SRV) SA TSi TSr ]
Sep 4 00:16:17 localhost charon: 15[IKE] received cert request for "C=US, ST=TX, O=Test CA, CN=Test CA"
Sep 4 00:16:17 localhost charon: 15[IKE] received 316 cert requests for an unknown ca
Sep 4 00:16:17 localhost charon: 15[CFG] looking for peer configs matching AMAZONPRIV[%any]...CLIENTPUB[CLIENTPRIV]
Sep 4 00:16:17 localhost charon: 15[CFG] selected peer config 'dlpvpn'
Sep 4 00:16:17 localhost charon: 15[IKE] initiating EAP-Identity request
Sep 4 00:16:17 localhost charon: 15[IKE] peer supports MOBIKE
Sep 4 00:16:17 localhost charon: 15[IKE] authentication of 'C=US, ST=TX, O=DLP Test CA, CN=vpn.example.com' (myself) with RSA signature successful
Sep 4 00:16:17 localhost charon: 15[IKE] sending end entity cert "C=US, ST=TX, O=DLP Test CA, CN=vpn.example.com"
Sep 4 00:16:17 localhost charon: 15[ENC] generating IKE_AUTH response 1 [ IDr CERT AUTH EAP/REQ/ID ]
Sep 4 00:16:17 localhost charon: 15[NET] sending packet: from AMAZONPRIV[4500] to CLIENTPUB[4500]
Run Code Online (Sandbox Code Playgroud)
此时,Windows 立即弹出错误信息:
Verifying user name and password...
Error 13801: IKE authentication credentials are unacceptable
Run Code Online (Sandbox Code Playgroud)
几秒钟后,charon 再次尝试,然后关闭连接。
Sep 4 00:16:37 localhost charon: 16[IKE] sending keep alive
Sep 4 00:16:37 localhost charon: 16[NET] sending packet: from AMAZONPRIV[4500] to CLIENTPUB[4500]
Sep 4 00:16:47 localhost charon: 03[JOB] deleting half open IKE_SA after timeout
Run Code Online (Sandbox Code Playgroud)
就是这样。
据我所知,我正在遵循strongSwan wiki 上的所有说明。
我在这里做错了什么?
编辑:这绝对是证书的问题。我按照 MSKB926182 中的说明通过编辑注册表并重新启动来禁用扩展验证检查(如果你想要链接的话,哈哈),现在我可以连接到我的 VPN 服务器,没有错误。我将弄清楚如何生成满足要求的证书并添加答案。感谢 @ecdsa 提供指向 strongSwan wiki 上证书页面的指针,这让我指向了正确的方向。
想通了这一点。@ecdsa 为我指明了正确的方向,我终于能够按照本指南解决问题。
ipsec pki --gen --type rsa --size 4096 --outform pem > vpnca.key.pem
ipsec pki --self --flag serverAuth --in vpnca.key.pem --type rsa --digest sha1 \
--dn "C=US, O=Example Company, CN=Example VPN CA" --ca > vpnca.crt.der
ipsec pki --gen --type rsa --size 4096 --outform pem > vpn.example.com.key.pem
ipsec pki --pub --in vpn.example.com.key.pem --type rsa > vpn.example.com.csr
ipsec pki --issue --cacert vpnca.crt.der --cakey vpnca.key.pem --digest sha1 \
--dn "C=US, O=Example Company, CN=vpn.example.com" \
--san "vpn.example.com" --flag serverAuth --outform pem \
< vpn.example.com.csr > vpn.example.com.crt.pem
openssl rsa -in vpn.example.com.key.pem -out vpn.example.com.key.der -outform DER
cp vpnca.crt.der /etc/ipsec.d/cacerts
cp vpn.example.com.crt.pem /etc/ipsec.d/certs
cp vpn.example.com.key.der /etc/ipsec.d/private
Run Code Online (Sandbox Code Playgroud)
错误消息是“错误 13801:IKE 身份验证凭据不可接受”,这听起来像是我的用户凭据不起作用。但是,这是关于验证服务器的消息,这是由服务器的 SSL 证书(根据我的配置)完成的。Microsoft 已发布有关IKEv2 VPN 连接故障排除的文档,其中列出了此错误的可能原因:
就我而言,我的问题与 EKU 值有关。按照我在顶部链接的指南,我能够生成具有正确 EKU 值的证书,并且效果很好。
要解决此问题,您可以在 Windows 客户端上禁用 EKU 检查(当然,这应该仅用于测试):
regeditHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\ParametersDisableIKENameEkuCheck,并将其值设置为1| 归档时间: |
|
| 查看次数: |
31801 次 |
| 最近记录: |