Table of Contents

Проблема

Клиент Fortinet VPN 7.0.7.0246 на системе Kubuntu 23.04 (то есть сетью управляет Network Manager) .
Сразу после подключения соединение обрывается.

Причина

Причина в том, что сразу после подключения устройство в подключении VPN имеет статус unmanaged, а должно иметь статус managed или up.

Возможные пути решения

Вот тут люди обсуждают проблему: https://community.fortinet.com/t5/Support-Forum/FortiClient-cannot-configure-routing-tables-on-Kali-Linux/td-p/251954/highlight/true

Вот простой скрипт который надо запустить перед подключением:

#!/bin/bash

echo "Try to connect to the VPN now"
x=99
while [ $x -ne 0 ]
do
  echo "Waiting for VPN connection..."
  sleep 1
  connection=$(nmcli connection show | grep -oP '^vpn\S*')
  x=$?
done

echo "VPN connection $connection was created! Waiting for 'device-reapply'..."
x=99
while [ $x -ne 0 ]
do
  nmcli -f GENERAL.STATE con show $connection 2> /dev/null
  x=${PIPESTATUS[0]}
  sleep 1
  echo "Still waiting..."
done

echo "Device is unmanaged. Setting it to 'up' again..."
nmcli con up $connection 2> /dev/null
echo "Done."

Он следит за подключением и когда оно появляется - делает ему up !
Это рабочее решение, но требует запуска скрипта вручную каждый раз перед подключением.
На основе этого скрипта я сделал другой скрипт, который может работать как сервис, и не требует запуска каждый раз вручную. Также добавил периодический пинг DNS-сервера этого VPN-подключения, чтобы избежать отключения по таймауту неактивности.

#!/bin/bash

while true; do
  connection=$(nmcli connection show | grep -oP '^vpn00\S*')
  [[ ! -z "$connection" ]] && \
  nmcli -f name,autoconnect connection | grep $connection | grep no && \
  nmcli con mod $connection connection.autoconnect yes && nmcli con up $connection 2>/dev/null && echo -n "Connected! " && date
  sleep 5
  [[ ! -z "$connection" ]] && ping -c 1 -s 1 `nmcli con show $connection 2>/dev/null | grep 'IP4.DNS\[1\]' | awk '{print $2}'` 2>&1>/dev/null
done

В системах с KDE (про Gnome не уверен) этот скрипт достаточно поместить в директрию $HOME/.config/autostart-scripts/ (или $HOME/.config/old-autostart-scripts/) и перезагрузиться.