Зависит от реализации strongswan // libreswan
Как правильно заметили выше, можно поиграться с отправкой данных в обе стороны, если туннель рвется во время бездействия
Однако, если туннель рвется во время отправки по нему данных в обе стороны через какое время, то скорее всего это какие-то проблемы с конфигурацией, из-за чего во время смены ключей хосты не могут друг с другом договориться и происходит то, что происходит
По уму здесь нужно разобраться в логах и понять, почему рвется соединение
Если разбираться некогда и некому (мне вот тоже не очень хочется), то самый простой способ это сделать — написать systemd юнит, который будет перезапускать ipsec демона
Выглядеть это будет примерно так:
# /etc/systemd/system/ipsec-restart.service
[Unit]
Description=restart ipsec daemon
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart ipsec
# /etc/systemd/system/ipsec-restart.timer
[Timer]
OnActiveSec=4h
OnUnitActiveSec=4h
[Install]
WantedBy=timer.target
Таким образом, каждый 4 часа демон ipsec будет перезапускаться
Делать по пингу особого смысла наверное нет, т.к. рестарт демона и переподключение срабатывают почти мгновенно, а пинг наоборот добавит некоторую задержку
Такая реализация рассчитана на работу с libreswan, но скорее всего корректно заработает и с strongswan, который точно так же работает через юнит ipsec.service
Для включения этого хака нужно выполнить
systemctl daemon-reload
systemctl enable --now ipsec-restart.timer