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

Ключ

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

Оглавление
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/.

...

  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:
    Command

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

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

  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 (сертификат УЦ) в каталог

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

    sudo pki --pub --in /etc/ipsec.d/private/client.key.pem --type rsa \
      | sudo pki --issue --lifetime 3650 --cacert /etc/ipsec.d/cacerts/ca;
      - server.cert.pem --cakey (сертификат сервера) в каталог /etc/ipsec.d/private/ca.key.pem \
          --dn "CN=<IP-адрес_клиента>" --san "<IP-адрес_клиента>" --flag clientAuth --flag ikeIntermediate --outform pem \
      | sudo tee certs/;
      - server.key.pem (закрытый ключ сервера) в каталог /etc/ipsec.d/certsprivate/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
            keyexchange=ikev2
            keyingtries=%forever
            ike=aes256-sha1-modp1024!
            esp=aes256-sha1!
            dpdaction=hold
            dpddelay=300s
     
  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 server.key.pem
  6. Задать настройки strongSwan-сервера в файле /etc/ipsec.conf:
    Блок кода
    config setup
            charondebug= ike 4, cfg 2
    
    conn server
            typeforceencaps=tunnelyes
    
            auto=add
    leftid=<IP-адрес_сервера>          keyexchange=ikev2
            keyingtries=%forever
            ike=aes256-sha1-modp1024!
            esp=aes256-sha1!
            dpdaction=hold
     # Например: 10.192.6.108
             dpddelayleftauth=300spubkey
            forceencaps=yes
    
    leftcert=server.cert.pem        leftid=<IP-адрес_сервера>                                           # Например: 10.192.6.108Сертификат сервера
            leftauthleftsendcert=pubkeyalways
            leftcert=server.cert.pem                                            # Сертификат сервера
            leftsendcert=always
            leftsubnet=<виртуальная_сетьleftsubnet=<виртуальная_сеть__предоставляемая_сервером>             # Например: 10.1.1.0/24
    
            rightauth=pubkey
            rightid=%any
            rightsourceip=<диапазон_виртуальных_адресов_для_выдачи_клиентам>    # Например: 10.1.1.0/24
            rightdns=<IP-адреса_DNS-серверов__передаваемые_клиентам>            # Например: 10.1.1.250,10.1.1.240
  7. Перезапустить 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
            forceencaps=yes
    
            leftauth=pubkey
            leftcert=<токен_и_закрытый_ключ>                                    # Например: %smartcard0@rutoken:45
     или %smartcard:45
                                                                                                                     # Формат значения <токен_и_закрытый_ключ> описан ниже в разделе "Настройка ... токена ...".
            leftsendcert=always
            leftsourceip=%config
    
            right=<IP-адрес_сервера>                                            # Например: 10.192.6.108
            rightid=<IP-адрес_сервера>                                          # Например: 10.192.6.108
            rightauth=pubkey
            rightsubnet=<виртуальная_сеть__предоставляемая_сервером>            # Например: 10.1.1.0/24
                                                                                # Если указать 0.0.0.0/0, то весь сетевой траффик клиента
                                                                                #     будет "заворачиваться" в VPN-соединение (туннель).
                                                                                #     Тогда на сервере параметру 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. Записать на ключевой носитель сертификат и закрытый ключ клиента
  3. Подключить ключевой носитель к клиентскому узлу.
  4. Записать на ключевой носитель сертификат и закрытый ключ клиента:
    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"

  5. Включить поддержку токенов в 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
    #    }
      }
    }
  6. <метка_ключевой_пары>"

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

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


    Пример команд:
    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"

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

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

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

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


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

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

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

    где
      - <длина_ключа> – длина создаваемых ключей в битах.
           
    Настроить strongSwan на использование закрытого ключа клиента, который находится на токене.
    Для этого в файле /etc/ipsec.secrets указать строку с описанием токена и закрытого ключа:
    Блок кода
    : PIN <токен_и_закрытый_ключ> <pin-код_пользователя>
    где
      - <токен_и_закрытый_ключ> – задаётся по формату: %smartcard[<номер_слота_с_токеном>[@<название_модуля>]]:<идентификатор_ключевой_пары>
                                                                       где
                                                                         - <название_модуля> – название модуля в файле /etc/strongswan.d/charon/pkcs11.conf, в котором указана интерфейсная библиотека для работы с токеном;
                                                                         - <идентификатор_ключевой_пары> – идентификатор, с которым закрытый ключ записан на токен.
                                                                       Например: %smartcard0@rutoken:45
      - <pin-код_пользователя> – pin-код пользователя для токена.
    Пример файла /etc/ipsec.secrets  для вышеприведённого Рутокена:
    Блок кода
    : PIN %smartcard0@rutoken:45 12345678
  3. Перезапустить strongSwan для применения настроек:
    Command

    sudo ipsec restart

Для просмотра состояния установленного 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Пример вывода команды...

...

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

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


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

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


  2. Создать запрос на подписание клиентского сертификата 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-адрес клиентского узла.
  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. Записать сертификат клиента на ключевой носитель:
    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.