Подключение к vpn через yubikey на ubuntu

Kate

Administrator
Команда форума
Не так давно я столкнулся с проблемой подключения к 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. Некоторые материалы, на которые опирался при поиске решения:

 
Сверху