
私は、クライアント証明書に応じて複数の (Windows 10 - 内部 VPN クライアント) ロードウォリアー接続 (ただしサブネットは異なる) をホストする StrongSwan VPN サーバーをセットアップしようとしています。
root@VPN:/# ipsec version
Linux strongSwan U5.8.2/K5.4.0-26-generic
私のセットアップには、異なる CN ( と ) を使用する 2 組の公開キーと秘密キーがありますvpn-dev.mycom.com
。vpn-liv.mycom.com
使用されるキーipsec.conf
は次のようになります。
conn vpn-dev
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
ikelifetime=25200s
leftid=vpn-dev.mycom.com
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.100.0.0/16-10.100.254.254/16
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
rightcert=ca-cert.pem
eap_identity=%identity
ike=aes128-sha1-modp1024
conn vpn-liv
also=vpn-dev
leftid=vpn-liv.mycom.com
leftcert=liv-server-cert.pem
rightsourceip=10.200.0.0/16-10.200.254.254/16
rightcert=liv-ca-cert.pem
両方の証明書キーは、ipsec.secrets
vpn-dev.mycom.com : RSA "server-key.pem"
vpn-liv.mycom.com : RSA "liv-server-key.pem"
someuser : EAP "somepassword"
しかし、strongswanインスタンスに接続しようとするとすぐに接続vpn-dev
が使用され、strongswanはconnに切り替わりません。vpn-liv
試行中のログは次のとおりです。
Mar 30 08:47:48 VPN charon: 16[NET] received packet: from X.X.X.X[64558] to X.X.X.X[500] (1084 bytes)
Mar 30 08:47:48 VPN charon: 16[IKE] received MS NT5 ISAKMPOAKLEY v9 vendor ID
Mar 30 08:47:48 VPN charon: 16[IKE] received MS-Negotiation Discovery Capable vendor ID
Mar 30 08:47:48 VPN charon: 16[IKE] X.X.X.X is initiating an IKE_SA
Mar 30 08:47:48 VPN charon: 16[CFG] selected proposal: IKE:AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
Mar 30 08:47:48 VPN charon: 16[IKE] local host is behind NAT, sending keep alives
Mar 30 08:47:48 VPN charon: 16[IKE] remote host is behind NAT
Mar 30 08:47:48 VPN charon: 16[NET] sending packet: from X.X.X.X[500] to X.X.X.X[64558] (328 bytes)
Mar 30 08:47:48 VPN charon: 06[NET] received packet: from X.X.X.X[64596] to X.X.X.X[4500] (576 bytes)
Mar 30 08:47:48 VPN charon: 10[NET] received packet: from X.X.X.X[64596] to X.X.X.X[4500] (576 bytes)
Mar 30 08:47:48 VPN charon: 05[NET] received packet: from X.X.X.X[64596] to X.X.X.X[4500] (576 bytes)
Mar 30 08:47:48 VPN charon: 14[NET] received packet: from X.X.X.X[64596] to X.X.X.X[4500] (368 bytes)
Mar 30 08:47:48 VPN charon: 14[IKE] received cert request for "CN=PRIV VPN LIV CA"
Mar 30 08:47:48 VPN charon: 14[IKE] received 69 cert requests for an unknown ca
Mar 30 08:47:48 VPN charon: 14[CFG] looking for peer configs matching X.X.X.X[%any]...X.X.X.X[192.168.0.117]
Mar 30 08:47:48 VPN charon: 14[CFG] selected peer config 'vpn-dev' # << here it has not selected vpn-live, even if the earlier provided private key is only matching vpn-live
Mar 30 08:47:48 VPN charon: 14[IKE] initiating EAP_IDENTITY method (id 0x00)
Mar 30 08:47:48 VPN charon: 14[IKE] peer supports MOBIKE
Mar 30 08:47:48 VPN charon: 14[IKE] authentication of 'vpn-dev.mycom.com' (myself) with RSA signature successful
Mar 30 08:47:48 VPN charon: 14[IKE] sending end entity cert "CN=vpn-dev.mycom.com"
Mar 30 08:47:49 VPN charon: 14[IKE] sending cert request for "CN=PRIV VPN DEV CA"
Mar 30 08:47:49 VPN charon: 14[IKE] sending cert request for "CN=PRIV VPN LIV CA"
Mar 30 08:47:49 VPN charon: 14[NET] sending packet: from X.X.X.X[500] to X.X.X.X[64548] (364 bytes)
Mar 30 08:47:49 VPN charon: 06[NET] received packet: from X.X.X.X[64618] to X.X.X.X[4500] (92 bytes)
Mar 30 08:47:49 VPN charon: 06[IKE] received (28) error notify
基本的に目標は、1 台のマシンで 2 つの VPN エンドポイントをホストし、ログイン/使用される証明書に応じて異なる IP 範囲を提供することです。
ローカル構成は(PowerShell)で行われます
Import-Certificate -FilePath liv-ca-cert.pem -CertStoreLocation 'Cert:\LocalMachine\Root'
Add-VpnConnection -Name 'LIV VPN' -ServerAddress 'vpn-live.mycom.com' -AuthenticationMethod Eap -IdleDisconnectSeconds 43200
何か見落としているのでしょうか? セットアップが誤っているのでしょうか? それとも、strongswan と Windows 10 内部 VPN クライアントでは単に不可能なのでしょうか?
答え1
サーバーのID/証明書に基づいて接続を切り替えることができるのは、次のいずれかの場合のみです。
- クライアントはIKE_AUTH要求でリモートID(IDr)を送信しますが、多くのクライアント(特にWindows)はこれを行いません。そうでない場合、一致するIDがないため、最初の接続が使用されます。
または
- FQDNが異なるIPアドレスにマッピングされている場合、接続のローカルアドレスとして構成できるため、早い段階で正しい接続が選択されます。
答え2
証明書はサーバー上のユーザーを識別するために使用されていないため、証明書を使用することはできないことが判明しました。
そこで私は、この答えを評価するのに役立ちますeap_identiy
。
現在、クライアントは同じ証明書を使用していますが、ログインに基づいて、どのサブネットを使用するかを決定できます。
私の ipsec.conf は次のようになります。
conn eap-shared
type=tunnel
ike=aes128-sha1-modp1024
rightauth=eap-mschapv2
leftcert=server-cert.pem
conn eap-init
also=eap-shared
# this config is used to do the EAP-Identity exchange and the
# authentication of client and server
eap_identity=%identity
# the following is used to force a connection switch after
# the authentication completed
rightgroups=thisseemsirrelevant
auto=add
conn eap-liv
also=eap-shared
eap_identity=*@liv-some-domain.com
rightsourceip=10.200.0.0/16-10.200.254.254/16
auto=add
conn eap-dev
also=eap-shared
eap_identity=*@dev-some-domain.com
rightsourceip=10.100.0.0/16-10.100.254.254/16
auto=add
最もエレガントな解決策ではないかもしれませんが、私の場合にはうまくいきます。
答え3
同じ認証方法を持つ複数の接続構成の場合、Strongswan はクライアントの ID に基づいて適切な構成を選択できます。
たとえば、2 つの conn 構成を使用します。
- 両方の右側は公開鍵を使用しており、
rightca
制約として使用できます。
conn dev-network_ikev2-cert
rightauth=pubkey
rightca="C=CN, O=Sample, CN=Develop CA"
rightsourceip=10.100.0.0/16
rightdns=8.8.8.8
conn test-network_ikev2-cert
rightauth=pubkey
rightca="C=CN, O=Sample, CN=Testing CA"
rightsourceip=10.200.0.0/16
rightdns=8.8.8.8
この設定では、 によって発行された証明書を持つクライアントが構成を直接
Develop CA
選択します。dev-network_ikev2-cert
クライアントが によって発行された証明書を使用している場合
Testing CA
、strongswan は最初に config を選択しdev-network_ikev2-cert
、次に output を選択してconstraint check failed: peer not authenticated by CA 'C=CN, O=Sample, CN=Develop CA'
、次の 1 つを選択しますtest-network_ikev2-cert
。
- 右側は両方とも eap-mschapv2 を使用しており、
eap_identity
制約として使用できます。
conn dev-network_ikev2-eap
rightauth=eap-mschapv2
eap_identity=*@dev.com
rightsourceip=10.100.0.0/16
rightdns=8.8.8.8
conn test-network_ikev2-eap
rightauth=eap-mschapv2
eap_identity=*@test.com
rightsourceip=10.200.0.0/16
rightdns=8.8.8.8
これは Flo が使用する方法です。Strongswan は pubkey を使用する場合と同様のチェック ロジックを実行します。
- クライアントが の ID を使用している場合
*@test.com
、strongswan は最初に を選択しdev-network_ikev2-eap
、次に を見つけてconstraint check failed: EAP identity '*@dev.com' required
、次の 1 つを選択しますtest-network_ikev2-eap
。
これが役に立つことを願っています。