LINUX.ORG.RU
ФорумAdmin

Libreswan + iOS

 , , , ,


0

1

Хочу настроить 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 даёт отлуп.

★★★★★

dpdtimeout=120

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

Что будет, если?

А) Временно убрать везде DPD (в т.ч. переопределить дефолты, при необходимости)

Б) Пошаркать udp-порты 500/4500 (type=esp или без).

NDfan ()