Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Секция
Столбец

Оглавление
stylenone

Столбец
Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8);
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7).

Введение

strongSwan StrongSwan – это программное обеспечение для создания VPN-соединений на основе IPsec-протокола. Домашняя страница ПО: https://strongswan.org/.

Используется двухфакторная аутентификации пользователя:

  • первый фактор – пара: открытый ключ (сертификат) и закрытый ключ;
  • второй фактор – токен, принадлежащий пользователю. Сертификат и закрытый ключ пользователя хранятся на токене.

При установке VPN-соединения производится аутентификация как strongSwan-сервера, так и strongSwan-клиента. Данные между сервером и клиентом передаются в зашифрованном виде.

В статье описана настройка аутентификации сервера и клиента с помощью закрытых ключей. Для клиента дополнительно используется второй фактор аутентификации в виде ключевого носителя (токена)Общая статья по работе с токенами: Ключевые носители (токены) PKCS в Astra Linux.

Настройка сети

На серверном и клиентском узлах:

  1. Разрешить пересылку сетевых пакетов:
    Command

    cat << EOF | sudo tee /etc/sysctl.d/10-net-forward.conf >/dev/null
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=1
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv6.conf.all.accept_redirects = 0
    net.ipv6.conf.all.send_redirects = 0
    EOF
    sudo sysctl --system

Якорь
Create_CA
Create_CA

Создание удостоверяющего центра и

...

выпуск сертификата сервера

Все сертификаты создаются и хранятся в удостоверяющем центре (УЦ), в качестве которого может использоваться любой компьютер. 

Первым Вначале создаётся самоподписанный корневой сертификат УЦ. Затем с помощью сертификата УЦ создаются сертификаты для сервера и клиента. Созданные сертификаты и ключи копируются в определённые каталоги на сервере и клиенте.

...

  1. Установить программы для работы с сертификатами:
    Command

    sudo apt install strongswan strongswan-pki

    Для Astra Linux SE 1.8 дополнительно установить:
    Command

    sudo apt install libtss2-tcti-tabrmd0

  2. Создать для удостоверяющего центра закрытый ключ ca.key.pem и самоподписанный сертификат ca.cert.pem:
    Command

    pki --gen --size 4096 --type rsa --outform pem \
      | sudo tee /etc/ipsec.d/private/ca.key.pem

    sudo pki --self --ca --in /etc/ipsec.d/private/ca.key.pem --type rsa --dn "CN=CA" --lifetime 3650 --outform pem \
      | sudo tee /etc/ipsec.d/cacerts/ca.cert.pem

  3. Создать для сервера закрытый ключ server.key.pem и сертификат server.cert.pem:
    Command

    pki --gen --size 4096 --type rsa --outform pem \
      | sudo tee /etc/ipsec.d/private/server.key.pem

    sudo pki --pub --in /etc/ipsec.d/private/server.key.pem --type rsa \
      | sudo pki --issue --lifetime 3650 --cacert /etc/ipsec.d/cacerts/ca.cert.pem --cakey /etc/ipsec.d/private/ca.key.pem \
          --dn "CN=<IP-адрес_сервера>" --san "<IP-адрес_сервера>" --flag serverAuth --flag ikeIntermediate --outform pem \
      | sudo tee /etc/ipsec.d/certs/server.cert.pem

    где <IP-адрес_сервера> – IP-адрес сервера.
    Создать для клиента закрытый ключ client.key.pem и сертификат client.cert.pem

Настройка VPN-сервера

На серверном узле:

  1. Установить пакеты с strongSwan:
    Command

    pki sudo apt install strongswan libstrongswan--gen --size 4096 --type rsa --outform pem \
      | sudo tee /etc/ipsec.d/private/client.key.pemsudo pki --pub --in extra-plugins

    Для Astra Linux SE 1.8 дополнительно установить:
    Command

    sudo apt install libtss2-tcti-tabrmd0

  2. Если УЦ был создан на сервере с помощью команд из раздела "Создание удостоверяющего центра и сертификатов", то сертификаты уже расположены в нужном месте, а этот пункт пропускается.
    Скопировать из УЦ на серверный узел:
      - ca.cert.pem (сертификат УЦ) в каталог /etc/ipsec.d/private/client.key.pem --type rsa \
      | sudo pki --issue --lifetime 3650 --cacert cacerts/;
      - server.cert.pem (сертификат сервера) в каталог /etc/ipsec.d/cacerts/ca.cert.pem --cakey certs/;
      - server.key.pem (закрытый ключ сервера) в каталог /etc/ipsec.d/private/ca.key.pem \
          --dn "CN=<IP-адрес_клиента>" --san "<IP-адрес_клиента>" --flag clientAuth --flag ikeIntermediate --outform pem \
      | sudo tee /etc/ipsec.d/certs/client.cert.pemгде <IP-адрес_клиента> – IP-адрес клиента.

Настройка VPN-сервера

На серверном узле:

  1. Указать закрытый ключ strongSwan-сервера в файле /etc/ipsec.secrets в виде строки:
    Блок кода
    : RSA server.key.pem
  2. Задать настройки strongSwan в файле /etc/ipsec.conf:
    Блок кода
    config setup
            charondebug= ike 4, cfg 2
    
    conn server
            type=tunnel
            auto=add
     
  3. Установить пакеты с strongSwan:
    Command

    sudo apt install strongswan libstrongswan-extra-plugins

  4. Если УЦ был создан на сервере с помощью команд из раздела "Создание удостоверяющего центра и сертификатов", то сертификаты уже расположены в нужном месте, и этот пункт не надо выполнять.
    Скопировать из УЦ на серверный узел:
      - ca.cert.pem (сертификат УЦ) в каталог /etc/ipsec.d/cacerts/;
      - server.cert.pem (сертификат сервера) в каталог /etc/ipsec.d/certs/;
      - server.key.pem (закрытый ключ сервера) в каталог /etc/ipsec.d/private/.
  5. Настроить strongSwan-сервер на использование закрытого ключа сервера.
    Для этого в файле /etc/ipsec.secrets указать строку с путём до закрытого ключа сервера:
    Блок кода
    : RSA "/etc/ipsec.d/private/server.key.pem"
  6. Задать настройки strongSwan-сервера в файле /etc/ipsec.conf:
    Блок кода
    config setup
            charondebug= ike 4, cfg 2
    
    conn server
            typekeyexchange=tunnelikev2
            autokeyingtries=add%forever
            keyexchange=ikev2ike=aes256-sha1-modp1024!
            keyingtries=%forever
            ike=aes256-sha1-modp1024!
            esp=aes256-sha1!
            dpdaction=hold
            dpddelay=300s
    ##        forceencaps=yes
    
            leftid=${MY_HOST_IP}
    <IP-адрес_сервера>        leftauth=pubkey
            leftcert=server.cert.pem      # сертификат сервера
            leftsendcert=always
            leftsubnet=10.1.1.0/24   # Например: 10.192.6.108
          # виртальная сеть, досупная на сервере
      leftauth=pubkey
            rightauth=pubkey
    leftcert=server.cert.pem        rightid=%any
            rightsourceip=10.1.1.0/24     # подсеть виртуальных адресов, из которой будет выдан адрес клиенту
            rightdns=10.1.1.250      # Сертификат сервера
           # адрес DNS-сервера, передаваемый клиенту
    где
      - <IP-адрес_сервера> – IP-адрес серверного узла;
      - <Подсеть_виртуальных_IP-адресов_для_клиентов> – . Например,
      leftsendcert=always
            leftsubnet=<виртуальная_сеть__предоставляемая_сервером>             # Например: 10.1.1.0/24

  7. Перезапустить strongSwan для применения настроек:
    Command

    sudo ipsec restart

  8. 
    
            rightauth=pubkey
            rightid=%any
            rightsourceip=<диапазон_виртуальных_адресов_для_выдачи_клиентам>    # Например: 10.1.1.0/24
            rightdns=<IP-адреса_DNS-серверов__передаваемые_клиентам>            # Например: 10.1.1.250,10.1.1.240
  9. Перезапустить strongSwan для применения настроек:
    Command

    sudo ipsec restart

Настройка VPN-клиента

Настройка strongSwan

...

На клиентском узле:

  1. Установить пакеты с strongSwan:
    Command

    sudo apt install strongswan libstrongswan-extra-plugins

    Для Astra Linux SE 1.8 дополнительно установить:
    Command

    sudo apt install libtss2-tcti-tabrmd0

  2. Скопировать из УЦ на клиентский узел:
      - ca.cert.pem (сертификат УЦ) в каталог /etc/ipsec.d/cacerts/;
      - client.cert.pem (сертификат пользователя) и client.key.pem (закрытый ключ пользователя) в домашний каталог пользователя.
  3. Задать настройки strongSwan -клиента в файле /etc/ipsec.conf:
    Блок кода
    config setup
            charondebug= ike 4, cfg 2
    
    conn client
            type=tunnel
            auto=start
            keyexchange=ikev2
            keyingtries=%forever
            ike=aes256-sha1-modp1024!
            esp=aes256-sha1!
            dpdaction=restart
    
            leftauthforceencaps=pubkeyyes
    
            leftcert=%smartcard0@rutoken:45leftauth=pubkey
        # сертификат клиента находится на токене
     leftcert=<токен_и_закрытый_ключ>        leftsendcert=always
            leftsourceip=%config
    
            right=${PEER_HOST_IP}            # Например: # IP-адрес сервера
            rightid=${PEER_HOST_IP}            # IP-адрес сервера
            rightauth=pubkey
            rightsubnet=10.1.1.0/24  %smartcard0@rutoken:45 или %smartcard:45
                                                                                # Формат значения <токен_и_закрытый_ключ> описан ниже в разделе "Настройка ... токена ...".
            leftsendcert=always
      # виртуальная сеть, предоставляемая сервером
    где
      -  <IP-адрес_сервера> – IP-адрес серверного узла.

Настройка использования ключевого носителя (токена) в качестве второго фактора аутентификации

Предполагается, что на клиентском узле настроен единый доступ к ключевым носителям разных производителей (см. статью).

Общая информация по работе с ключевыми носителями дана в статье "Ключевые носители (токены) PKCS в Astra Linux".

  1. Подключить ключевой носитель к клиентскому узлу.
  2. Записать на ключевой носитель сертификат и закрытый ключ клиента:
    Command

    p11tool --login --write --load-certificate="<путь_к_клиентскому_сертификату>" --id=<идентификатор_объекта> --label="<название_объекта>"

    p11tool --login --write --load-privkey="<путь_к_клиентскому_закрытому_ключу>" --id=<идентификатор_объекта> --label="<название_объекта>"

    где
      - <идентификатор_объекта> – идентификатор, с которым сертификат и ключ будут храниться на токене;
      - <название_объекта> – название, с которым сертификат и ключ будут храниться на токене.
    Пример команд:
    Command

    p11tool --login --write --load-certificate="client.cert.pem" --id=45 --label="mykey"

    p11tool --login --write --load-privkey="client.key.pem" --id=45 --label="mykey"

    Включить поддержку токенов в strongSwan.
    Для этого в файле /etc/strongswan.d/charon/pkcs11.conf в секции modules указать произвольное название модуля и путь до интерфейсной библиотеки используемого токена:
    Блок кода
    pkcs11 {
    
        # Whether to load the plugin. Can also be an integer to increase the
        # priority of this plugin.
        load = yes
    
        ...
    
        # List of available PKCS#11 modules.
        modules {
        leftsourceip=%config
    
            right=<IP-адрес_сервера>                                            # Например: 10.192.6.108
            rightid=<IP-адрес_сервера>                                          # Например: 10.192.6.108
            rightauth=pubkey
            rightsubnet=<виртуальная_сеть__предоставляемая_сервером>            # Например: 10.1.1.0/24
                                                                 <название_модуля> {
                path = <путь_к_интерфейсной_библиотеке_токена>
            }
        }
    }
    Например, для Рутокена файл /etc/strongswan.d/charon/pkcs11.conf может выглядеть так:
    Блок кода
    pkcs11 {
      load = yes
    
      modules {
        rutoken {
     # Если указать 0.0.0.0/0, то весь сетевой траффик клиента
                                           path = /usr/lib/librtpkcs11ecp.so
        }
      }
    }
    Настроить strongSwan на использование закрытого ключа клиента, который находится на токене.
    Для этого в файле /etc/ipsec.secrets указать строку с описанием токена и закрытого ключа:
    Блок кода
    : PIN <токен_и_закрытый_ключ> <pin-код_токена>
    где
      - <токен_и_закрытый_ключ> – задаётся по формату: %smartcard[<номер_слота_с_токеном>[@<название_модуля>]]:<идентификатор_объекта>
      - <название_модуля> – вышезаданное в настройках название модуля;
      - <идентификатор_объекта> – идентификатор закрытого ключа, хранящегося на токене.
    Пример описания для вышеприведённого Рутокена:
    Блок кода
    : PIN %smartcard0@rutoken:45 12345678
  3. Перезапустить strongSwan для применения настроек:
    Command

    sudo ipsec restart

Для просмотра состояния установленного VPN-соединения используется команда:

Command

sudo ipsec status

...

titleПример вывода команды...

...

  1.                                #     будет "заворачиваться" в VPN-соединение (туннель).
          

...

  1.   

...

  1.  

...

  1.  

...

  1.  

...

  1.       

...

  1.                 

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.       

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.           

...

  1.   

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.      # 

...

  1.    

...

Либо для вывода более подробной информации о соединении:

Command

sudo ipsec statusall

...

titleПример вывода команды...

...

  1.  Тогда на сервере параметру leftsubnet тоже 
                                                                                #     необходимо задать значение 0.0.0.0/0.

Выпуск клиентского сертификата и подготовка ключевого носителя

Предполагается, что на клиентском узле настроен единый доступ к ключевым носителям разных производителей (см. статью).

Общая информация по работе с ключевыми носителями дана в статье "Ключевые носители (токены) PKCS в Astra Linux".

Использование пассивного ключевого носителя

При использовании пассивного ключевого носителя:

  • средствами ОС
      - создаются закрытый ключ и сертификат клиента;
      - сертификат клиента подписывается в УЦ;
      - закрытый ключ и подписанный сертификат клиента записываются на токен.


На клиентском узле в домашнем каталоге пользователя:

  1. Создать закрытый ключ клиента client1.key.pem:
    Command

    openssl genrsa -out client1.key.pem 4096

  2. Создать запрос на подписание клиентского сертификата client1.cert.csr:
    Command

    openssl req -key client1.key.pem -new -out client1.cert.csr \
      -subj "/CN=<IP-адрес_клиента>"
    -addext "subjectAltName=IP.1:<IP-адрес_клиента>"

    где <IP-адрес_клиента> – IP-адрес клиентского узла.
  3. Отправить файл с запросом client1.cert.csr на узел УЦ.

На удостоверяющем центре:

  1. Подписать запрос client1.cert.csr с помощью сертификата УЦ и сохранить подписанный сертификат клиента client1.cert.pem в каталоге /etc/ipsec.d/certs/:
    Command

    sudo pki --issue --cacert /etc/ipsec.d/cacerts/ca.cert.pem --cakey /etc/ipsec.d/private/ca.key.pem \
        --in client
    1.cert.csr --lifetime 3650 --type pkcs10 --flag clientAuth --outform pem \
      | sudo tee /etc/ipsec.d/certs/client1.cert.pem

  2. Скопировать сертификат клиента client1.cert.pem на клиентский узел в домашний каталог пользователя.

На клиентском узле в домашнем каталоге пользователя:

  1. Подключить ключевой носитель к клиентскому узлу.
  2. Записать на ключевой носитель сертификат и закрытый ключ клиента:
    Command

    p11tool --login --write --load-certificate="<путь_к_клиентскому_сертификату>" --id=<идентификатор_ключевой_пары> --label="<метка_ключевой_пары>"

    p11tool --login --write --load-privkey="<путь_к_клиентскому_закрытому_ключу>" --id=<идентификатор_ключевой_пары> --label="<метка_ключевой_пары>"

    где
      - <идентификатор_ключевой_пары> – идентификатор, с которым сертификат и ключ будут храниться на токене;
      - <метка_ключевой_пары> – название, с которым сертификат и ключ будут храниться на токене.
    Предупреждение

    Перед записью необходимо убедиться, что на токене отсутствуют какие-либо объекты с идентификатором, с которым будут храниться сертификат и ключ.


    Пример команд:
    Command

    p11tool --login --write --load-certificate="client1.cert.pem" --id=45 --label="mykey"

    p11tool --login --write --load-privkey="client1.key.pem" --id=45 --label="mykey"

  3. Для безопасности удалить файл с закрытым ключом клиента client1.key.pem из домашнего каталога пользователя.
    Закрытый ключ следует хранить только на ключевом носителе.

Использование активного ключевого носителя

При использовании активного ключевого носителя:

  • средствами токена:
      - на токене создаются неизвлекаемый закрытый и извлекаемый открытый ключи (ключевая пара);
  • средствами ОС:
      - с помощью открытого ключа создаётся сертификат клиента;
      - сертификат клиента подписывается в УЦ;
      - подписанный сертификат клиента записывается на токен.


На клиентском узле в домашнем каталоге пользователя:

  1. Подключить ключевой носитель к клиентскому узлу.
  2. Создать на токене ключевую пару:
    Command

    p11tool --login --generate-rsa --bits=<длина_ключа> --id=<идентификатор_ключевой_пары> --label="<метка_ключевой_пары>"

    где
      - <длина_ключа> – длина создаваемых ключей в битах.
                                              Если поддерживается токеном, то задать 4096 бит. Иначе задать максимально возможную длину ключей, поддерживаемую токеном;
      - <идентификатор_ключевой_пары> – с этим идентификатором ключи будут храниться на токене;
      - <метка_ключевой_пары> – с этим названием ключи будут храниться на токене.
    Предупреждение

    Перед созданием необходимо убедиться, что на токене отсутствуют какие-либо объекты с идентификатором, с которым будут храниться ключи.


    Пример команды:
    Command

    p11tool --login --generate-rsa --bits=4096 --id=45 --label="mykey"


  3. Создать запрос на подписание клиентского сертификата client1.cert.csr:
    Command

    openssl req -new -engine pkcs11 -keyform engine -out client1.cert.csr \
      -key pkcs11:id="%<идентификатор_ключевой_пары>" \
      -subj "/CN=<IP-адрес_клиента>" -addext "subjectAltName=IP.1:<IP-адрес_клиента>"

    где
      - <идентификатор_ключевой_пары> – идентификатор, указанный при создании ключевой пары;
      - <IP-адрес_клиента> – IP-адрес клиентского узла.
  4. Отправить файл с запросом client1.cert.csrна узел УЦ.

На удостоверяющем центре:

  1. Подписать запрос client1.cert.csr с помощью сертификата УЦ и сохранить подписанный сертификат клиента client1.cert.pem в каталоге /etc/ipsec.d/certs/:
    Command

    sudo pki --issue --cacert /etc/ipsec.d/cacerts/ca.cert.pem --cakey /etc/ipsec.d/private/ca.key.pem \
        --in client
    1.cert.csr --lifetime 3650 --type pkcs10 --flag clientAuth --outform pem \
      | sudo tee /etc/ipsec.d/certs/client1.cert.pem

  2. Скопировать сертификат клиента client1.cert.pem на клиентский узел в домашний каталог пользователя.

На клиентском узле в домашнем каталоге пользователя:

  1. Записать сертификат клиента на ключевой носитель:
    Command

    p11tool --login --write --load-certificate="<путь_к_клиентскому_сертификату>" --id=<идентификатор_ключевой_пары> --label="<метка_ключевой_пары>"

    где
      - <идентификатор_ключевой_пары> – идентификатор, указанный при создании ключевой пары;
      - <метка_ключевой_пары> – название, указанное при создании ключевой пары.

    Пример команды:
    Command

    p11tool --login --write --load-certificate="client1.cert.pem" --id=45 --label="mykey"

Настройка использования ключевого носителя в качестве второго фактора аутентификации

  1. Включить поддержку токенов в strongSwan.
    Для этого в файле /etc/strongswan.d/charon/pkcs11.conf в блоке modules указать пути до интерфейсных библиотек используемых токенов:
    Блок кода
    pkcs11 {
    
        # Whether to load the plugin. Can also be an integer to increase the
        # priority of this plugin.
        load = yes
    
        ...
    
        # List of available PKCS#11 modules.
        modules {
            <название_модуля_1> {
                path = <путь_к_интерфейсной_библиотеке_токена_1>
            }
             <название_модуля_2> {
                path = <путь_к_интерфейсной_библиотеке_токена_2>
            } 
        }
    }
    Например, для токенов: Рутокен ЭЦП и Аладдин (закомментирован)  – файл /etc/strongswan.d/charon/pkcs11.conf может выглядеть так:
    Блок кода
    pkcs11 {
      load = yes
    
      modules {
        rutoken {
          path = /usr/lib/librtpkcs11ecp.so
        }
    #    aladdin { 
    #      path = /usr/lib/libjcPKCS11-2.so
    #    }
      }
    }
  2. Настроить strongSwan на использование закрытого ключа клиента, который находится на токене.
    Для этого указать в файле /etc/ipsec.secrets строку с описанием токена и закрытого ключа:
    - с указанием pin-кода в файле:
    Блок кода
    : PIN <токен_и_закрытый_ключ> <pin-код>
    - или более безопасный вариант, при котором pin-код будет вводиться пользователем в командной строке:
    Блок кода
    : PIN <токен_и_закрытый_ключ> %prompt
    где
      - <токен_и_закрытый_ключ> – задаётся по формату: %smartcard[<номер_слота_с_токеном>[@<название_модуля>]]:<идентификатор_ключевой_пары>
                                                                       где
                                                                         - <название_модуля> – название модуля в файле /etc/strongswan.d/charon/pkcs11.conf, в котором указана интерфейсная библиотека для работы с токеном;
                                                                         - <идентификатор_ключевой_пары> – идентификатор, с которым закрытый ключ записан на токен.
                                                                       Например:
    %smartcard0@rutoken:45                                                                   
      - <pin-код> – пользовательский pin-код токена для доступа к объектам на токене.
    Примечание

    Если к компьютеру подключается только один ключевой носитель, то достаточно использовать укороченный формат параметра <токен_и_закрытый_ключ>: %smartcard:<идентификатор_ключевой_пары>

    Например: %smartcard:45


    Примеры файла /etc/ipsec.secrets:
     - для Рутокена с pin-кодом, указанным в файле:
    Блок кода
    : PIN %smartcard0@rutoken:45 12345678
     - для Рутокена с pin-кодом, вводимым пользователем:
    Блок кода
    : PIN %smartcard0@rutoken:45 %prompt
     - при подключении к компьютеру единственного токена, поддержка которого включена в strongSwan, и с pin-кодом, вводимым пользователем:
    Блок кода
    : PIN %smartcard:45 %prompt
  3. Перезапустить strongSwan для применения настроек:
    Command

    sudo ipsec restart

  4. Если в файле /etc/ipsec.secrets указана опция %prompt, то после каждого запуска (перезапуска) strongSwan необходимо вручную вводить pin-код токена. 
    Для этого выполнить команду:
    Command
    sudo ipsec rereadsecrets
    Если strongSwan-сервер ещё не успел запуститься, то команда завершится без вывода какой-либо информации. Необходимо подождать 5-10 секунд и повторить команду "sudo ipsec rereadsecrets".
    Появится приглашение для ввода pin-кода:
    Блок кода
    Login to '%smartcard0@rutoken:45' required
    PIN:
    Ввести пользовательский pin-код токена, нажать клавишу <ENTER>.

    Выполнить команду, чтобы strongSwan перезагрузил настройки и установил соединение с VPN-сервером:
    Command

    sudo ipsec reload


Для просмотра состояния установленного VPN-соединения используется команда:

Command

sudo ipsec status

Раскрыть
titleПример вывода команды...
Блок кода
Routed Connections:
      client{1}:  ROUTED, TUNNEL, reqid 1
      client{1}:   10.192.6.110/32 === 10.1.1.0/24
Security Associations (1 up, 0 connecting):
      client[1]: ESTABLISHED 5 minutes ago, 10.192.6.110[CN=10.192.6.110]...10.192.6.108[10.192.6.108]
      client{2}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cd036fde_i c829d2f1_o
      client{2}:   10.1.1.1/32 === 10.1.1.0/24

Команда для вывода более подробной информации о VPN-соединении:

Command

sudo ipsec statusall

Раскрыть
titleПример вывода команды...
Блок кода
Status of IKE charon daemon (strongSwan 5.9.8, Linux 6.1.141-1-generic, x86_64):
  uptime: 6 minutes, since Sep 25 08:47:09 2025
  malloc: sbrk 3805184, mmap 405504, used 2036464, free 1768720
  worker threads: 10 of 16 idle, 6/0/0/0 working, job queue: 0/0/0/0, scheduled: 2
  loaded plugins: charon test-vectors ldap pkcs11 aes rc2 sha2 sha1 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs12 pgp dnskey sshkey pem openssl gcrypt pkcs8 af-alg fips-prf gmp curve25519 agent chapoly xcbc cmac hmac kdf ctr ccm gcm drbg curl attr kernel-netlink resolve socket-default connmark forecast farp stroke updown eap-identity eap-aka eap-md5 eap-gtc eap-mschapv2 eap-radius eap-tls eap-ttls eap-tnc xauth-generic xauth-eap xauth-pam tnc-tnccs dhcp lookip error-notify certexpire led addrblock unity counters
Listening IP addresses:
  10.192.6.110
Connections:
      client:  %any...10.192.6.108  IKEv2
      client:   local:  [CN=10.192.6.110] uses public key authentication
      client:    cert:  "CN=10.192.6.110"
      client:   remote: [10.192.6.108] uses public key authentication
      client:   child:  dynamic === 10.1.1.0/24 TUNNEL
Routed Connections:
      client{1}:  ROUTED, TUNNEL, reqid 1
      client{1}:   10.192.6.110/32 === 10.1.1.0/24
Security Associations (1 up, 0 connecting):
      client[1]: ESTABLISHED 5 minutes ago, 10.192.6.110[CN=10.192.6.110]...10.192.6.108[10.192.6.108]
      client[1]: IKEv2 SPIs: d770b3aced125439_i* 20eee7bd8ad5d3a6_r, public key reauthentication in 2 hours
      client[1]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
      client{2}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cd036fde_i c829d2f1_o
      client{2}:  AES_CBC_256/HMAC_SHA1_96, 0 bytes_i, 1092 bytes_o (13 pkts, 313s ago), rekeying in 37 minutes
      client{2}:   10.1.1.1/32 === 10.1.1.0/24

Возможные проблемы и способы их решения

При использовании САВЗ Касперского не устанавливается соединение с VPN-сервером

На компьютере пользователя САВЗ Касперского создаёт таблицу маршрутизации, из-за которой strongSwan-клиент не может установить соединение с strongSwan-сервером.

Диагностика.

На компьютере пользователя:

  1. В выводе команды ip rule присутствует таблица с номером 101:
    Блок кода
    0:      from all lookup local
    32764:  from all fwmark 0x200/0x200 lookup 101
    32765:  from all fwmark 0x100/0x100 lookup 101
    32766:  from all lookup main
    32767:  from all lookup default
  2. При неуспешной попытке соединения в журнал /var/log/syslog выводится сообщение:
    Блок кода
    04[NET] error writing to socket: Invalid argument

Решение.

На компьютере пользователя:

  1. Исключить таблицу маршрутизации 101 из используемых strongSwan-клиентом.
    Для этого в файле /etc/strongswan.d/charon.conf в блоке charon присвоить параметру ignore_routing_tables значение 101:
    Блок кода
    charon {
        ...
        # A space-separated list of routing tables to be excluded from route
        # lookups.
        # ignore_routing_tables =
    
        ignore_routing_tables = 101
        ...
    }
  2. Перезагрузить операционную систему.

В аплете NetworkManager не доступен ключевой носитель для VPN-соединения IPsec

Решение.

На компьютере пользователя:

  1. Установить strongSwan-расширение для работы с NetworkManager:
    Command

    sudo apt install strongswan-nm

  2. Включить поддержку ключевого носителя для NetworkManager.
    Для этого создать файл (если он не создан) /etc/strongswan.d/charon-nm.conf и добавить в него блок параметров, содержащих путь до интерфейсной библиотеки используемого токена:
    Блок кода
    charon-nm {
    
        plugins {
            pkcs11 {
                modules {
                    <название_модуля_1> {
                        path = <путь_к_интерфейсной_библиотеке_токена_1>
                    }
                }
            }
        }
    
    }
    Например, для Рутокена ЭЦП файл /etc/strongswan.d/charon-nm.conf может выглядеть так:
    Блок кода
    charon-nm {
    
        plugins {
            pkcs11 {
                modules {
                    rutoken {
                        path = /usr/lib/librtpkcs11ecp.so
                    }
                }
            }
        }
    
    }
  3. Перезагрузить операционную систему.
  4. Настроить в аплете NetworkManager VPN-соединение IPsec:
    set-1.jpgImage Added
    set-2.jpgImage Added
  5. Отключить уведомления в аплете NetworkManager.
  6. Запустить в аплете NetworkManager настроенное VPN-соединение IPsec. 
    Появится уведомление об успешном соединении:
    notify-success.jpgImage Added
    Также появится сообщение об успешном соединении в Журнале системных событий:
    notify-log-success.jpgImage Added

Не устанавливается соединение между strongSwan-сервером и strongSwan-клиентом

Возможным решением проблемы может быть двойное указание IP-адреса в сертификатах узлов в расширении subjectAltName.

Для этого для создания сертификата сервера и запроса на сертификат клиента необходимо использовать команды:

  • для создания сертификата сервера server.cert.pem:
    Command

    sudo pki --pub --in /etc/ipsec.d/private/server.key.pem --type rsa \
      | sudo pki --issue --lifetime 3650 --cacert /etc/ipsec.d/cacerts/ca.cert.pem --cakey /etc/ipsec.d/private/ca.key.pem \
          --dn "CN=<IP-адрес_сервера>" --san "<IP-адрес_сервера>" --san "<IP-адрес_сервера>" --flag serverAuth --outform pem \
      | sudo tee /etc/ipsec.d/certs/server.cert.pem

  • для создания запроса на сертификат клиента client1.cert.csr:
    - при использовании пассивного ключевого носителя
    :
    Command

    openssl req -new -key client1.key.pem -out client1.cert.csr \
      -subj "/CN=<IP-адрес_клиента>"
    -addext "subjectAltName=IP.1:<IP-адрес_клиента>, IP.2:<IP-адрес_клиента>"

    - при использовании активного ключевого носителя:
    Command

    openssl req -new -engine pkcs11 -keyform engine -out client1.cert.csr \
      -key pkcs11:id="%<идентификатор_ключевой_пары>" \
      -subj "/CN=<IP-адрес_клиента>" -addext "subjectAltName=IP.1:<IP-адрес_клиента>, IP.2:<IP-адрес_клиента>"

 Не доступны ресурсы локальной сети при настройке strongSwan-клиента: rightsubnet=0.0.0.0/0

Если в настройках strongSwan-клиента (раздел 5.1) параметру rightsubnet присвоено значение 0.0.0.0/0 и при этом ресурсы локальной сети стали недоступны, то, возможно, решением проблемы будет присвоение параметру rightsubnet значения 0.0.0.1/0.

...