Облачная платформаEvolution

Использование удаленных USB-устройств на сервере Bare Metal

Эта статья полезна?

С помощью этого руководства вы реализуете удаленное использование USB-устройств на сервере Bare Metal с ОС Ubuntu 22.04. Подключение выполняется через защищенное VPN-соединение. В руководстве рассматривается пример на базе WireGuard, но вы можете использовать любой другой VPN.

Вы будете использовать следующие сервисы:

  • Bare Metal — сервис аренды физических серверов для систем, которым требуется доступ к аппаратной части.

  • Виртуальная машина free tier — сервис, в рамках которого предоставляется бесплатная виртуальная машина с готовой конфигурацией.

  • «Подсети» — сервис, позволяющий создавать подсети для размещения в них облачных ресурсов.

  • «Публичные IP» — сервис для организации доступа к серверу Bare Metal.

Шаги:

1. Разверните инфраструктуру

    • в поле Название введите vpn-server-wireguard;

    • в блоке Образ выберите Ubuntu 22.04;

    • в блоке Сетевой интерфейс:

      • в поле Группа безопасности выберите группу с разрешенным входящим трафиком по протоколу UDP;

      • в поле Публичный IP выберите Арендовать новый.

    • в блоке Авторизация пользователя настройте доступ по SSH:

      • в поле Логин введите cloudru-user;

      • выберите Метод аутентификацииПубличный ключ и выберите ключ.

  1. Создайте подсеть Bare Metal. При создании подсети:

    • введите Названиеsubnet-evolution-bm;

    • включите опцию Основная подсеть (по умолчанию).

  2. Арендуйте сервер Bare Metal. При создании сервера:

    • в поле Образ выберите Ubuntu 22.04;

    • подключите сервер к подсети subnet-evolution-bm;

    • включите опцию Арендовать публичный IP;

    • в поле Название введите evolution-bm-client.

Настройте VPN-соединение

В руководстве VPN-соединение реализовано с использованием частной сети 192.168.200.0/24. Адреса компонентов решения:

  • VPN-сервер (ВМ) — 192.168.200.1/24.

  • Клиент (сервер Bare Metal) — 192.168.200.2/32.

  • Клиент (локальное устройство) — 192.168.200.3/32.

Настройте VPN-сервер на ВМ

  1. Подключитесь по SSH к ВМ vpn-server-wireguard.

  2. Установите WireGuard:

    sudo apt update && sudo apt install wireguard -y
  3. Включите IP-форвардинг:

    echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  4. Сгенерируйте ключи для сервера и обоих клиентов:

    wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
    wg genkey | sudo tee evolution_bm_private.key | wg pubkey | sudo tee evolution_bm_public.key
    wg genkey | sudo tee remote_private.key | wg pubkey | sudo tee remote_public.key

    Где:

    • *_private.key — закрытые ключи;

    • *_public.key — открытые ключи.

    Сохраните все сгенерированные ключи.

  5. Создайте файл конфигурации /etc/wireguard/wg0.conf:

    sudo nano /etc/wireguard/wg0.conf
  6. Добавьте в файл содержимое:

    [Interface]
    Address = 192.168.200.1/24
    ListenPort = 63665
    PrivateKey = <server_private_key>
    [Peer] # Клиент Evolution Bare Metal
    PublicKey = <evolution_bm_public_key>
    AllowedIPs = 192.168.200.2/32
    [Peer] # Клиент на удаленной площадке
    PublicKey = <remote_public_key>
    AllowedIPs = 192.168.200.3/32

    Где:

    • <server_private_key> — содержимое файла server_private.key.

    • <evolution_bm_public_key> — содержимое файла evolution_bm_public.key.

    • <remote_public_key> — содержимое файла remote_public.key.

  7. Запустите и добавьте в автозагрузку WireGuard:

    sudo wg-quick up wg0
    sudo systemctl enable wg-quick@wg0

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

  1. Подключитесь по SSH к серверу evolution-bm-client.

  2. Установите WireGuard:

    sudo apt update && sudo apt install wireguard -y
  3. Включите IP-форвардинг:

    echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  4. Создайте файл конфигурации /etc/wireguard/wg0.conf:

    sudo nano /etc/wireguard/wg0.conf
  5. Добавьте в файл содержимое:

    [Interface]
    PrivateKey = <evolution_bm_private_key>
    Address = 192.168.200.2/32
    [Peer] # VPN-сервер
    PublicKey = <server_public_key>
    Endpoint = <vm_public_ip>:63665
    AllowedIPs = 192.168.200.0/24
    PersistentKeepalive = 15

    Где:

    • <evolution_bm_private_key> — содержимое файла evolution_bm_private.key.

    • <server_public_key> — содержимое файла server_public.key.

    • <vm_public_ip> — публичный IP-адрес ВМ vpn-server-wireguard.

  6. Запустите и добавьте в автозагрузку WireGuard:

    sudo wg-quick up wg0
    sudo systemctl enable wg-quick@wg0
  7. Аналогичным образом настройте VPN-клиент на локальном устройстве.

Проверьте работу VPN

  1. С сервера evolution-bm-client выполните команду:

    ping 192.168.200.3 -c 5
  2. С локального устройства выполните:

    ping 192.168.200.2 -c 5

Если пакеты проходят без потерь, VPN-туннель настроен корректно.

Настройте удаленный доступ к USB-устройствам

Для доступа к USB-устройствам используется утилита usbip.

Настройте usbip-сервер на локальном устройстве

  1. Установите утилиты:

    sudo apt install linux-tools-$(uname -r) -y
  2. Загрузите модули ядра:

    sudo modprobe usbip-core
    sudo modprobe usbip-host
  3. (Опционально) Для автозагрузки модулей добавьте их в файл /etc/modules-load.d/modules.conf.

  4. Вставьте USB-устройство.

  5. Посмотрите список устройств, доступных для экспорта:

    sudo usbip list -l
  6. Опубликуйте нужное устройство:

    sudo usbip bind -b 1-1.2

    Где usbip — название USB-устройства.

  7. Запустите usbipd демон:

    sudo usbipd -D

Настройте usbip-клиент на сервере

  1. Подключитесь по SSH к серверу evolution-bm-client.

  2. Установите утилиты:

    sudo apt install linux-tools-$(uname -r) -y
  3. Загрузите модули ядра:

    sudo modprobe usbip-core
    sudo modprobe vhci-hcd
  4. Проверьте список доступных на usbip-сервере устройств:

    usbip list -r 192.168.200.3
  5. Подключите устройство:

    usbip attach -r 192.168.200.3 -b 1-1.2

Проверьте работу решения

  1. Подключитесь по SSH к серверу evolution-bm-client.

  2. Проверьте системный журнал, чтобы убедиться, что устройства определены:

    dmesg

    Должно отобразиться сообщение о подключении нового USB-устройства (например, Kingston DataTraveler).

  3. Проверьте, определились ли блочные устройства:

    lsblk

    Должны появиться новые устройства, например, sdc.

  4. Смонтируйте раздел USB-устройства и запишите на него данные:

    mkdir -p <mount_point>
    sudo mount <partition> <mount_point>
    sudo touch <mount_point>/test_file.txt
    ls /mnt/remote_usb/

    Где:

    • <mount_point> — точка монтирования USB-устройства, например /mnt/remote_usb/.

    • <partition> — сегмент жесткого диска, к которому монтируется USB-устройство.

  5. Убедитесь, что файл test_file.txt виден и на локальном устройстве.

Если все проверки выполнены успешно, решение полностью готово к работе.

Результат

Вы научились подключать к серверу Bare Metal удаленные USB-устройства через защищенный VPN-туннель.