
여러(Windows 10 - 내부 VPN 클라이언트) roadwarrior 연결을 호스팅해야 하지만 클라이언트 인증서에 따라 다른 서브넷을 호스팅해야 하는 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
목표는 기본적으로 하나의 시스템에서 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은 클라이언트의 신원을 기반으로 적절한 구성을 선택할 수 있습니다.
예를 들어 두 개의 conn 구성을 사용합니다.
- pubkey를 사용하는 양쪽 오른쪽 모두
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은 먼저 구성을 선택한dev-network_ikev2-cert
후 출력constraint check failed: peer not authenticated by CA 'C=CN, O=Sample, CN=Develop CA'
하고 다음 항목을 선택합니다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
다음 항목을 선택합니다test-network_ikev2-eap
.
이것이 도움이 되기를 바랍니다.