Хочу настроить VPN на сервере с помощью libreswan и подключаться туда с iOS с помощью авторизации сертификатами. Сразу скажу, что у меня всё работает, когда я подключаюсь с Win 10. Но с iOS проблема. Пишет на клиенте User Authentication failed. Засунул туда сертификат и тд, вроде всё сделал как надо.
/etc/ipsec.conf:
config setup
plutodebug=none
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10
include /etc/crypto-policies/back-ends/libreswan.config
include /etc/ipsec.d/*.conf
/etc/ipsec.d/vpn.conf:
conn vpn
auto=add
left=5.2.3.45
leftsubnet=0.0.0.0/0
leftid=@my.server.com
leftrsasigkey=%cert
leftcert=my.server.com
leftauth=rsasig
leftsendcert=always
right=%any
rightaddresspool=172.25.20.2-172.25.20.254
rightid=%fromcert
rightrsasigkey=%cert
rightca=%same
rightauth=rsasig
rightsendcert=always
modecfgdns=1.1.1.1
dpddelay=30
dpdtimeout=120
dpdaction=clear
Сертификат генерируется такой командой:
certutil -S -d sql:$HOME/vpnca/ -c "VPN CA" -n "$client" -s "CN=$client" \
-k rsa -g 2048 -v 12 \
-t ,, --keyUsage digitalSignature,keyEncipherment --extKeyUsage serverAuth,clientAuth \
-8 "$client" \
-z "$noisefile"
где $client это что-то вроде client-id.my.server.com (раньше пытался делать просто человеческий CN без всяких хостов и DNS, но не работало, прочитал, что якобы iOS требует такого формата).
Отрывок из логов:
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: local IKE proposals (IKE SA responder matching remote proposals):
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 1:IKE=AES_GCM_C_256-HMAC_SHA2_512+HMAC_SHA2_256-NONE-ECP_256+ECP_384+ECP_521+MODP2048+MODP3072+MODP4096+MODP8192
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 2:IKE=CHACHA20_POLY1305-HMAC_SHA2_512+HMAC_SHA2_256-NONE-ECP_256+ECP_384+ECP_521+MODP2048+MODP3072+MODP4096+MODP8192
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 3:IKE=AES_CBC_256-HMAC_SHA2_512+HMAC_SHA2_256-HMAC_SHA2_512_256+HMAC_SHA2_256_128-ECP_256+ECP_384+ECP_521+MODP2048+MODP3072+MODP4096+MODP8192
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 4:IKE=AES_GCM_C_128-HMAC_SHA2_512+HMAC_SHA2_256-NONE-ECP_256+ECP_384+ECP_521+MODP2048+MODP3072+MODP4096+MODP8192
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 5:IKE=AES_CBC_128-HMAC_SHA2_256-HMAC_SHA2_256_128-ECP_256+ECP_384+ECP_521+MODP2048+MODP3072+MODP4096+MODP8192
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: proposal 1:IKE=AES_CBC_256-HMAC_SHA2_256-HMAC_SHA2_256_128-MODP2048 chosen from remote proposals 1:IKE:ENCR=AES_CBC_256;PRF=HMAC_SHA2_256;INTEG=HMAC_SHA2_256_128;DH=MODP2048[first-match] 2:IKE:ENCR=AES_CBC_256;PRF=HMAC_SHA2_256;INTEG=HMAC_SHA2_256_128;DH=ECP_256 3:IKE:ENCR=AES_CBC_256;PRF=HMAC_SHA2_256;INTEG=HMAC_SHA2_256_128;DH=MODP1536 4:IKE:ENCR=AES_CBC_128;PRF=HMAC_SHA1;INTEG=HMAC_SHA1_96;DH=MODP1024 5:IKE:ENCR=3DES;PRF=HMAC_SHA1;INTEG=HMAC_SHA1_96;DH=MODP1024
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: STATE_PARENT_R1: received v2I1, sent v2R1 {auth=IKEv2 cipher=AES_CBC_256 integ=HMAC_SHA2_256_128 prf=HMAC_SHA2_256 group=MODP2048}
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: processing decrypted IKE_AUTH request: SK{IDi,CERT,N,IDr,AUTH,CP,N,N,SA,TSi,TSr,N}
15:14:31 my.server.com pluto[6102]: loading root certificate cache
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: certificate verified OK: CN=vladimir-iphone8.my.server.com
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: IKEv2 mode peer ID is ID_IPV4_ADDR: '192.168.1.153'
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: Authenticated using RSA with IKEv2_AUTH_HASH_SHA1
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: local ESP/AH proposals (IKE_AUTH responder matching remote ESP/AH proposals):
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 1:ESP=AES_GCM_C_256-NONE-NONE-DISABLED
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 2:ESP=CHACHA20_POLY1305-NONE-NONE-DISABLED
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 3:ESP=AES_CBC_256-HMAC_SHA2_512_256+HMAC_SHA1_96+HMAC_SHA2_256_128-NONE-DISABLED
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 4:ESP=AES_GCM_C_128-NONE-NONE-DISABLED
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: 5:ESP=AES_CBC_128-HMAC_SHA1_96+HMAC_SHA2_256_128-NONE-DISABLED
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: proposal 1:ESP=AES_CBC_256-HMAC_SHA2_256_128-DISABLED SPI=0763f596 chosen from remote proposals 1:ESP:ENCR=AES_CBC_256;INTEG=HMAC_SHA2_256_128;ESN=DISABLED[first-match] 2:ESP:ENCR=AES_CBC_256;INTEG=HMAC_SHA2_256_128;ESN=DISABLED 3:ESP:ENCR=AES_CBC_256;INTEG=HMAC_SHA2_256_128;ESN=DISABLED 4:ESP:ENCR=AES_CBC_128;INTEG=HMAC_SHA1_96;ESN=DISABLED 5:ESP:ENCR=3DES;INTEG=HMAC_SHA1_96;ESN=DISABLED
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: received unsupported NOTIFY v2N_NON_FIRST_FRAGMENTS_ALSO
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #9: negotiated connection [0.0.0.0-255.255.255.255:0-65535 0] -> [172.25.20.2-172.25.20.2:0-65535 0]
15:14:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #9: STATE_V2_IPSEC_R: IPsec SA established tunnel mode {ESP/NAT=>0x0763f596 <0xb9713454 xfrm=AES_CBC_256-HMAC_SHA2_256_128 NATOA=none NATD=12.13.145.146:4500 DPD=active}
15:18:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #9: liveness_check - peer 12.13.145.146 has not responded in 120 seconds, with a timeout of 120, taking action:clear
15:18:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #9: liveness action - clearing connection kind CK_INSTANCE
15:18:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #9: deleting state (STATE_V2_IPSEC_R) aged 240.027s and sending notification
15:18:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #9: ESP traffic information: in=0B out=0B
15:18:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146 #8: deleting state (STATE_PARENT_R2) aged 240.241s and sending notification
15:18:31 my.server.com pluto[6102]: "vpn"[4] 12.13.145.146: deleting connection "vpn"[4] 12.13.145.146 instance with peer 12.13.145.146 {isakmp=#0/ipsec=#0}
15:19:31 my.server.com pluto[6102]: destroying root certificate cache
Вообще я думаю, что вся суть проблемы в IKEv2 mode peer ID is ID_IPV4_ADDR: '192.168.1.153'
. Т.е. iOS шлёт свой ID как IP-адрес. В этом отличие от Windows, та шлёт свой ID как CN из сертификата и всё работает:
IKEv2 mode peer ID is ID_DER_ASN1_DN: 'CN=vladimir-7600.my.server.com'
Если я ввожу vladimir-iphone8.my.server.com
в настройках айфона в поле local id, то шлётся
IKEv2 mode peer ID is ID_FQDN: '@vladimir-iphone8.my.server.com'
Т.е. опять не ID_DER_ASN1_DN. Но могу ошибаться, это просто то отличие, которое я вижу со стороны сервера для работающего не работающего клиента. Ну и ещё received unsupported NOTIFY v2N_NON_FIRST_FRAGMENTS_ALSO
но тут вообще непонятно ничего.
Вообще со стороны сервера всё выглядит так, будто соединение устанавливается (и потом по таймеру отваливается). А вот iOS даёт отлуп.