Не так давно я столкнулся с проблемой подключения к vpn при помощи аппаратного usb-токена. Мне предоставили инструкцию, но оказалось, что она актуальна только для Windows, а у меня на ноуте Ubuntu.
Прежде, чем мне успешно удалось подсоединиться к серверу, было потрачено достаточное количество времени и некоторый объем нервных клеток. Так что, если вы оказались в схожей ситуации, мой опыт, возможно, вам поможет.
Итак, исходные данные:
usb-токен с предустановленными сертификатами
Файл конфигурации подключения с расширением
.visz
(такие генерирует Velocity - vpn клиент для windows и MacOS)Ubuntu 22.04 на клиентском (моем) компьютере
Какие конкретно возникли вопросы:
Как использовать предоставленную конфигурацию для подключения?
Как дать возможность системе видеть смарт-карты?
Как собственно подключаться к 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. Некоторые материалы, на которые опирался при поиске решения: