VPN サーバーとして使用したい AWS インスタンスがあります。これにより、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"
Windows がサーバーを認証できるように、サーバーのホスト証明書に署名した CA 証明書をローカル マシン (ユーザーではない) の証明書ストアに追加しました。
次に、規定どおりにWindows 7クライアントを使用してサーバーに接続しようとします。ここただし、1 つの例外があります。IP アドレスではなく DNS 名を使用しています。ipsec.secrets ファイルにユーザー名、ドメイン、パスワードを入力すると、接続が試行されます。
そうなると、次のような strongSwan ログが表示されます。検閲と明確さのために、これらを少し変更しました。CLIENTPUB/CLIENTPRIV はクライアントのパブリック IP アドレスとプライベート IP アドレスで、AMAZONPRIV はサーバーのプライベート IP アドレスです (サーバーのパブリック IP (Amazon ではこれを「Elastic 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 サーバーにエラーなしで接続できるようになりました。要件を満たす証明書を生成する方法を見つけて、回答を追加します。正しい方向に導いてくれた strongSwan wiki の証明書ページへのポインタを提供してくれた @ecdsa に感謝します。
答え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 とルート CA を にドロップすると再び動作するようになりました/etc/ipsec.d/cacerts
。
答え3
長い検索の末、このスレッドで Windows Phone 10 (WP10) 構成を IKEv2 で動作させることができました。1 つ言及しておくべきことは、必要なプラグインを使用するには、--enable-eap-identity --enable-eap-mschapv2 --enable-openssl (およびおそらく --enable-dhcp) を使用して Strongswan を ./configure する必要があるということです。また、はい、証明書を正しく取得する必要があります (サーバー側で - クライアントはサーバーのルート CA のみを知る必要があります)。