Пробрасываем USB–ключ в облако (Linux клиент — Linux сервер)
Заказчику потребовалось подключить USB–ключ для банковской системы к Linux–серверу в облаке, где он разворачивает свой разработанный продукт. Напрямую подключить USB–ключ к виртуальной машине нельзя — она работает в отказоустойчивом кластере и может быть смигрирована на любой из хост-серверов без даунтайма.
Давайте посмотрим, как реализовать проброс USB–ключа по сети в виртуальную машину с Linux в облаке Azure Pack Infrastructure от InfoboxCloud.
Раз подключить ключ к виртуальной машине нельзя — его нужно подключить к чему-то реальному. Есть аппаратные решения, например AnyWhere USB, но заказчик выбрал более универсальное решение: выделенный сервер в ЦОД Infobox (что для одного ключа получилось дешевле — аппаратные требования к выделенному серверу для такой задачи минимальны — можно использовать самый дешевый сервер с софтовым Raid).
Для проброса использовалось ПО USB Redirector (версия для Linux бесплатна). На выделенный сервер и в виртуальную машину в облаке была установлена Ubuntu 16.04 LTS и были применены все обновления.
Для установки USB Redirector потребуются исходные тексты ядра, установите их:
Теперь необходимо отключить обновления ядра ОС, так как они могут сломать работу USB Redirector (служба проброса после обновления ядра не будет запускаться до переустановки), если необходимо — их можно устанавливать вручную переустанавливая USB Redirector.
Установка и настройка USB Redirector на сервере с подключенным ключом USB
Скачайте USB Redirector:
Перейдите в папку с ним:
Разрешите запуск инсталлятора:
Если все прошло корректно, вы увидите сообщение об этом.
Добавьте службу проброса в автозагрузку, если ранее этого не произошло:
Подключив USB–ключ к выделенному серверу проверим какие USB–устройства доступны:
Есть 2 варианта расшарить устройство по сети.
В этом случае мы привязываемся к конкретному id устройства и порту, если включить usb-ключ в другой порт сервера — номер usb порта сменится и работать не будет.
В этом случае мы привязываемся только к id устройства. Теперь USB–устройство расшарено по сети.
Конечно делать его доступным для всех пользователей Интернет не правильно, поэтому добавим ограничения в firewall:
Где вместо *.*.*.* нужно написать адрес сервера, с которого разрешено подключение.
Установка клиента USB Redirector в облаке
Скачайте USB Redirector:
Перейдите в папку с ним:
Разрешите запуск инсталлятора:
Если все прошло корректно, вы увидите сообщение об этом.
Добавьте службу проброса в автозагрузку, если ранее этого не произошло:
Теперь добавим наш сервер:
Где вместо **.**.**.** нужно указать ip–адрес сервера.
Теперь можно посмотреть список доступных устройств:
Видим, что на сервере 1 доступно устройство 1.
Включаем автоматическое соединение с устройством:
USB–ключ был успешно проброшен в виртуальную машину в облаке.
Если вы хотите попробовать наши облака, оставьте заявку на тестирование на главной странице infoboxcloud.ru. Если вы не можете оставлять комментарии на Хабре, напишите нам в Сообществе InfoboxCloud.
Похожие публикации
Развертываем OpenVPN сервер с панелью управления в облаке InfoboxCloud и настраиваем доступ для клиентов
Управление Parallels Automation for Cloud Infrastructure через API
Хостинг почты на базе Exchange Server 2010 — бесплатно?!
AdBlock похитил этот баннер, но баннеры не зубы — отрастут
Комментарии 36
>Возможен ли длительный даунтайм на современном программном обеспечении при возникновении проблем у хостера?
Чудес не бывает, есть конкретные технические решения и регламенты действий, которые позволяют предотвратить даунтайм. Например услуга Azure Pack Infrastructure высокодоступна — выход из строя оборудования не оказывает влияние на пользователей, процесс обновления ПО кластера также не оказывает, так как каждая виртуальная машина управления в 2х экземплярах в кластере — один обновляется, другой работает. Возникли проблемы при обновлении — можно откатить изменения без влияния на пользователей. Можно включить репликацию VM в глобальное облако Azure и в случае недоступности дата-центра виртуальные машины поднимутся там. Высокая доступность достигается не «хорошим ПО или классным хостером», а конкретным техническим решением, каждый уровень защиты стоит денег так как использует ресурсы облаков, нужно выбирать адекватно вашей задаче какой уровень высокой доступности или катастрофоустойчивости нужен. Выбирая услугу если вам нужна высокая доступность стоит интересоваться за счет чего она реализована. Если берем хостинг за 200 рублей, расчитывать на высокую доступность не стоит (так как невозможно сделать такую услугу за 200 рублей), но для клиентов хостинга она и не требуется. При необходимости мы поможем организовать высокодоступное решение для вас согласно вашим требованиям и бюджету. Для получения персональной консультации можно заполнить заявку на главной https://infoboxcloud.ru
Касательно вашего номера договора — у нас нет договоров с такими номерами. Напишите пожалуйста в ЛС реальный номер договора или номер обращения в нашу поддержку, если мы действительно являемся вашим провайдером. Посмотрим какой услугой вы пользуетесь и суть обращения. У Azure Pack Infrastructure с запуска облака аптайм реальный — 100%.
Нет, необходимость писать тикеты указывается в письме при регистрации, при совершении действий требующих доступа к данным в чате и по телефону сотрудники сообщают о такой необходимости. Было ли это сделано проверим. Обращение написать следует именно указанным образом, из панели управления залогинившись. В целях безопасности неавторизованные запросы просто из чата на сайте не являются обращениями. Их от вашего имени может написать кто угодно.
Мы очень хотим решить проблему если она действительно есть, пожалуйста напишите нам авторизованный запрос. Это гораздо быстрее чем переписываться в комментариях.
Плохая идея, шарить надо через туннель с шифрованием.
Я правильно понимаю, что Вы считаете хорошей идее открывать доступ к железу напрямую по сети без туннелирования?
Проброс USB в виртуалку по сети средствами UsbRedir и QEMU
На сегодняшний день существет довольно много способов пробросить USB-устройство на другой компьютер или виртуалку по сети.
Из наиболее популярных — железячные такие как AnywhereUSB и чисто програмные продукты, из тех что я попробовал сам: USB Redirector и USB/IP.
Я бы хотел рассказать вам еще об одном интересном способе, который работает непосредственно с эмулятором QEMU.
Он так же является частью проекта spice, официально поддерживаемым RedHat.
UsbRedir, это открытый протокол для проброса usb-устройств по tcp на удаленный виртуальный сервер, разработанный при поддержке RedHat в рамках проекта spice. Но как оказалось им можно вполне успешно пользоваться и без spice. В роли сервера выступает usbredirserver, который шарит usb-устройство на определенный порт, а в качестве клиента сам QEMU, который эмулирует подключение экспортированного usb-устройства в определенный usb-контроллер вашей виртуальной машины. Благодаря такому подходу в качестве гостевой системы может использоваться абсолютно любая ОС, так как она даже не знает, что устройство является проброшенным удаленно, а вся логика ложится на QEMU.
Для начала несколько слов о вышеперчисленных решениях
- AnywhereUSB — довольно неплохое решение, но дорогое, и имеет неприятние глюки, например бывает если расшаренная флешка отваливается, то переподключить ее обратно можно только физически вынув и вставив ее.
- USB/IP — OpenSource проект. Вроде как был заброшен. По факту глючит довольно сильно. При разрыве соединения, машина частенько уходит в полнейший freezee, а windows показывает BSOD
- USB Redirector — Замечательная софтина. Для расшаривания устройств с linux на linux бесплатна, во всех остальных случаях уже стоит денег, не так много как AnywhereUSB, но и не бесплатно как хотелось бы 🙂
Как видно есть из чего выбрать, но давайте же наконец попробуем еще один способ — UsbRedir?
Настройка виртуальной машины
Для того что бы было куда подключать экспортированные устройства, на виртуальной машине нужно создать необходимые usb-контроллеры:
- uhci — для USB1.0
- ehci — для USB2.0
- xhci — для USB3.0
Для qemu (без libvirt)
Добавьте опции в команду запуска виртуальной машины:
Для libvirt
В исходном файле конфигурации виртуальной машины в узле <devices> удаляем все USB контроллеры и добавляем следущий блок:
Кстати, если вы используете spice, то добавив к контроллерам еще 3 специальных девайса, станет возможен проброс usb-устройств с клиента spice на сервер.
Для qemu
Добавляем следующие опции в команду запуска виртуальной машины, помимо контроллеров определеных нами раньше:
Для libvirt
В исходном файле конфигурации виртуальной машины в узле <devices> добавляем следующие опции, помимо контроллеров определеных нами раньше:
Теперь все готово для осуществления проброса.
Запуск сервера
Пакет usbredirserver можно найти в стандартных репозиториях практически во всех популярных дистрибутивах linux.
Вставляем флешку в компьютер, смотрим вывод usb-устройств:
Видим что пара vendorid:prodid равна 125f:c82a, а ядро определило флешке 003-001 usbbus-usbaddr соотвественно.
Теперь давайте расшарим ее на 4000 порт:
Подключение устройства к виртуальной машине
Через опции при запуске ВМ
Устройство которое нужно подключить к ВМ можно указать при запуске, добавив следующие опции в команду запуска
Для qemu
Для libvirt
Этот блок рамещается перед тегом </devices>, рядом с контроллерами определенными нами раньше:
Его так же можно исполнить командой virsh attach-device
Или через qemu-monitor
Заходим на гипервизор и в qemu-monitor нашей машины выполняем следующие команды:
Что бы отключить флешку достаточно такой команды:
На этом все, после данных шагов ваша ВМ увидит вашу флешку и сможет с ней нативно работать.
Если устройств много и все они одинаковые
Вот тут появилась интересная задачка, как пробросить несколько одинаковых девайсов на разные ВМ?
При этом, стоит отметить, все устройства имеют одинаковую пару vendorid:prodid, а пара usbbus-usbaddr совсем не постоянна, стоит только вынуть и вставить устройство, так оно сразу поменяет свой usbaddr.
Я решил ее при помощи udev.
Кстати если вы не совсем понимаете как работает udev, на Debian Wiki есть классная статья о udev
И так приступим
Для начала нам надо узнать серийник нашего устройства, по которому и будем идентифицировать его в udev:
И вставим наше устройство, после этого мы сразу увидим список переменных этого устройства которые udev любезно инициализировал для нас:
Информацию о серийнике и других аттрибутах можно получить и другим способом, но стоит учитывать что для написания правил мы будем использовать именно переменные из команды выше, а не аттрибуты из команды ниже. В противном случае не будет отрабатывать триггер remove при отключении устройства.
Теперь создадаим файл /etc/udev/rules.d/99-usb-serial.rules и запишем в него следующие правила:
Готово, теперь при подключении нашего устройства, оно будет автоматически шарится на нужный нам порт, а при отключении usbredirserver будет прекращать свою работу.
По аналогии добавляем и остальные устройства.
На этом все. Спасибо за проявленный интерес 🙂