Вопрос или проблема
У меня возникла проблема с Strongswan, которую я не могу понять. Все серверы работают на Ubuntu 22.04, фаерволы на всех хостах отключены.
У меня следующая конфигурация:
GRA11 Клиент:
Публичный IP: 54.37.XXX.XXX
Приватный IP: 10.2.0.3
GRA11 StrongSwan:
Публичный IP: 91.134.XXX.XXX
Приватный IP: 10.2.0.4
RBX3 StrongSwan:
Публичный IP: 91.134.XXX.XXX
Приватный IP: 10.1.0.10
Моя цель — из клиента GRA11 подключиться к RBX3 StrongSwan через VPN-туннель между GRA11 StrongSwan и RBX3 StrongSwan.
net.ipv4.ip_forward = 1
на обоих серверах GRA11 и RBX3 Strongswan
Моя конфигурация StrongSwan следующая:
RBX3 StrongSwan:
connections {
gw-gw {
remote_addrs = 91.134.XXX.XXX
local_addrs = 91.134.XXX.XXX
local {
auth = psk
id = 91.134.XXX.XXX
}
remote {
auth = psk
id = 91.134.XXX.XXX
}
children {
net-net {
local_ts = 10.1.0.0/16
remote_ts = 10.2.0.0/16
updown = /usr/lib/ipsec/_updown iptables
rekey_time = 43200 # время жизни SA для IPsec фазы 2
esp_proposals = aes256-sha256-modp2048
start_action = start
}
}
version = 2
mobike = no
aggressive = yes # включает агрессивный режим для IKE
reauth_time = 86400 # время жизни SA для IKE фазы 1
proposals = aes256-sha256-modp2048
}
}
secrets {
ike-1 {
secret = "SUPERSCRET"
id-2 = 91.134.XXX.XXX
id-1 = 91.134.XXX.XXX
}
}
GRA11 StrongSwan
connections {
gw-gw {
local_addrs = 91.134.XXX.XXX
remote_addrs = 91.134.XXX.XXX
local {
auth = psk
id = 91.134.XXX.XXX
}
remote {
auth = psk
id = 91.134.XXX.XXX
}
children {
net-net {
local_ts = 10.2.0.0/16
remote_ts = 10.1.0.0/16
updown = /usr/lib/ipsec/_updown iptables
rekey_time = 43200 # время жизни SA для IPsec фазы 2
esp_proposals = aes256-sha256-modp2048
start_action = start
}
}
version = 2
mobike = no
aggressive = yes # включает агрессивный режим для IKE
reauth_time = 86400 # время жизни SA для IKE фазы 1
proposals = aes256-sha256-modp2048
}
}
secrets {
ike-1 {
secret = "SUPERSCRET"
id-1 = 91.134.XXX.XXX
id-2 = 91.134.XXX.XXX
}
}
С RBX3 StrongSwan и GRA11 StrongSwan пинг работает, используя приватный IP, доказывая, что VPN-туннель работает корректно.
root@gra11-strongswn [10.2.0.4] :~# ping -c 1 10.1.0.10
PING 10.1.0.10 (10.1.0.10) 56(84) байт данных.
64 байта от 10.1.0.10: icmp_seq=1 ttl=64 время=2.33 ms
--- 10.1.0.10 ping статистика ---
1 пакет передан, 1 получен, 0% потеря пакетов, время 0ms
rtt min/avg/max/mdev = 2.330/2.330/2.330/0.000 ms
root@rbx-a-strongswan-poc:~# ping -c 1 10.2.0.4
PING 10.2.0.4 (10.2.0.4) 56(84) байт данных.
64 байта от 10.2.0.4: icmp_seq=1 ttl=64 время=2.13 ms
--- 10.2.0.4 ping статистика ---
1 пакет передан, 1 получен, 0% потеря пакетов, время 0ms
rtt min/avg/max/mdev = 2.132/2.132/2.132/0.000 ms
RBX3 Strongswan:
root@rbx-a-strongswan-poc:~# swanctl --list-conns
gw-gw: IKEv2, повторная аутентификация каждые 86400с, без повторной установки
локально: 91.134.XXX.XXX
удаленно: 91.134.XXX.XXX
локальная аутентификация с предварительным обменом ключами:
id: 91.134.XXX.XXX
удаленная аутентификация с предварительным обменом ключами:
id: 91.134.XXX.XXX
net-net: ТУННЕЛЬ, повторная установка каждые 43200с
локально: 10.1.0.0/16
удаленно: 10.2.0.0/16
root@rbx-a-strongswan-poc:~# swanctl --list-sas
gw-gw: #1, УСТАНОВЛЕН, IKEv2, 8062fb07d5ab4216_i* e368365011bc0555_r
локально '91.134.XXX.XXX' @ 91.134.XXX.XXX[500]
удаленно '91.134.XXX.XXX' @ 91.134.XXX.XXX[500]
AES_CBC-256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
установлено 1931с назад, повторная аутентификация через 77715с
net-net: #1, reqid 1, УСТАНОВЛЕН, ТУННЕЛЬ, ESP:AES_CBC-256/HMAC_SHA2_256_128
установлено 1931с назад, повторная установка через 37003с, истекает через 45589с
входящий cf4f7135, 420 байт, 5 пакетов, 265с назад
исходящий cbf9881f, 420 байт, 5 пакетов, 265с назад
локально 10.1.0.0/16
удаленно 10.2.0.0/16
root@rbx-a-strongswan-poc:~# ip -s xfrm policy
src 10.1.0.0/16 dst 10.2.0.0/16 uid 0
направление выходное действие разрешить индекс 145 приоритет 383615 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:36:43
шаблон src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0xcbf9881f(3422128159) reqid 1(0x00000001) режим туннель
уровень требуется делиться любой
enc-mask ffffffff аутентификационная маска ffffffff comp-mask ffffffff
src 10.2.0.0/16 dst 10.1.0.0/16 uid 0
направление перенаправление действие разрешить индекс 138 приоритет 383615 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:57 использование -
шаблон src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0x00000000(0) reqid 1(0x00000001) режим туннель
уровень требуется делиться любой
enc-mask ffffffff аутентификационная маска ffffffff comp-mask ffffffff
src 10.2.0.0/16 dst 10.1.0.0/16 uid 0
направление входное действие разрешить индекс 128 приоритет 383615 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:36:43
шаблон src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0x00000000(0) reqid 1(0x00000001) режим туннель
уровень требуется делиться любой
enc-mask ffffffff аутентификационная маска ffffffff comp-mask ffffffff
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет в действие разрешить индекс 123 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование -
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет выходное действие разрешить индекс 116 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование -
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет в действие разрешить индекс 107 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование 2025-03-10 11:08:57
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет выходное действие разрешить индекс 100 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование 2025-03-10 11:08:56
src ::/0 dst ::/0 uid 0
сокет в действие разрешить индекс 91 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование -
src ::/0 dst ::/0 uid 0
сокет выходное действие разрешить индекс 84 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование -
src ::/0 dst ::/0 uid 0
сокет в действие разрешить индекс 75 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование -
src ::/0 dst ::/0 uid 0
сокет выходное действие разрешить индекс 68 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:56 использование -
root@rbx-a-strongswan-poc:~# ip -s xfrm state
src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0xcbf9881f(3422128159) reqid 1(0x00000001) режим туннель
окно-переигровка 0 seq 0x00000000 флаг af-unspec (0x00100000)
хеш усеченный hmac(sha256) 0xba3c8927b21a8ef090bd6f892f87a67c037d6815bde70f650771f48f89f4ad5d (256 бит) 128
enc cbc(aes) 0x55e8588a4b7d37fba3989f8d07822b7033632ae46a5efb72540f7d3f479ae9dd (256 бит)
контекст анти-переигровка: seq 0x0, oseq 0x5, битовая карта 0x00000000
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 38934(сек), жесткое 47520(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
420(байты), 5(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:09:01
статистика:
окно-переигровка 0 переигрываний 0 неудачных 0
src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0xcf4f7135(3478090037) reqid 1(0x00000001) режим туннель
окно-переигровка 32 seq 0x00000000 флаг af-unspec (0x00100000)
хеш усеченный hmac(sha256) 0x1c648ae2db7e1e5b5cfd4abc0aa20831cf0b9f90cd6379172e7347334798d71f (256 бит) 128
enc cbc(aes) 0x4bbf3fca0b75bdec02f3fed7a43dea9322f8236784af15bb8862b367ba66bcdb (256 бит)
контекст анти-переигровка: seq 0x5, oseq 0x0, битовая карта 0x0000001f
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 43176(сек), жесткое 47520(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
420(байты), 5(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:09:01
статистика:
окно-переигровка 0 переигрываний 0 неудачных 0
root@rbx-a-strongswan-poc:~# ip route list table 220
10.2.0.0/16 через 91.134.96.1 dev ens3 proto static src 10.1.0.10
root@rbx-a-strongswan-poc:~# iptables -L
Цепочка INPUT (правило ПРИНИМАТЬ)
цель прот opt источник назначение
Цепочка FORWARD (правило ПРИНИМАТЬ)
цель прот opt источник назначение
ПРИНЯТЬ все -- 10.2.0.0/16 10.1.0.0/16 policy match dir в pol ipsec reqid 1 proto esp
ПРИНЯТЬ все -- 10.1.0.0/16 10.2.0.0/16 policy match dir out pol ipsec reqid 1 proto esp
Цепочка OUTPUT (правило ПРИНИМАТЬ)
цель прот opt источник назначение
root@rbx-a-strongswan-poc:~# sudo iptables -t nat -L -n -v
Цепочка PREROUTING (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
Цепочка INPUT (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
Цепочка OUTPUT (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
Цепочка POSTROUTING (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
root@rbx-a-strongswan-poc:~# nft list ruleset
таблица ip filter {
цепочка FORWARD {
тип фильтра крюк пересылка приоритет фильтра; политику принять;
iifname "ens3" ip saddr 10.2.0.0/16 ip daddr 10.1.0.0/16 счётчик пакетов 0 байтов 0 принять
oifname "ens3" ip saddr 10.1.0.0/16 ip daddr 10.2.0.0/16 счётчик пакетов 0 байтов 0 принять
}
}
root@rbx-a-strongswan-poc:~# ip route show table all
10.2.0.0/16 через 91.134.XXX.XX dev ens3 table 220 proto static src 10.1.0.10
по умолчанию через 91.134.XXX.XX dev ens3 proto dhcp src 91.134.XXX.XX06 метрика 100
10.1.0.0/24 dev ens4 proto kernel scope link src 10.1.0.10
91.134.XXX.XX dev ens3 proto dhcp scope link src 91.134.XXX.XX06 метрика 100
213.186.XXX.XX через 91.134.XXX.XX dev ens3 proto dhcp src 91.134.XXX.XX06 метрика 100
локально 10.1.0.10 dev ens4 table local proto kernel scope host src 10.1.0.10
широковещание 10.1.0.255 dev ens4 table local proto kernel scope link src 10.1.0.10
локально 91.134.XXX.XX06 dev ens3 table local proto kernel scope host src 91.134.XXX.XX06
локально 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
локально 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
широковещание 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
::1 dev lo proto kernel метрика 256 pref medium
2001:41d0:20a:800::/56 dev ens3 proto kernel метрика 256 pref medium
fe80::/64 dev ens4 proto kernel метрика 256 pref medium
fe80::/64 dev ens3 proto kernel метрика 256 pref medium
по умолчанию через 2001:41d0:20a:800::1 dev ens3 proto static метрика 1024 pref medium
локально ::1 dev lo table local proto kernel метрика 0 pref medium
локально 2001:41d0:20a:800::958 dev ens3 table local proto kernel метрика 0 pref medium
локально fe80::f816:3eff:fef4:c9c3 dev ens3 table local proto kernel метрика 0 pref medium
локально fe80::f816:3eff:fef5:819 dev ens4 table local proto kernel метрика 0 pref medium
многоадресатовая ff00::/8 dev ens4 table local proto kernel метрика 256 pref medium
многоадресатовая ff00::/8 dev ens3 table local proto kernel метрика 256 pref medium
GRA11 Strongswan
root@gra11-strongswn [10.2.0.4] :~# swanctl --list-conns
gw-gw: IKEv2, повторная аутентификация каждые 86400с, без повторной установки
локально: 91.134.XXX.XXX
удаленно: 91.134.XXX.XXX
локальная аутентификация с предварительным обменом ключами:
id: 91.134.XXX.XXX
удаленная аутентификация с предварительным обменом ключами:
id: 91.134.XXX.XXX
net-net: ТУННЕЛЬ, повторная установка каждые 43200с
локально: 10.2.0.0/16
удаленно: 10.1.0.0/16
root@gra11-strongswn [10.2.0.4] :~# swanctl --list-sas
gw-gw: #2, УСТАНОВЛЕН, IKEv2, 8062fb07d5ab4216_i e368365011bc0555_r*
локально '91.134.XXX.XXX' @ 91.134.XXX.XXX[500]
удаленно '91.134.XXX.XXX' @ 91.134.XXX.XXX[500]
AES_CBC-256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
установлено 1935с назад, повторная аутентификация через 81686с
net-net: #1, reqid 1, УСТАНОВЛЕН, ТУННЕЛЬ, ESP:AES_CBC-256/HMAC_SHA2_256_128
установлено 1935с назад, повторная установка через 37871с, истекает через 45585с
входящий cbf9881f, 420 байт, 5 пакетов, 268с назад
исходящий cf4f7135, 420 байт, 5 пакетов, 268с назад
локально 10.2.0.0/16
удаленно 10.1.0.0/16
root@gra11-strongswn [10.2.0.4] :~# ip -s xfrm policy
src 10.2.0.0/16 dst 10.1.0.0/16 uid 0
направление выходное действие разрешить индекс 145 приоритет 383615 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:36:43
шаблон src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0xcf4f7135(3478090037) reqid 1(0x00000001) режим туннель
уровень требуется делиться любой
enc-mask ffffffff аутентификационная маска ffffffff comp-mask ffffffff
src 10.1.0.0/16 dst 10.2.0.0/16 uid 0
направление перенаправление действие разрешить индекс 138 приоритет 383615 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:36:43
шаблон src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0x00000000(0) reqid 1(0x00000001) режим туннель
уровень требуется делиться любой
enc-mask ffffffff аутентификационная маска ffffffff comp-mask ffffffff
src 10.1.0.0/16 dst 10.2.0.0/16 uid 0
направление входное действие разрешить индекс 128 приоритет 383615 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:09:01
шаблон src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0x00000000(0) reqid 1(0x00000001) режим туннель
уровень требуется делиться любой
enc-mask ffffffff аутентификационная маска ffffffff comp-mask ffffffff
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет в действие разрешить индекс 123 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование -
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет выходное действие разрешить индекс 116 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование -
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет в действие разрешить индекс 107 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование 2025-03-10 11:08:56
src 0.0.0.0/0 dst 0.0.0.0/0 uid 0
сокет выходное действие разрешить индекс 100 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование 2025-03-10 11:08:57
src ::/0 dst ::/0 uid 0
сокет в действие разрешить индекс 91 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование -
src ::/0 dst ::/0 uid 0
сокет выходное действие разрешить индекс 84 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование -
src ::/0 dst ::/0 uid 0
сокет в действие разрешить индекс 75 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование -
src ::/0 dst ::/0 uid 0
сокет выходное действие разрешить индекс 68 приоритет 0 делиться любой флаг (0x00000000)
конфигурация времени жизни:
лимит: мягкий 0(байты), жесткий 0(байты)
лимит: мягкий 0(пакеты), жесткий 0(пакеты)
истекать добавление: мягкое 0(сек), жесткое 0(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
0(байты), 0(пакеты)
добавить 2025-03-10 11:07:44 использование -
root@gra11-strongswn [10.2.0.4] :~# ip -s xfrm state
src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0xcf4f7135(3478090037) reqid 1(0x00000001) режим туннель
окно-переигровка 0 seq 0x00000000 флаг af-unspec (0x00100000)
хеш усеченный hmac(sha256) 0x1c648ae2db7e1e5b5cfd4abc0aa20831cf0b9f90cd6379172e7347334798d71f (256 бит) 128
enc cbc(aes) 0x4bbf3fca0b75bdec02f3fed7a43dea9322f8236784af15bb8862b367ba66bcdb (256 бит)
контекст анти-переигровка: seq 0x0, oseq 0x5, битовая карта 0x00000000
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 39845(сек), жесткое 47520(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
420(байты), 5(пакеты)
добавить 2025-03-10 11:08:57 использование 2025-03-10 11:09:01
статистика:
окно-переигровка 0 переигрываний 0 неудачных 0
src 91.134.XXX.XXX dst 91.134.XXX.XXX
протокол esp spi 0xcbf9881f(3422128159) reqid 1(0x00000001) режим туннель
окно-переигровка 32 seq 0x00000000 флаг af-unspec (0x00100000)
хеш усеченный hmac(sha256) 0xba3c8927b21a8ef090bd6f892f87a67c037d6815bde70f650771f48f89f4ad5d (256 бит) 128
enc cbc(aes) 0x55e8588a4b7d37fba3989f8d07822b7033632ae46a5efb72540f7d3f479ae9dd (256 бит)
контекст анти-переигровка: seq 0x5, oseq 0x0, битовая карта 0x0000001f
конфигурация времени жизни:
лимит: мягкий (INF)(байты), жесткий (INF)(байты)
лимит: мягкий (INF)(пакеты), жесткий (INF)(пакеты)
истекать добавление: мягкое 39806(сек), жесткое 47520(сек)
истекать использование: мягкое 0(сек), жесткое 0(сек)
текущее время жизни:
420(байты), 5(пакеты)
добавить 2025-03-10 11:08:56 использование 2025-03-10 11:09:01
статистика:
окно-переигровка 0 переигрываний 0 неудачных 0
root@gra11-strongswn [10.2.0.4] :~# ip route list table 220
10.1.0.0/16 через 91.134.11.1 dev ens3 proto static src 10.2.0.4
root@gra11-strongswn [10.2.0.4] :~# iptables -L
Цепочка INPUT (правило ПРИНИМАТЬ)
цель прот opt источник назначение
Цепочка FORWARD (правило ПРИНИМАТЬ)
цель прот opt источник назначение
ПРИНЯТЬ все -- 10.1.0.0/16 10.2.0.0/16 policy match dir в pol ipsec reqid 1 proto esp
ПРИНЯТЬ все -- 10.2.0.0/16 10.1.0.0/16 policy match dir out pol ipsec reqid 1 proto esp
Цепочка OUTPUT (правило ПРИНИМАТЬ)
цель прот opt источник назначение
root@gra11-strongswn [10.2.0.4] :~# sudo iptables -t nat -L -n -v
Цепочка PREROUTING (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
Цепочка INPUT (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
Цепочка OUTPUT (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
Цепочка POSTROUTING (правило ПРИНИМАТЬ 0 пакетов, 0 байт)
pkts bytes цель прот opt внутри наружу источник назначение
root@gra11-strongswn [10.2.0.4] :~# nft list ruleset
таблица ip filter {
цепочка FORWARD {
тип фильтра крюк пересылка приоритет фильтра; политику принять;
iifname "ens3" ip saddr 10.1.0.0/16 ip daddr 10.2.0.0/16 счётчик пакетов 8 байтов 672 принять
oifname "ens3" ip saddr 10.2.0.0/16 ip daddr 10.1.0.0/16 счётчик пакетов 8 байтов 672 принять
}
}
root@gra11-strongswn [10.2.0.4] :~# ip route show table all
10.1.0.0/16 через 91.134.11.1 dev ens3 table 220 proto static src 10.2.0.4
по умолчанию через 91.134.11.1 dev ens3 proto dhcp src 91.134.XXX.XX метрика 100
10.2.0.0/16 dev ens7 proto kernel scope link src 10.2.0.4
91.134.11.1 dev ens3 proto dhcp scope link src 91.134.XXX.XX метрика 100
213.186.XXX.XXX через 91.134.11.1 dev ens3 proto dhcp src 91.134.XXX.XX метрика 100
локально 10.2.0.4 dev ens7 table local proto kernel scope host src 10.2.0.4
широковещание 10.2.255.255 dev ens7 table local proto kernel scope link src 10.2.0.4
локально 91.134.XXX.XX dev ens3 table local proto kernel scope host src 91.134.XXX.XX
локально 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
локально 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
широковещание 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
::1 dev lo proto kernel метрика 256 pref medium
2001:41d0:304:300::/56 dev ens3 proto kernel метрика 256 pref medium
fe80::/64 dev ens7 proto kernel метрика 256 pref medium
fe80::/64 dev ens3 proto kernel метрика 256 pref medium
по умолчанию через 2001:41d0:304:300::1 dev ens3 proto static метрика 1024 pref medium
локально ::1 dev lo table local proto kernel метрика 0 pref medium
любой адрес 2001:41d0:304:300:: dev ens3 table local proto kernel метрика 0 pref medium
локально 2001:41d0:304:300::6634 dev ens3 table local proto kernel метрика 0 pref medium
любой адрес fe80:: dev ens7 table local proto kernel метрика 0 pref medium
любой адрес fe80:: dev ens3 table local proto kernel метрика 0 pref medium
локально fe80::f816:3eff:fe0a:91ae dev ens7 table local proto kernel метрика 0 pref medium
локально fe80::f816:3eff:fe79:cd2d dev ens3 table local proto kernel метрика 0 pref medium
многоадресатовая ff00::/8 dev ens7 table local proto kernel метрика 256 pref medium
многоадресатовая ff00::/8 dev ens3 table local proto kernel метрика 256 pref medium
GRA11 Информация о клиенте:
root@gra11-client-poc [10.2.0.3] :~# nft list ruleset
таблица ip filter {
цепочка INPUT {
тип фильтра крюк ввод приоритет фильтра; политику принять;
iifname "ens4" ограничение скорости 100/минуту счётчик пакетов 2 байтов 168 лог с префиксом "DROP ens4: "
}
}
root@gra11-client-poc [10.2.0.3] :~# ip route show table all
по умолчанию через 54.37.32.1 dev ens3 proto dhcp src 54.37.XXX.XXX метрика 100
10.1.0.0/16 через 10.2.0.4 dev ens4 proto static
10.2.0.0/24 dev ens4 proto kernel scope link src 10.2.0.3
54.37.32.1 dev ens3 proto dhcp scope link src 54.37.XXX.XXX метрика 100
213.186.XXX.XXX через 54.37.32.1 dev ens3 proto dhcp src 54.37.XXX.XXX метрика 100
локально 10.2.0.3 dev ens4 table local proto kernel scope host src 10.2.0.3
широковещание 10.2.0.255 dev ens4 table local proto kernel scope link src 10.2.0.3
локально 54.37.XXX.XXX dev ens3 table local proto kernel scope host src 54.37.XXX.XXX
локально 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
локально 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
широковещание 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
::1 dev lo proto kernel метрика 256 pref medium
2001:41d0:304:300::/56 dev ens3 proto kernel метрика 256 pref medium
fe80::/64 dev ens4 proto kernel метрика 256 pref medium
fe80::/64 dev ens3 proto kernel метрика 256 pref medium
по умолчанию через 2001:41d0:304:300::1 dev ens3 proto static метрика 1024 pref medium
локально ::1 dev lo table local proto kernel метрика 0 pref medium
локально 2001:41d0:304:300::4b08 dev ens3 table local proto kernel метрика 0 pref medium
локально fe80::f816:3eff:fe78:325e dev ens4 table local proto kernel метрика 0 pref medium
локально fe80::f816:3eff:fe86:8711 dev ens3 table local proto kernel метрика 0 pref medium
многоадресатовая ff00::/8 dev ens4 table local proto kernel метрика 256 pref medium
многоадресатовая ff00::/8 dev ens3 table local proto kernel метрика 256 pref medium
С клиента GRA11 я могу пинговать GRA11 StrongSwan, используя приватный IP.
С клиента GRA11 я НЕ МОГУ пинговать RBX3 StrongSwan. Я провел некоторое исследование с помощью TCP dump:
GRA11 Клиент:
root@gra11-client-poc [10.2.0.3] :~# tcpdump -n -i any '(net 10.1.0.0/16 or net 10.2.0.0/16)'
tcpdump: тип связи LINUX_SLL2
tcpdump: подробный вывод скрыт, используйте -v[v]... для полного декодирования протокола
прослушивание на любом, тип связи LINUX_SLL2 (Linux cooked v2), длина снимка 262144 байта
11:36:43.488894 ens4 Out IP 10.2.0.3 > 10.1.0.10: ICMP echo request, id 70, seq 1, длина 64
11:36:48.547603 ens4 Out ARP, Request who-has 10.2.0.4 tell 10.2.0.3, длина 28
11:36:48.548911 ens4 In ARP, Reply 10.2.0.4 is-at fa:16:3e:0a:91:ae, длина 42
11:36:48.656574 ens4 In ARP, Request who-has 10.2.0.3 tell 10.2.0.4, длина 42
11:36:48.656605 ens4 Out ARP, Reply 10.2.0.3 is-at fa:16:3e:78:32:5e, длина 28
GRA11 StrongSwan:
root@gra11-strongswn [10.2.0.4] :~# tcpdump -n -i any '(net 10.1.0.0/16 or net 10.2.0.0/16)'
tcpdump: тип связи LINUX_SLL2
tcpdump: подробный вывод скрыт, используйте -v[v]... для полного декодирования протокола
прослушивание на любом, тип связи LINUX_SLL2 (Linux cooked v2), длина снимка 262144 байта
11:36:43.482686 ens7 In IP 10.2.0.3 > 10.1.0.10: ICMP echo request, id 70, seq 1, длина 64
11:36:43.485146 ens3 In IP 10.1.0.10 > 10.2.0.3: ICMP echo reply, id 70, seq 1, длина 64
11:36:43.485210 ens7 Out IP 10.1.0.10 > 10.2.0.3: ICMP echo reply, id 70, seq 1, длина 64
11:36:48.541222 ens7 In ARP, Request who-has 10.2.0.4 tell 10.2.0.3, длина 42
11:36:48.541253 ens7 Out ARP, Reply 10.2.0.4 is-at fa:16:3e:0a:91:ae, длина 28
11:36:48.649292 ens7 Out ARP, Request who-has 10.2.0.3 tell 10.2.0.4, длина 28
11:36:48.649819 ens7 In ARP, Reply 10.2.0.3 is-at fa:16:3e:78:32:5e, длина 42
RBX3 StrongSwan
root@rbx-a-strongswan-poc:~# tcpdump -n -i any '(net 10.1.0.0/16 or net 10.2.0.0/16)'
tcpdump: тип связи LINUX_SLL2
tcpdump: подробный вывод скрыт, используйте -v[v]... для полного декодирования протокола
прослушивание на любом, тип связи LINUX_SLL2 (Linux cooked v2), длина снимка 262144 байта
11:36:43.494409 ens3 In IP 10.2.0.3 > 10.1.0.10: ICMP echo request, id 70, seq 1, длина 64
Мы видим, что пинг принят RBX3 Strongswan и, похоже, получен обратно GRA11 StrongSwan, но не GRA11 Клиентом.
У меня нет идей, в чем может быть проблема. Вероятно, я упустил что-то очевидное…
Спасибо за вашу помощь
Manu
.
Ответ или решение
Вопрос о настройке StrongSwan для соединения Site-to-Site является интересным и сложным, учитывая сценарии, в которых одна сторона VPN-тоннеля не может пинговать противоположную сторону. Давайте будем рассматривать эту проблему, применяя структуру TEA (Теория, Пример, Применение).
Теория:
VPN Site-to-Site при помощи StrongSwan — это сценарий, в котором две сети соединяются через интернет-канал, создавая шифрованный безопасный туннель. В нашем случае, туннель создаётся между серверами GRA11 StrongSwan и RBX3 StrongSwan, с целью обеспечить доступ из сети одного узла в сеть другого.
Далее приведены ключевые аспекты функционирования VPN-соединений:
- Туннелирование и шифрование: Использование протоколов IPsec для создания защищенного канала.
- Аутентификация: Осуществляется с помощью предварительного общего ключа (PSK) или сертификатов.
- Маршрутизация и трансляция адресов: Настройка таблиц маршрутизации и правил NAT для корректной маршрутизации трафика через туннель.
- POLICY и STATE в XFRM: Они необходимы для управления политиками безопасности и состоянием SPI (Security Parameter Index).
- Настройки ip_forward: Параметр sysctl
net.ipv4.ip_forward
должен быть установлен в 1 для включения маршрутизации между интерфейсами.
Пример:
Исходные данные, предоставленные в вашем описании, позволяют утверждать, что туннель между StrongSwan серверами корректно установлен и подтвержден запросами ICMP между 10.2.0.4 и 10.1.0.10. Однако, при интерпретации данных tcpdump мы видим, что пинги от клиента не возвращаются. Также из информации следует, что конфигурация маршрутов, политики и состояния iptables настроены должным образом на всех серверах, что подтверждается логами.
Основные области проблемы могут быть связаны с:
- Неадекватной маршрутизацией или ошибками конфигурации NAT в GRA11 StrongSwan.
- Проблемами с фаерволом, несмотря на заявленное отсутствие его на всех узлах.
- Ошибками в политике безопасности XFRM.
Применение:
-
Проверка маршрута:
Убедитесь, что маршрутизация на клиенте настроена правильно. Проверьте, что маршрут по умолчанию ведет к GRA11 StrongSwan, который будет направлять этот трафик в туннель.ip route show table all
Убедитесь, что на клиенте присутствуют все необходимые маршруты для доступа к сети RBX3 через туннель.
-
Проверка XFRM политики и состояния:
Проверьте настройки XFRM, чтобы убедиться, что они позволяют двусторонний трафик.ip xfrm policy ip xfrm state
Убедитесь, что политика безопасности установлена и соответствуют ожидаемым правилам IPsec.
-
Проверьте NAT:
Убедитесь, что NAT не выполняет преобразование адресов, которые pингует клиент (особенно выходящих пакетов). Проверьте и проанализируйте правила iptables и таблицы NAT, убедившись, что они не вмешиваются в трафик:iptables -t nat -L -n -v
Пакеты не должны проходить транслитерацию.
-
Прозрачность безопасности:
Хотя ваши текущие настройки указывают на отключенные фаерволы, проверьте возможное наличие других управляющих систем безопасности, которые могли бы препятствовать ICMP-пакетам.nft list ruleset
В скриптах можно установить широкую политику ACCEPT для внутренней сети.
-
Мониторинг и отладка:
Используйте инструменты мониторинга и отладки для глубокого анализа сетевого трафика. Tcpdump может помочь определить, если ответы ICMP теряются между узлами.tcpdump -n -i any '(net 10.1.0.0/16 or net 10.2.0.0/16)'
При необходимости, расширяйте масштабы анализа за счет логирования и еще более детального мониторинга на каждом узле, чтобы локализовать проблему. Контролируйте пакеты на каждом этапе, чтобы уверенно заключить, где они теряются.
Эта диагностика может помочь в выявлении и устранении проблем, связанных с взаимодействием между клиентом и противоположным StrongSwan сервером. Настройки должны быть систематически проверены, от маршрутизации и пропускной способности до политик безопасности.