Туннель Strongswan IPSec не может быть восстановлен должным образом. Почему DPD продолжается?

У меня есть туннель IPSec между двумя машинами, одна из которых (инициатор) имеет два интерфейса (data0 и data1). Интерфейсы data0 имеют метрику 100, а data1 - 70, поэтому при первоначальном создании соединения используются интерфейсы data1, поскольку он имеет лучшую метрику.

После того, как соединение установлено, и я снимаю ip интерфейса data1, соединение должно быть восстановлено с новым CHILD_SA и новым виртуальным ip, используя интерфейс data0.

Но этого не происходит. Что происходит, так это то, что интерфейс data0 пытается сохранить работоспособность первого CHILD_SA, бесконечно отправляя запросы DPD.

Как я могу заставить CHILD_SA закрыться и создать новый, где используется интерфейс data0?

data0 - 10.3.219.27/16
data1 - 10.3.219.28/16
initiator's vti0 ip: 173.164.0.1
responder's vti0 ip: 192.168.169.1

Конфигурация инициатора DPD и повторная настройка конфига:

version=1
keyingtries=0
aggressive=no
dpd_delay=10
dpd_timeout=50
policies=yes
dpd_action=restart
close_action=start

Journalctl входит в код вставки: https://pastecode.xyz/view/3f89dfdd

ipsec statusall перед тем, как отключить интерфейс:

Listening IP addresses:
  10.3.219.27
  10.3.219.28
  173.164.0.1
Connections:
   conn-vti0:  0.0.0.0...94.26.49.38  IKEv1, dpddelay=10s
   conn-vti0:   local:  [tve53] uses pre-shared key authentication
   conn-vti0:   local:  [loc-2] uses XAuth authentication: any with XAuth identity 'config4'
   conn-vti0:   remote: [fortinetconfig4] uses pre-shared key authentication
     ch_vti0:   child:  dynamic === 192.168.169.0/24 TUNNEL, dpdaction=restart
Security Associations (1 up, 0 connecting):
   conn-vti0[80]: ESTABLISHED 15 minutes ago, 10.3.219.28[tve53]...94.26.49.38[fortinetconfig4]
   conn-vti0[80]: IKEv1 SPIs: ac8dfb7c5f24676a_i* 1fc2d2d23231b5ed_r, rekeying in 3 hours
   conn-vti0[80]: IKE proposal: AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_4096
     ch_vti0{51}:  INSTALLED, TUNNEL, reqid 32, ESP in UDP SPIs: c44c6569_i bda13b22_o
     ch_vti0{51}:  AES_CBC_128/HMAC_SHA2_256_128/ECP_384_BP, 4276555 bytes_i (9500 pkts, 0s ago), 1913489 bytes_o (8751 pkts, 0s ago), rekeying in 39 minutes
     ch_vti0{51}:   173.164.0.1/32 === 192.168.169.0/24

ipsec statusall после того, как я это сделаю:

Listening IP addresses:
  10.3.219.27
  173.164.0.1
Connections:
   conn-vti0:  0.0.0.0...94.26.49.38  IKEv1, dpddelay=10s
   conn-vti0:   local:  [tve53] uses pre-shared key authentication
   conn-vti0:   local:  [loc-2] uses XAuth authentication: any with XAuth identity 'config4'
   conn-vti0:   remote: [fortinetconfig4] uses pre-shared key authentication
     ch_vti0:   child:  dynamic === 192.168.169.0/24 TUNNEL, dpdaction=restart
Security Associations (2 up, 0 connecting):
   conn-vti0[81]: ESTABLISHED 8 seconds ago, 10.3.219.27[tve53]...94.26.49.38[fortinetconfig4]
   conn-vti0[81]: IKEv1 SPIs: 8425e35cef48f8b5_i* 490188becb87d6ad_r, rekeying in 3 hours
   conn-vti0[81]: IKE proposal: AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_4096
     ch_vti0{51}:  INSTALLED, TUNNEL, reqid 32, ESP in UDP SPIs: c44c6569_i bda13b22_o
     ch_vti0{51}:  AES_CBC_128/HMAC_SHA2_256_128/ECP_384_BP, 7958755 bytes_i (17317 pkts, 9s ago), 3480780 bytes_o (15870 pkts, 9s ago), rekeying in 24 minutes
     ch_vti0{51}:   173.164.0.1/32 === 192.168.169.0/24
   conn-vti0[80]: REKEYING, 10.3.219.27[tve53]...94.26.49.38[fortinetconfig4]
   conn-vti0[80]: IKEv1 SPIs: ac8dfb7c5f24676a_i* 1fc2d2d23231b5ed_r
   conn-vti0[80]: IKE proposal: AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_4096

1 ответ

Решение

Если вы хотите реализовать аварийное переключение на соединениях WAN, вам нужно настроить интерфейсы с правильной метрикой / приоритетом, а затем вручную переключаться или реализовать автоматическое переключение ping/http connect... но также подходящие статические маршруты.

Когда интерфейс data1 выходит из строя, IP-адреса ipv4 и ipv6 должны меняться / обновляться:

ip a (newer tool)
ifconfig -a (older tool)

и маршрут тоже должен измениться, чтобы трафик использовал data0. Проверить с:

ip r (using newer ip tool)
route -n (older command)

В частности, проверьте наличие любых оставшихся IP-адресов, например IP-адреса ipv6, даже если IP-адрес ipv4 исчез.

Другие вопросы по тегам