Ipsec с аутентификацией по ключам
Уже несколько дней мучаюсь, видимо пора признать что я слишком туп для того чтобы понять принцип работы Ipsec, и StrongSwan в частности. Можно было бы попробовать восстановить работу WireGuard (его блокнули), но я не ищу лёгких путей, и потому пошёл заменять его ipsec-ом. Соответственно задача: есть vps с убунтой, на нём strongswan, к нему будут подключаться кленты (они за натом) и выходить через него в интернет; вся аутентификация по ключам; внутренние ip адреса назначать из пула 10.0.0.0/24, серверу назначить внутренний ip 10.0.0.1. Из клиентов ПК на арче и андроид смартфон. В последнем я пока не понял как по ключам аутентифицироваться, но хотя бы основную машину к сети подрубить хотелось бы.
Текущая конфигурация сервера:
#/etc/ipsec.conf
config setup
charondebug = "dmn 1, mgr 1, ike 1, chd 0, job 0, cfg 1, knl 1, net 1, asn 0, enc 0, lib 0, esp 1, tls 0, tnc 0, imc 0, imv 0, pts 0"
conn main
auto = add
dpdaction = hold
dpddelay = 10s
esp = aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha256-sha384-x25519!
ike = aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha384-x25519!
keyexchange = ikev2
keyingtries = 10
reauth = yes
rekey = yes
type = tunnel
left = %any
right = <ip сервера>
leftauth = pubkey
rightauth = pubkey
lefttdns = 1.1.1.1,1.0.0.1
leftid = arch
rightid = <hostname>
leftsigkey = arch.pubkey
leftsourceip = 10.0.0.0/24
#/etc/ipsec.secrets
<hostname> : RSA <hostname>.privkey
Конфигурация клиента:
#/etc/ipsec.conf
config setup
charondebug = "dmn 1, mgr 1, ike 1, chd 0, job 0, cfg 1, knl 1, net 1, asn 0, enc 0, lib 0, esp 1, tls 0, tnc 0, imc 0, imv 0, pts 0"
conn main
auto = route
dpdaction = restart
dpddelay = 10s
esp = aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha256-sha384-x25519!
ike = aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha384-x25519!
keyexchange = ikev2
keyingtries = 10
reauth = yes
rekey = yes
type = tunnel
right = <ip сервера>
left = %any
leftauth = pubkey
rightauth = pubkey
leftdns = 1.1.1.1,1.0.0.1
leftid = arch
rightid = <hostname сервера>
rightsigkey = <hostname сервера>.pubkey
leftsourceip = %config
#/etc/ipsec.secrets
arch : RSA arch.privkey
Я пытался добавлять что либо (например left|rightsubnet), но пока убрал т.к. не работает даже это. Просто не проходит SA.
Лог с сервера:
#/var/log/charon.log
00[DMN] Starting IKE charon daemon (strongSwan 5.8.2, Linux 5.4.0-81-generic, x86_64)
00[CFG] loading ca certificates from '/etc/ipsec.d/cacerts'
00[CFG] loading aa certificates from '/etc/ipsec.d/aacerts'
00[CFG] loading ocsp signer certificates from '/etc/ipsec.d/ocspcerts'
00[CFG] loading attribute certificates from '/etc/ipsec.d/acerts'
00[CFG] loading crls from '/etc/ipsec.d/crls'
00[CFG] loading secrets from '/etc/ipsec.secrets'
00[CFG] loaded RSA private key from '/etc/ipsec.d/private/<hostname>.privkey'
00[LIB] loaded plugins: charon aesni aes rc2 sha2 sha1 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp agent xcbc hmac gcm drbg attr kernel-netlink resolve socket-default connmark stroke vici updown eap-mschapv2 xauth-generic counters
00[LIB] dropped capabilities, running as uid 0, gid 0
00[JOB] spawning 16 worker threads
05[CFG] received stroke: add connection 'main'
05[CFG] adding virtual IP address pool 10.0.0.0/24
05[CFG] loaded RSA public key for "arch" from 'arch.pubkey'
05[CFG] added configuration 'main'
09[NET] received packet: from <внешний ip клиента>[5947] to <ip сервера>[500] (564 bytes)
09[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
09[IKE] <внешний ip клиента> is initiating an IKE_SA
09[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
09[IKE] remote host is behind NAT
09[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(CHDLESS_SUP) N(MULT_AUTH) ]
09[NET] sending packet: from <ip сервера>[500] to <внешний ip клиента>[5947] (472 bytes)
12[JOB] deleting half open IKE_SA with <внешний ip клиента> after timeout
00[DMN] signal of type SIGINT received. Shutting down
Лог с клиента:
#/var/log/charon.log
00[DMN] Starting IKE charon daemon (strongSwan 5.9.3, Linux 5.14.14-arch1-1, x86_64)
00[CFG] PKCS11 module '<name>' lacks library path
00[CFG] attr-sql plugin: database URI not set
00[NET] using forecast interface enp6s0
00[CFG] joining forecast multicast groups: 224.0.0.1,224.0.0.22,224.0.0.251,224.0.0.252,239.255.255.250
00[CFG] loading ca certificates from '/etc/ipsec.d/cacerts'
00[CFG] loading aa certificates from '/etc/ipsec.d/aacerts'
00[CFG] loading ocsp signer certificates from '/etc/ipsec.d/ocspcerts'
00[CFG] loading attribute certificates from '/etc/ipsec.d/acerts'
00[CFG] loading crls from '/etc/ipsec.d/crls'
00[CFG] loading secrets from '/etc/ipsec.secrets'
00[CFG] loaded RSA private key from '/etc/ipsec.d/private/arch.privkey'
00[CFG] sql plugin: database URI not set
00[CFG] opening triplet file /etc/ipsec.d/triplets.dat failed: No such file or directory
00[CFG] loaded 0 RADIUS server configurations
00[CFG] HA config misses local/remote address
00[CFG] no script for ext-auth script defined, disabled
00[LIB] loaded plugins: charon ldap pkcs11 aesni aes des rc2 sha2 sha3 sha1 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp curve25519 agent chapoly xcbc cmac hmac ntru drbg newhope bliss curl mysql sqlite attr kernel-netlink resolve socket-default bypass-lan connmark forecast farp stroke vici updown eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-pseudonym eap-simaka-reauth eap-md5 eap-gtc eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap xauth-generic xauth-eap xauth-pam xauth-noauth dhcp radattr unity counters
00[LIB] dropped capabilities, running as uid 0, gid 0
00[JOB] spawning 16 worker threads
04[IKE] installed bypass policy for 192.168.0.0/24
04[IKE] installed bypass policy for 192.168.0.1/32
04[IKE] installed bypass policy for ::1/128
04[IKE] installed bypass policy for fe80::/64
09[CFG] received stroke: add connection 'main'
09[CFG] loaded RSA public key for "<hostname сервера>" from '<hostname сервера>.pubkey'
09[CFG] added configuration 'main'
11[CFG] received stroke: route 'main'
06[KNL] creating acquire job for policy 192.168.0.101/32[tcp/35630] === <ip сервера>/32[tcp/33543] with reqid {1}
06[IKE] initiating IKE_SA main[1] to <ip сервера>
06[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
06[NET] sending packet: from 192.168.0.101[500] to <ip сервера>[500] (564 bytes)
08[NET] received packet: from <ip сервера>[500] to 192.168.0.101[500] (472 bytes)
08[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(CHDLESS_SUP) N(MULT_AUTH) ]
08[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
08[IKE] local host is behind NAT, sending keep alives
08[IKE] no private key found for 'arch'
00[DMN] SIGINT received, shutting down
00[IKE] uninstalling bypass policy for 192.168.0.0/24
00[IKE] uninstalling bypass policy for 192.168.0.1/32
00[IKE] uninstalling bypass policy for ::1/128
00[IKE] uninstalling bypass policy for fe80::/64
Вот это no private key found for 'arch'
в логе клиента вообще мистическая надпись. Иногда её там нет, хотя я ничего не делал (SA при этом всё равно не проходит). Любые изменения /etc/ipsec.secrets не помогают, пробелы до и после двоеточия, взятие ключа в кавычки - нет ключа и всё тут, хотя ключ лежит в /etc/ipsec.d/private/arch.privkey и даже в начале лога видно что он его загрузил. Сам ключ менял, не помогло.
Запускаю с помощью сервиса strongswan-starter, состояние смотрю с помщью ipsec statusall. Хотелось бы понять, в чём проблема (кроме меня) и как назначить серверу внутренний ip 10.0.0.1.