С помощью этого руководства вы реализуете удаленное использование USB-устройств на сервере Bare Metal с ОС Ubuntu 22.04. Подключение выполняется через защищенное VPN-соединение. В руководстве рассматривается пример на базе WireGuard, но вы можете использовать любой другой VPN.
Вы будете использовать следующие сервисы:
Bare Metal — сервис аренды физических серверов для систем, которым требуется доступ к аппаратной части.
Виртуальная машина free tier — сервис, в рамках которого предоставляется бесплатная виртуальная машина с готовой конфигурацией.
«Подсети» — сервис, позволяющий создавать подсети для размещения в них облачных ресурсов.
«Публичные IP» — сервис для организации доступа к серверу Bare Metal.
Шаги:
Создайте бесплатную виртуальную машину. При создании ВМ:
в поле Название введите vpn-server-wireguard;
в блоке Образ выберите Ubuntu 22.04;
в блоке Сетевой интерфейс:
в поле Группа безопасности выберите группу с разрешенным входящим трафиком по протоколу UDP;
в поле Публичный IP выберите Арендовать новый.
в блоке Авторизация пользователя настройте доступ по SSH:
в поле Логин введите cloudru-user;
выберите Метод аутентификации — Публичный ключ и выберите ключ.
Создайте подсеть Bare Metal. При создании подсети:
введите Название — subnet-evolution-bm;
включите опцию Основная подсеть (по умолчанию).
Арендуйте сервер Bare Metal. При создании сервера:
в поле Образ выберите Ubuntu 22.04;
подключите сервер к подсети subnet-evolution-bm;
включите опцию Арендовать публичный IP;
в поле Название введите evolution-bm-client.
В руководстве VPN-соединение реализовано с использованием частной сети 192.168.200.0/24. Адреса компонентов решения:
VPN-сервер (ВМ) — 192.168.200.1/24.
Клиент (сервер Bare Metal) — 192.168.200.2/32.
Клиент (локальное устройство) — 192.168.200.3/32.
Подключитесь по SSH к ВМ vpn-server-wireguard.
Установите WireGuard:
sudo apt update && sudo apt install wireguard -y
Включите IP-форвардинг:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.confsudo sysctl -p
Сгенерируйте ключи для сервера и обоих клиентов:
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.keywg genkey | sudo tee evolution_bm_private.key | wg pubkey | sudo tee evolution_bm_public.keywg genkey | sudo tee remote_private.key | wg pubkey | sudo tee remote_public.key
Где:
*_private.key — закрытые ключи;
*_public.key — открытые ключи.
Сохраните все сгенерированные ключи.
Создайте файл конфигурации /etc/wireguard/wg0.conf:
sudo nano /etc/wireguard/wg0.conf
Добавьте в файл содержимое:
[Interface]Address = 192.168.200.1/24ListenPort = 63665PrivateKey = <server_private_key>[Peer] # Клиент Evolution Bare MetalPublicKey = <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.
Запустите и добавьте в автозагрузку WireGuard:
sudo wg-quick up wg0sudo systemctl enable wg-quick@wg0
Подключитесь по SSH к серверу evolution-bm-client.
Установите WireGuard:
sudo apt update && sudo apt install wireguard -y
Включите IP-форвардинг:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.confsudo sysctl -p
Создайте файл конфигурации /etc/wireguard/wg0.conf:
sudo nano /etc/wireguard/wg0.conf
Добавьте в файл содержимое:
[Interface]PrivateKey = <evolution_bm_private_key>Address = 192.168.200.2/32[Peer] # VPN-серверPublicKey = <server_public_key>Endpoint = <vm_public_ip>:63665AllowedIPs = 192.168.200.0/24PersistentKeepalive = 15
Где:
<evolution_bm_private_key> — содержимое файла evolution_bm_private.key.
<server_public_key> — содержимое файла server_public.key.
<vm_public_ip> — публичный IP-адрес ВМ vpn-server-wireguard.
Запустите и добавьте в автозагрузку WireGuard:
sudo wg-quick up wg0sudo systemctl enable wg-quick@wg0
Аналогичным образом настройте VPN-клиент на локальном устройстве.
С сервера evolution-bm-client выполните команду:
ping 192.168.200.3 -c 5
С локального устройства выполните:
ping 192.168.200.2 -c 5
Если пакеты проходят без потерь, VPN-туннель настроен корректно.
Для доступа к USB-устройствам используется утилита usbip.
Установите утилиты:
sudo apt install linux-tools-$(uname -r) -y
Загрузите модули ядра:
sudo modprobe usbip-coresudo modprobe usbip-host
(Опционально) Для автозагрузки модулей добавьте их в файл /etc/modules-load.d/modules.conf.
Вставьте USB-устройство.
Посмотрите список устройств, доступных для экспорта:
sudo usbip list -l
Опубликуйте нужное устройство:
sudo usbip bind -b 1-1.2
Где usbip — название USB-устройства.
Запустите usbipd демон:
sudo usbipd -D
Подключитесь по SSH к серверу evolution-bm-client.
Установите утилиты:
sudo apt install linux-tools-$(uname -r) -y
Загрузите модули ядра:
sudo modprobe usbip-coresudo modprobe vhci-hcd
Проверьте список доступных на usbip-сервере устройств:
usbip list -r 192.168.200.3
Подключите устройство:
usbip attach -r 192.168.200.3 -b 1-1.2
Подключитесь по SSH к серверу evolution-bm-client.
Проверьте системный журнал, чтобы убедиться, что устройства определены:
dmesg
Должно отобразиться сообщение о подключении нового USB-устройства (например, Kingston DataTraveler).
Проверьте, определились ли блочные устройства:
lsblk
Должны появиться новые устройства, например, sdc.
Смонтируйте раздел USB-устройства и запишите на него данные:
mkdir -p <mount_point>sudo mount <partition> <mount_point>sudo touch <mount_point>/test_file.txtls /mnt/remote_usb/
Где:
<mount_point> — точка монтирования USB-устройства, например /mnt/remote_usb/.
<partition> — сегмент жесткого диска, к которому монтируется USB-устройство.
Убедитесь, что файл test_file.txt виден и на локальном устройстве.
Если все проверки выполнены успешно, решение полностью готово к работе.
Вы научились подключать к серверу Bare Metal удаленные USB-устройства через защищенный VPN-туннель.