我有一個 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 維基上。
我在這裡做錯了什麼?
編輯:這絕對是證書的問題。我透過編輯註冊表並重新啟動來停用擴展驗證檢查,如 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 憑證完成的(根據我的配置)。微軟已經發布了相關文檔排除 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 和根 CA 放入/etc/ipsec.d/cacerts
.
答案3
經過長時間的搜索,這個帖子得到了我的 Windows Phone 10 (WP10) 配置與 IKEv2 的配合!需要提到的一件事可能是,您必須使用--enable-eap-identity --enable-eap-mschapv2 --enable-openssl (可能還有--enable-dhcp) ./configure Strongswan 才能擁有必要的插件。是的,您需要獲得正確的憑證(在伺服器端 - 客戶端只需要知道伺服器的根 CA)。