LINUX.ORG.RU
ФорумAdmin

Ipsec с аутентификацией по ключам

 ,


0

1

Уже несколько дней мучаюсь, видимо пора признать что я слишком туп для того чтобы понять принцип работы 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.

leftid=CN=arch, наверное? Туда вводится не название сертификата, а IP-адрес или distinguished name.

Включите нормальное логирование, сразу поймёте, что не так.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

А откуда в обычном RSA ключе информация для идентификации? Или туда обычный RSA-ключ не подходит (openssl genrsa -out privkey 4096 && openssl rsa -in privkey -pubout -out pubkey)? Про логирование тоже не совсем понятно, я когда ipsec.conf писал, посмотрел опции для логирования и включил вывод ошибок для нужных, но видимо там многое не считается за ошибки и надо поднимать уровень до дебага. Ну и я уже переехал в swanctl.conf. Это, разумеется не помогло.

Arksunix
() автор топика
Ответ на: комментарий от Pinkbyte

А зачем оно тогда вообще нужно? И почему аутентификация по паролю - норм, а как по ключам - так докажи что ключ хороший и выпущен правильным сервером? Я в ОП-посте написал, что переезжаю с wireguard и собственно там всё просто: на локальном пире закрытый ключ, на удалённом открытый. Пиры друг друга по этим ключам аутентифицируют и устанавливают соединение. Я думал такой универсальный (по описанию) инструмент как ipsec тоже такое умеет. У меня все пиры мои, полное доверие, и поэтому мне не нужна целая pki система. Вот это неприятно конечно.

Arksunix
() автор топика
Ответ на: комментарий от Arksunix

И почему аутентификация по паролю - норм, а как по ключам - так докажи что ключ хороший и выпущен правильным сервером?

Закрытый ключ генерится на клиенте/сервере и машины не покидает. csr-ы, созданные с использованием закрытого ключа подписываются третье стороной. Если угодно - можно совместить сервер, где лежит CA с одной из сторон IPSEC-соединения.

Вот это неприятно конечно

Видимо раньше никому был не интересен децентрализованный вариант(когда участники VPN-соединения равноправны), IPSEC предполагает классическое развертывание, где есть сервер и клиент. То, что новые(ну как новые, KAME-стеку 100 лет в обед уже) версии по факту могут инициировать соединение с любой стороны - всего-лишь повышенное удобство, идея от этого принципиально не изменилась(в отличие от wireguard где всё было переосмыслено чуть-ли не с нуля)

Update: хотя возможно, я не прав - опыта работы со strongswan у меня только - пара тестовых развертываний: https://wiki.strongswan.org/projects/strongswan/wiki/SecurityRecommendations#...

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Arksunix

Или туда обычный RSA-ключ не подходит

Нет, не подходит. Как и подавляющему большинству ПО, требуется X.509.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

А точно не подходит? :-)

А то я тут читаю мануал(не имел плотно дело со strongswan, только недавно вывели из эксплуатации кучу туннелей на racoon, заменив их циской) - и там вполне себе есть RSA and ECDSA keys, аккурат перед описанием Certificate based authentication. И в описании там - чистые ключи, без сертификатов:

strongSwan supports the use of RSA and ECDSA keys for authentication.
This provides a middle ground between PSK and certificate based authentication.
Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

А про новые RFC с новым стандартом ничего не слышно? Я вот теперь думаю, что проще: сделать по-быстрому pki или всё таки восстановить работу WireGuard, пошаманив с MTU (или как там обходят, пока не смотрел). И на сколько в итоге любого из этих вариантов хватит до слудующей блокировки.

Arksunix
() автор топика
Ответ на: комментарий от Pinkbyte

До этого было так что left означал локальную машину, а right удалённую, но это не работало и я попробовал чётко расставить позиции арч - лево, сервер - право. Судя по документации так можно. В любом случае я уже перенёс конфиг в swanctl.conf. С ним немного поиграюсь сам, если не выйдет - выложу сюда для редактуры.

Arksunix
() автор топика
Последнее исправление: Arksunix (всего исправлений: 1)
Ответ на: комментарий от Arksunix

Так arch - это клиент. И его приватный ключ должен быть на машине в /etc/ipsec/certs, которая фэйлится с ошибкой «нет приватного ключа для arch», верно?

TL;DR - покажи ls -laR /etc/ipsec с клиента и с сервера

Ну и не видно где задан leftsigkey на клиенте и rightsigkey на сервере - у тебя взаимная авторизация(leftauth и rightauth оба стоят в pubkey), а указан только 1 ключ с каждой стороны. Судя по мануалу публичные ключи видимо должны быть заданы для обоих сторон соединения(как в этом случае настраиваются road-warrior-ы с динамическим IP - хз, но я думаю этот вопрос у тебя и не стоит).

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 5)
Ответ на: комментарий от Pinkbyte

Тэкс, у меня таки не вышло.

Вот swanctl.conf сервера:

connections {
	main {
		dpd_delay = 30s
		proposals = aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha384-x25519
		version = 2
		keyingtries = 10
		local_addrs = <ip сервера>
		remote_addrs = 0.0.0.0/0
		pools = mainpool
		vips = 10.0.0.1
		local-1 {
			auth=pubkey
		}
		remote-1 {
			auth=pubkey
			pubkeys=arch.pubkey
		}
		children {
			main {
				local_ts = 0.0.0.0/0
				dpd_action = trap
				esp_proposals = aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha256-sha384-x25519
			}
		}
	}
}
pools {
	mainpool {
		dns = 1.1.1.1,1.0.0.1
		addrs = 10.0.0.0/24
	}
}
secrets {
}
authorities {
}

Вот swanctl.conf клиента:

connections {
	main {
		dpd_delay=30s
		proposals=aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha384-x25519
		version=2
		keyingtries=10
		local_addrs=0.0.0.0/0,::/0 #мой провайдер не поддерживает ipv6, то что я тут забыл убрать ::/0 вряд ли могло повлиять
		remote_addrs=<ip сервера>
		vips=0.0.0.0
		local {
			auth=pubkey
		}
		remote {
			auth=pubkey
			pubkeys=<hostname сервера>.pubkey
		}
		children {
			main {
				start_action=trap
				dpd_action=start
				esp_proposals=aes256-aes192-aes128-sha256-sha384-modp2048-modp3072-modp4096-modp8192,aes128gcm16-sha256-sha384-x25519
				mode=tunnel
			}
		}
	}
}
pools {
}
secrets {
}
authorities {
}

Лог сервера:

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[LIB] loaded plugins: charon-systemd aes des rc2 sha2 sha1 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem fips-prf gmp curve25519 xcbc cmac hmac drbg attr kernel-netlink resolve socket-default stroke vici updown xauth-generic counters
00[JOB] spawning 16 worker threads
11[CFG] loaded certificate 'ad:56:e1:d8:c2:d2:25:f7:7a:c7:a6:91:11:98:f3:a0:af:96:3f:a7'
07[CFG] loaded ANY private key
15[CFG] added vici pool mainpool: 10.0.0.0, 254 entries
13[CFG]   id not specified, defaulting to cert subject 'ad:56:e1:d8:c2:d2:25:f7:7a:c7:a6:91:11:98:f3:a0:af:96:3f:a7'
13[CFG] added vici connection: main
00[DMN] SIGTERM received, shutting down

‘ad:56:e1:d8:c2:d2:25:f7:7a:c7:a6:91:11:98:f3:a0:af:96:3f:a7’ - id публичного ключа клиента

Лог клиента:

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] opening secrets file '/etc/ipsec.secrets' failed: No such file or directory
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-systemd 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
05[IKE] installed bypass policy for 192.168.0.0/24
05[IKE] installed bypass policy for 192.168.0.1/32
05[IKE] installed bypass policy for ::1/128
05[IKE] installed bypass policy for fe80::/64
05[CFG] loaded certificate 'cb:9f:3f:a2:98:dc:56:b9:b0:fa:d0:d8:27:3c:f4:2e:56:8f:99:37'
12[CFG] loaded ANY private key
14[CFG]   id not specified, defaulting to cert subject 'cb:9f:3f:a2:98:dc:56:b9:b0:fa:d0:d8:27:3c:f4:2e:56:8f:99:37'
14[CFG] added vici connection: main
14[CFG] installing 'main'
00[DMN] SIGTERM 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

‘cb:9f:3f:a2:98:dc:56:b9:b0:fa:d0:d8:27:3c:f4:2e:56:8f:99:37’ - id публичного ключа сервера

Вероятно логи могут быть лучше и подробнее, но надо разобраться как правильно их настроить. Что меня смущает, так это то что даже сейчас сервер не получает назначенный внутренний ip при запуске. А ещё клиент после запуска сервиса перестаёт пинговать сервер по ip.

Arksunix
() автор топика
Ответ на: комментарий от Arksunix

Оказалось я после перезагрузки забыл на сервере вновь открыть порты, но проблема не в этом. В логах клиента это:

14[CFG] no IDi configured, fall back on IP address
...
14[IKE] no private key found for '192.168.0.101'

Я хз, может надо вытащить id приватного ключа и вставить в конфиг? Или настроить секцию secrets? Но в ней вроде приватный ключ указывается только в случае если он запоролен, чтобы этот пароль указать, а так ничего не надо указывать.

И для полноты картины, вот загрузка ключей:

14[CFG] vici client 1 requests: load-key
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'pkcs11'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'pkcs1'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'pkcs8'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'pgp'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'openssl'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'openssl'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'agent'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'bliss'
14[LIB] builder L0 CRED_PRIVATE_KEY - ANY of plugin 'pem'
14[ASN]   file content is not binary ASN.1
14[ASN]   -----BEGIN RSA PRIVATE KEY-----
14[ASN]   -----END RSA PRIVATE KEY-----
14[LIB] builder L1 CRED_PRIVATE_KEY - ANY of plugin 'pkcs11'
14[LIB] builder L1 CRED_PRIVATE_KEY - ANY of plugin 'pkcs1'
14[ASN] L0 - RSAPrivateKey:
14[ASN] L1 - version:
14[ASN] L1 - modulus:
14[ASN] L1 - publicExponent:
14[ASN] L1 - privateExponent:
14[ASN] L1 - prime1:
14[ASN] L1 - prime2:
14[ASN] L1 - exponent1:
14[ASN] L1 - exponent2:
14[ASN] L1 - coefficient:
14[LIB] builder L2 CRED_PRIVATE_KEY - RSA of plugin 'pkcs1'
14[LIB] builder L2 CRED_PRIVATE_KEY - RSA of plugin 'pkcs8'
14[LIB] builder L2 CRED_PRIVATE_KEY - RSA of plugin 'pgp'
14[LIB] builder L2 CRED_PRIVATE_KEY - RSA of plugin 'openssl'
14[CFG] loaded ANY private key

Сам ключ из лога вырезается автоматически, с этим всё ок вроде.

Arksunix
() автор топика
Последнее исправление: Arksunix (всего исправлений: 1)
Ответ на: комментарий от Anoxemian

Ну уж нет, к тому же оффтопиком на своих устройствах не пользуюсь. Ну и я нашёл таки нужную сточку в документации: https://wiki.strongswan.org/projects/strongswan/wiki/IdentityParsing

If the string begins with @#, the type is set to KEY_ID and the string following that prefix is assumed to be the hex-encoded binary value of the identity (note that # is used for comments in config files, so quotes are necessary).

А ещё оказалось что у публичного и закрытого ключа эти id одинаковые. Ну в общем я добавил в оба конвига параметр id = "@#<id ключа>" и завелось SA прошёл. Только вот клиент получил внутренний ip 10.0.0.1 (первый из пула), а сервер ничего не получил. Ну и маршруты для трафика ещё надо настроить, чтобы клиент в интернет через сервер ходил. Но я сдвинулся с мёртвой точки и это радует.

Arksunix
() автор топика
Последнее исправление: Arksunix (всего исправлений: 1)
Ответ на: комментарий от Arksunix

Только вот клиент получил внутренний ip 10.0.0.1 (первый из пула), а сервер ничего не получил.

Всё правильно.

Ну и маршруты для трафика ещё надо настроить

В терминах ipsec.conf это leftsubnet | rightsubnet смотреть ip xfrm ... а то будете темы плодить почему ip ro ничего не кажет :)

anc ★★★★★
()
Ответ на: комментарий от Anoxemian

В том что приватный ключ не покидает машину? В том что сложность взлома пусть даже стойкого пароля меньше чем ключа?

Arksunix
() автор топика
Последнее исправление: Arksunix (всего исправлений: 1)
Ответ на: комментарий от anc

Всё правильно.

А поменять это поведение можно? Как назначить серверу 10.0.0.1?

В терминах ipsec.conf это leftsubnet | rightsubnet

Уже swanctl.conf и local_ts | remote_ts. Но для начала со внутренними ip бы разобраться.

смотреть ip xfrm …

Спасибо, учту.

Arksunix
() автор топика
Ответ на: комментарий от anc

В этом смысл VPN. Я хочу иметь возможность обращаться к своим устройствам (включая сервер), по внутреннему ip. Так бы я SS поставил и не парился.

Arksunix
() автор топика
Ответ на: комментарий от Arksunix

Я хочу иметь возможность обращаться к своим устройствам (включая сервер), по внутреннему ip.

Ну и обращайтесь по тем которые у них есть. Зачем ещё вешать?

anc ★★★★★
()
Ответ на: комментарий от anc

Они за натом. Вот есть у меня ПК дома, он за натом. Есть телефон, на нём мобильный интернет, разумеется тоже за натом. И я хочу с телефона подключиться к ПК. В случае с VPN я просто обращаюсь по ip 10.0.0.2 и всё, я подключился, будто по локальной сети. И я в который раз повторю, что перешёл на IPsec с WireGuard, там это именно так и работало. Ну и после поднятия IPsec на клиенте у меня сервер перестаёт быть доступен (ip не пингуется, ssh прерывается)

Arksunix
() автор топика
Последнее исправление: Arksunix (всего исправлений: 1)
Ответ на: комментарий от Arksunix

Вот есть у меня ПК дома, он за натом.

Я за вас рад. Но причем здесь сервер ipsec и его ip ?

И я в который раз повторю, что перешёл на IPsec с WireGuard, там это именно так и работало.

И что дальше?

anc ★★★★★
()
Ответ на: комментарий от anc

Я за вас рад. Но причем здесь сервер ipsec и его ip ?

Я хочу к серверу подключаться внутри этой сети.

И что дальше?

Я сюда пришёл потому что пытаюсь сделать также, но у меня не получается.

Arksunix
() автор топика
Ответ на: комментарий от Arksunix

Я хочу к серверу подключаться внутри этой сети.

Брр. Я перестал вас понимать. Вроде в топике заявлено «vps с убунтой, на нём strongswan». Я ничего не перепутал? Если нет, то поясните о каком «сервере внутри этой сети» идет речь? И что бы два раза не вставать заодно поясните «этой сети» - что за сеть вы имеете ввиду?

anc ★★★★★
()
Ответ на: комментарий от anc

Да, об этом сервере. Сеть это VPN. У меня есть устройства, включая эту самую vps, и я пытаюсь соединить их в виртуальную сеть, где смогу ходить с одного устройства на любое другое по внутреннему адресу через зашифрованные тоннели. Т.к. белый ip есть только у vps, то через него устанавливаются соединения, но в остальном пиры равнозначны.

Arksunix
() автор топика
Ответ на: комментарий от Arksunix

Параметры leftsubnet | rightsubnet в ipsec.conf. Если нужно больше одной, перечисляются через запятую. Например leftsubnet=172.16.0.0/24,192.168.0.1. Можно даже по протоколам/портам роутить leftsubnet=172.16.0.0/24,192.168.1.15[tcp/443],192.168.2.7[tcp/80]
На всякий случай обращаю внимание, множественное перечисление сетей работает только в ikev2, но у вас и так вроде оно. В ikev1 только одна подсеть и никаких плюшек с протоколами/портами.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

Спасибо, но поздно. Я не выдержал и сбежал на tinc. Завёлся с полпинка.

tl;dr Передаю привет тем, кто в статьях по настройке IPsec писал что это просто.

Arksunix
() автор топика
Ответ на: комментарий от Arksunix

Я не выдержал

06.11.21 15:45:53 - 08.11.21 00:52:17
Итого: 33:06:24 - от такие они: «херак, херак и в продакшен.» :)

сбежал на tinc

Это не совсем «альтернатива», но для одной пеки+смарта наверное должно хватить.

Передаю привет тем, кто в статьях по настройке IPsec писал что это просто.

Посмею предположить, что это статьи по конкретным задачам. Потому как «статейка» которая опишет все вариации, это будет уже не совсем статейка, а точнее совсем не статейка. У вас в топике описано пека с онтопиком + андроид. Для пеки не сложно, если версии совпадают, просто копируем конфигурацию. Для андроида скорее всего придется отдельную конфигурацию прописать.
И да, для двух устройств когда «никогда не держал шашки» ipsec будет «не самым» «легким» решением. И даже когда «держал шашку» всё равно может стать проблемой. У ipsec вариативности, чуть меньше чем очень много. Каждый клепатель клиентов, за исключением онтопика, закладывает определенных набор неизменяемых параметров, плюс чутка изменяемых, вот и прописывай для них всех отдельные конфигурации. Отдельно доставляет когда эти неизменяемые параметры не известны, подбери опытным путем называется. Был случай, надо было срочно за одну ночь для нескольких разных сохо роутеров настроить... 10 лет прошло... до сих пор как вспомню, вздрагиваю.

anc ★★★★★
()
Ответ на: комментарий от anc

leftsubnet | rightsubnet

Чисто ради интереса попробовал, и вроде [IKE] CHILD_SA main{3} established with SPIs c22b026d_i c84cfce9_o and TS 10.0.0.2/32 === 10.0.0.1/32, но чёт не, не назначились эти ip.

Итого: 33:06:24

На самом деле гораздо дольше, я начал ещё в сентябре, просто работал и даже на большинстве выходных не мог выделить под это время.

Arksunix
() автор топика
Ответ на: комментарий от anc

Итого: 33:06:24 - от такие они: «херак, херак и в продакшен.» :)

Да и ладно, ipsec - в самом деле довольно глупая и одновремено переусложненная штука.

thesis ★★★★★
()
Ответ на: комментарий от Arksunix

Там единственная сложность это фрагментированность реализаций. Когда iOS хочет одни алгоритмы, винда другие, libreswan не поддерживает mschap, openbsd не поддерживает цепочки сертификатов и всё такое.

Legioner ★★★★★
()
Ответ на: комментарий от thesis

ipsec - в самом деле довольно глупая и одновремено переусложненная штука.

Вы всё с большой вариативностью называете переусложненным?

anc ★★★★★
()
Ответ на: комментарий от anc

Внутренние. Хорошо, распишу как я хочу, чтобы было. vps=<внешний ip>=10.0.0.1; arch=< NAT >=10.0.0.2; android=< NAT >=10.0.0.3. Думаю дальше понятно. Я уже выше писал, что это за ip. Есть VPN, соединения между узлами которого строятся по внешним ip (обычные ip в интернете, в данном случае с поправкой на NAT). Но внутри сети (VPN) узлы могут общаться с друг другом по внутренним ip. Эту «революционную» технологию поддерживают все VPN протоколы с самого своего появления, и я полагаю, IPsec тоже, но вот почему-то назначить vps внутри сети (VPN) ip 10.0.0.1 оказалось проблематично (я пока так и не понял, как это сделать).

Arksunix
() автор топика
Последнее исправление: Arksunix (всего исправлений: 1)
Ответ на: комментарий от Arksunix

почему-то назначить vps внутри сети (VPN) ip 10.0.0.1 оказалось проблематично

Создать интерфейс нужного типа, навесить на него адрес и гонять трафик как тебе угодно. Просто какой-нибудь openvpn делает это сам, а тут надо руками.

anonymous
()
Ответ на: комментарий от anonymous

Я когда VirtualIP настраивал, strongswan его добавлял прям к основному интерфейсу, через который соединение устанавливалось. И это работало, я с сервера по этому ip обращался к клиенту. Но проблема в том, что VirtualIP он раздаёт только клиентам, а самому себе серевер не назначет.

Arksunix
() автор топика
Ответ на: комментарий от Arksunix

а самому себе серевер не назначет.

И поэтому на сервере создай интерфейс нужного типа, повесь на него адрес и гоняй трафик, как тебе угодно.

anonymous
()
Ответ на: комментарий от anonymous

Не обязательно создавать отдельный интерфейс. Можно на любой существующий повесить.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.