我有一个 AWS 实例,我想将其用作 VPN 服务器。它将 Windows 7 客户端连接到 Amazon 云中的专用网络。
- 我已经安装了 Ubuntu 12.04 和软件包
strongswan-ikev2
。 ipsec version
报告Linux strongSwan U4.5.2/K3.2.0-52-virtual
- 请注意,客户端和服务器均位于 NAT 后面(客户端位于本地办公网络中,服务器位于 Amazon 云中)。我已在 Amazon 仪表板和客户端防火墙上解除了 UDP 端口 500 和 4500 的阻止。
这是 /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
这是/etc/ipsec.secrets:
: RSA openssl-key.rsa TESTDOMAIN\testuser : EAP "testpassword"
我已将签署服务器主机证书的 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]
此时Windows立即弹出错误信息:
Verifying user name and password...
Error 13801: IKE authentication credentials are unacceptable
几秒钟后,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
就是这样。
据我所知,我正在关注所有指示在 strongSwan wiki 上。
我在这里做错了什么?
编辑:这肯定是证书的问题。我通过编辑注册表并重新启动禁用了扩展验证检查,如 MSKB926182 中所述(如果你想要链接的话,哈哈),现在我可以毫无错误地连接到我的 VPN 服务器。我会弄清楚如何生成满足要求的证书并添加答案。感谢 @ecdsa 指向 strongSwan wiki 上的证书页面,让我找到了正确的方向。
答案1
想通了。@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
关于错误
错误消息为“错误 13801:IKE 身份验证凭据不可接受”,听起来好像我的用户凭证不起作用。但是,这是一条关于身份验证的消息服务器,这由服务器的 SSL 证书完成(根据我的配置)。Microsoft 已发布文档IKEv2 VPN 连接故障排除列出了导致此错误的可能原因:
- 证书已过期。
- 客户端上不存在该证书的受信任根。
- 证书的主体名称与远程计算机不匹配。
- 该证书未分配所需的增强密钥用法 (EKU) 值。
就我而言,我的问题与 EKU 值有关。按照我在顶部链接的指南,我能够生成具有正确 EKU 值的证书,并且效果很好。
为了解决此问题,您可以在 Windows 客户端上禁用 EKU 检查(当然,这只应用于测试):
- 发射
regedit
- 导航
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
- 添加一个名为的 DWORD
DisableIKENameEkuCheck
,并将其值设置为1
- Microsoft 文档指导您完成此操作后重新启动,但我不需要这样做即可使其生效。
答案2
我遇到了相同的问题,并通过确保证书文件中有证书链(按顺序为最终实体证书、中间 CA、根 CA)解决了该问题。TLS 很有趣。
重新启动 strongSwan 后,它停止工作,但是当我将中间和根 CA 放入时,它又开始工作/etc/ipsec.d/cacerts
。
答案3
经过长时间的搜索,这个帖子让我的 Windows Phone 10 (WP10) 配置能够与 IKEv2 配合使用!需要提到的一件事可能是您必须使用 --enable-eap-identity --enable-eap-mschapv2 --enable-openssl(可能还有 --enable-dhcp)配置您的 Strongswan 才能获得必要的插件。是的,您需要正确获取证书(在服务器端 - 客户端只需要知道服务器的根 CA)。