Я использовал Strongswan для настройки туннеля IPSec между двумя устройствами. Туннельные SA настраиваются без каких-либо проблем, и трафик может проходить через соединение.
Всякий раз, когда я пингую через туннель, запрос пинга отправляется как пакет ESP, так и пакет ICMP. Ответ ping всегда представляет собой пакет ESP. Глядя на эти пакеты с помощью Wireshark, кажется, что запрос ping отправляет два пакета, один инкапсулированный, а другой нет. Ответ представляет собой просто инкапсулированный эхо-ответ ICMP. Таким образом, каждый пинг приводит к обмену 3 пакетами, а не 2.
Устройства могут обмениваться данными без туннеля IPSec, но такая же проблема возникает, когда соединение IPSec осуществляется через туннель GRE.
Как диагностировать/исправить эту проблему?
Пример tcpdump
tcpdump -vv хост гггг.гггг.гггг.гггг
tcpdump: прослушивание на enp4s0, канал EN10MB (Ethernet), размер захвата 262144 байт
10:18:33.302502 IP (tos 0x0, ttl 64, id 11718, смещение 0, флаги [DF], proto ESP (50), длина 156)
unit1 > unit2: ESP(spi=0xc3e93e85,seq=0x1), длина 136
10:18:33.302762 IP (tos 0x0, ttl 64, id 5550, смещение 0, флаги [DF], proto ICMP (1), длина 84)
unit1 > unit2: эхо-запрос ICMP, идентификатор 30684, последовательность 1, длина 64
10:18:33.303033 IP (tos 0x0, ttl 64, id 1623, смещение 0, флаги [нет], proto ESP (50), длина 156)
unit2 > unit1: ESP(spi=0xcc947f6d,seq=0x1), длина 136
Статус IPSec
статус ipsec
Ассоциации безопасности (1 вверх, 0 соединение):
устройство-устройство[2]: УСТАНОВЛЕНО 11 минут назад, yyy.yyy.yyy.yyy[yyy.yyy.yyy.yyy]...zzz.zzz.zzz.zzz[zzz.zzz.zzz.zzz]
между устройствами{1}: УСТАНОВЛЕНО, ТУННЕЛЬ, требуется 1, SPI ESP: cc947f6d_i c3e93e85_o
от устройства к устройству{1}: гггг.гггг.гггг.гггг/32 === zzz.zzz.zzz.zzz/32
/etc/ipsec.conf
настройка конфигурации
#strictcrlpolicy=да
#uniqueids = нет
#nat_traversal=да
соединение между устройствами
авторизация = секрет
авто=старт
обмен ключами=ikev2
ike=aes256-sha2_256-modp1024!
слева = гггг.гггг.гггг.гггг
справа = zzz.zzz.zzz.zzz
тип=туннель
esp = aes256-sha2_256