Не так давно я столкнулся с проблемой подключения к vpn при помощи аппаратного usb-токена. Мне предоставили инструкцию, но оказалось, что она актуальна только для Windows, а у меня на ноуте Ubuntu.

Прежде, чем мне успешно удалось подсоединиться к серверу, было потрачено достаточное количество времени и некоторый объем нервных клеток. Так что, если вы оказались в схожей ситуации, мой опыт, возможно, вам поможет.

Итак, исходные данные:

  • usb-токен с предустановленными сертификатами

  • Файл конфигурации подключения с расширением .visz(такие генерирует Velocity - vpn клиент для windows и MacOS)

  • Ubuntu 22.04 на клиентском (моем) компьютере

Какие конкретно возникли вопросы:

  1. Как использовать предоставленную конфигурацию для подключения?

  2. Как дать возможность системе видеть смарт-карты?

  3. Как собственно подключаться к vpn?

В реальности я решал их именно в таком порядке. Но проще пойти немного по-другому. Сначала установить драйвера для аппаратных ключей, а уже затем реализовать подключение.

Устанавливаем библиотеки

Нам понадобятся несколько библиотек для работы с токенами:

sudo apt updat
sudo apt install opensc opensc-pkcs11 pcscd
  • opensc, opensc-pkcs11: набор библиотек и утилит для доступа к смарт-картам и токенам

  • pcscd: менеджер ресурсов, координирующий связь с токенами, либо с устройствами считывания смарт карт

Далее устанавливаем openvpn:

sudo apt-get install openvpn

Проверяем, все ли работает

Узнаем ID контейнера, в котором на смарт-карте хранятся ключ и сертификат:

openvpn --show-pkcs11-ids

Копируем Serialized id нужного нам сертификата.

Если openvpn --show-pkcs11-ids говорит, что слоты отсутствуют, необходимо проверить подключение смарт-карты:

opensc-tool -l

В случае ответа, что ключ-карта отсутствует, надо проверить запущен ли демон pcscd:

sudo service pcscd status

и включить его при необходимости:

sudo service pcscd start

Настраиваем openvpn конфигурацию

Следующим шагом возвращаемся к предоставленной нам конфигурации (.visz).

Распаковываем как .tar.gz в подходящую папку и открываем файл config.conf.

Делаем замену {path} в строке pkcs11-providers {path}:

pkcs11-providers /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

Следующей строкой добавляем:

pkcs11-id '{Serialized id из прошлого пункта}'

Сохраняем файл.

Подключаемся

sudo openvpn --config config.conf

Вводим pin при запросе. Всё, мы в сети.

Примечание

Логичным шагом было бы ещё запускать pcscd как службу:

sudo systemctl enable pcscd

Но при этом Ubuntu включает вход в систему по смарт-карте, что мне было не нужно. Возможно, как-то можно этот момент обойти, но я решил проблему простой командой в .bash_aliases, которую запускаю, если хочу подключиться к vpn.

.bash_aliases
alias vpn="cd ~/.vpn; sudo service pcscd start; sudo openvpn --config config.conf"

P.S. Некоторые материалы, на которые опирался при поиске решения:

Комментарии (0)