USB tarmoq darvozasi yordamida USB qurilmalarini tarmoq orqali uzatish. Virtualizatsiya paytida tarmoq orqali usb.

Bugungi kunda USB qurilmasini tarmoq orqali boshqa kompyuterga yoki virtual mashinaga uzatishning bir qancha usullari mavjud.
Eng mashhurlari AnywhereUSB kabi apparat mahsulotlari va men o'zim sinab ko'rgan dasturiy mahsulotlar: USB qayta yo'naltirish va USB / IP.
Sizga to'g'ridan -to'g'ri QEMU emulyatori bilan ishlaydigan yana bir qiziqarli usul haqida aytib bermoqchiman.
Bu, shuningdek, RedHat tomonidan rasman saqlanadigan ziravorlar loyihasining bir qismidir.

UsbRedir - bu USB qurilmalarini tcp orqali masofadan boshqarish pultiga yuborish uchun ochiq protokol virtual server ziravorlar loyihasi doirasida RedHat ko'magida ishlab chiqilgan. Ma'lum bo'lishicha, uni ziravorlarsiz juda muvaffaqiyatli ishlatish mumkin. Server usbredirserver bo'lib, u usb qurilmasini ma'lum bir portga aylantiradi va mijoz QEMU -ning o'zi bo'lib, u eksport qilinadigan usb qurilmasini virtual mashinangizning ma'lum bir usb boshqaruvchisiga ulanishini taqlid qiladi. Ushbu yondashuv tufayli har qanday operatsion tizimni mehmon tizimi sifatida ishlatish mumkin, chunki u hatto qurilmaning masofadan uzatilishini bilmaydi va hamma mantiq QEMUga to'g'ri keladi.

Birinchidan, yuqoridagi echimlar haqida bir necha so'z

  • AnywhereUSB - bu juda yaxshi echim, lekin qimmat va yomon nosozliklar bor, masalan, agar umumiy flesh -disk qulab tushsa, uni faqat jismonan olib tashlash va o'rnatish orqali qayta ulash mumkin.
  • USB / IP - ochiq manba loyihasi. Tashlab ketilganga o'xshaydi. Aslida, bu juda aravachadir. Aloqa uzilganda, mashina tez -tez muzlatgichga kiradi va derazalarda BSOD ko'rsatiladi
  • USB qayta yo'naltirish - ajoyib dastur. Linux -dan linux -ga qurilmalarni ulashish bepul, boshqa holatlarda u AnywhereUSB -da emas, balki biz xohlagancha bepul turadi. :)
Ko'rib turganingizdek, tanlash uchun ko'p narsa bor, lekin oxir -oqibat boshqa usulni - UsbRedirni sinab ko'raylikmi?

Virtual mashinani sozlash

Eksport qilinadigan qurilmalarni qaerga ulash kerakligini bilish uchun siz virtual mashinada kerakli usb boshqaruvchilarini yaratishingiz kerak:

  • uhci - USB1.0 uchun
  • ehci - USB 2.0 uchun
  • xhci - USB3.0 uchun
Qemu uchun (libvirt yo'q)

Virtual mashinani ishga tushirish uchun buyruqqa variantlarni qo'shing:
-device ich9-usb-ehci1, id = ehci, addr = 1d.7, ko'p funktsiyali = on -device ich9-usb-uhci1, id = uhci-1, addr = 1d.0, ko'p funktsiyali = yoqilgan, masterbus = ehci.0 , firstport = 0 -dovice ich9-usb-uhci2, id = uhci-2, addr = 1d.1, ko'p funktsiyali = on, masterbus = ehci.0, firstport = 2 -device ich9-usb-uhci3, id = uhci-3 , addr = 1d.2, ko'p funktsiyali = yoqilgan, masterbus = ehci.0, birinchi port = 4

Libvirt uchun
Xostdagi virtual mashinaning asl konfiguratsiya faylida & ltdevices & gt barcha USB tekshirgichlarini olib tashlang va quyidagi blokni qo'shing:

Aytgancha, agar siz ziravorlardan foydalansangiz, kontrollerlarga yana 3 ta maxsus qurilmani qo'shsangiz, usb qurilmalarini ziravorlar mijozidan serverga yuborish mumkin bo'ladi.

Spoyler ostidagi misol

Qemu uchun
Biz virtual mashinani ishga tushirish buyrug'iga quyidagi variantlarni qo'shamiz, biz ilgari aniqlagan nazoratchilarga qo'shimcha ravishda:
-chardev spicevmc, name = usbredir, id = usbredirchardev1 -device usb -redir, chardev = usbredirchardev1, id = usbredirdev1, debug = 3 -chardev spicevmc, name = usbredir, id = usbredirchardev2 -device usb -redir, chug = 3 -chardev spicevmc, name = usbredir, id = usbredirchardev3 -device usb -redir, chardev = usbredirchardev3, id = usbredirdev3, disk raskadrovka = 3
Libvirt uchun
& Ltdevices & gt tugunidagi virtual mashinaning asl konfiguratsiya fayliga, biz ilgari ta'riflagan kontrollerlarga qo'shimcha ravishda, quyidagi variantlarni qo'shing:

Endi hamma narsa uzatishga tayyor.

Serverni ishga tushirish

Usbredirserver paketini deyarli barcha mashhur Linux tarqatishlarida standart omborlardan topish mumkin.

Biz USB flesh -diskini kompyuterga joylashtiramiz, usb qurilmalarining chiqishiga qaraymiz:
$ lsusb ... Avtobus 003 Qurilmasi 011: ID 125f: c82a A-DATA Technology Co., Ltd. ...

Biz ko'rib turibmiz: vendorid: prodid juftligi 125f: c82a ga teng va yadro mos ravishda 003-001 usbbus-usbaddr flesh-diskini aniqladi.

Keling, uni 4000 portida baham ko'ramiz:

# Vendorid juftligidan foydalanish: prodid $ usbredirserver -p 4000 125f: c82a # usbbus -usbaddr $ usbredirserver -p 4000 003-011 juftligidan foydalanish

Qurilmani virtual mashinaga ulash

VMni ishga tushirishda variantlar orqali

VMga ulanishi kerak bo'lgan qurilmani ishga tushirish vaqtida ishga tushirish buyrug'iga quyidagi variantlarni qo'shib ko'rsatish mumkin

Qemu uchun
-chardev rozetkasi, id = usbredirchardev1, port = 4000, host = 192.168.1.123 -usb -redir, chardev = usbredirchardev1, id = usbredirdev1, bus = ehci.0, disk raskadrovka = 4
Libvirt uchun
Bu blok tag oldiga qo'yiladi & lt / qurilmalar va gt biz ilgari aniqlagan tekshirgichlar yonida:
Bu buyruq yordamida ham bajarilishi mumkin virsh biriktiruvchi qurilma

Yoki qemu-monitor orqali

Biz gipervizorga boramiz va mashinamiz qemu-monitorida quyidagi buyruqlarni bajaramiz:
# Qurilmamizni qo'shing chardev-add soket, id = usbredirchardev1, port = 4000, host = 192.168.1.123 # Uni ehci kontrolleriga ulang (USB-2.0) device_add usb-redir, chardev = usbredirchardev1, id = usbredirdev1, bus = ehci 0, disk raskadrovka = 4
USB flesh -diskini o'chirish uchun quyidagi buyruq etarli:
qurilma_del usbredirdev1

Hammasi shu, bu qadamlardan so'ng, VM sizning USB flesh -diskingizni ko'radi va u bilan mahalliy ishlay oladi.

Agar qurilmalar ko'p bo'lsa va ularning barchasi bir xil bo'lsa

Bu erda qiziqarli vazifa paydo bo'ldi, bir nechta bir xil qurilmalarni turli VMlarga qanday yuborish mumkin?
Shu bilan birga, shuni ta'kidlash joizki, barcha qurilmalar bir xil sotuvchiga ega: prodid juftligi va usbbus-usbaddr juftligi umuman o'zgarmaydi, siz qurilmani olib tashlaganingizdan so'ng darhol usbaddrini o'zgartiradi.

Men buni udev bilan hal qildim.
Aytgancha, agar siz udev qanday ishlashini yaxshi tushunmasangiz, Debian Vikida ajoyib narsa bor

Va shuning uchun boshlaylik

Birinchidan, biz qurilmamizning seriya raqamini bilib olishimiz kerak, biz uni udevda aniqlaymiz:

Keling, udev monitorini ishga tushiramiz:
$ udevadm monitor -atrof -muhit --udev
Qurilmani joylashtiring, shundan so'ng biz darhol udev biz uchun xushmuomalalik bilan boshlagan ushbu qurilmaning o'zgaruvchilari ro'yxatini ko'ramiz:
... UDEV add / devices / virtual / bdi / 8: 16 (bdi) ACTION = DEVPATH qo'shing / / devices / virtual / bdi / 8: 16 ID_SERIAL_SHORT = 11C130317234004B SEQNUM = 4352 SUBSYSTEM = bdi USEC_INITIALIZED = 189056149826 ...
Seriya va boshqa atributlar haqida ma'lumotni boshqa yo'l bilan olish mumkin, lekin shuni yodda tutish kerakki, qoidalarni yozish uchun biz quyidagi buyruqdagi atributlarni emas, balki yuqoridagi buyruqdagi o'zgaruvchilarni ishlatamiz. Aks holda, qurilma uzilganda o'chirish tetiği yonmaydi.
$ udevadm ma'lumoti -a -n / dev / bus / usb / 003/011 | grep "(ketma -ket)"

Endi /etc/udev/rules.d/99-usb-serial.rules faylini yaratamiz va unga quyidagi qoidalarni yozamiz:
ACTION == "add", ENV (ID_SERIAL_SHORT) = "11C130317234004B", RUN + = " / usr / bin / usbredirserver -p 4000 $ attr (busnum) - $ attr (devnum)" ACTION == "o'chirish", ENV ( ID_SERIAL_SHORT) = "11C130317234004B", RUN + = " / usr / bin / fuser -k 4000 / tcp"

Udev qoidalarini qayta yuklang:
$ udevadm nazorati-qayta yuklash qoidalari
Bajarildi, endi biz qurilmamizni ulaganimizda, u avtomatik ravishda bizga kerakli portni qidiradi va uzilganda usbredirserver ishlamay qoladi.
Analogiya bo'yicha boshqa qurilmalarni qo'shing.

Hammasi shu. Qiziqishingiz uchun tashakkur :)

O'ng qo'lda juda kuchli vosita. Turli texnik sabablarga ko'ra, virtual mashina sukut bo'yicha USB -diskka to'g'ridan -to'g'ri kira olmaydi. Ushbu maqolada USB drayverini Hyper-V virtual mashinasiga qanday yuborish kerakligi tushuntiriladi. G'oyani amalga oshirish oddiy bo'ladi, deyish mumkin, ikki marta bosish bilan. Ba'zida divanda "guruslar" maslahat berganidek, qo'shimcha dasturlar talab qilinmaydi, biz o'z qo'llarimizdan foydalanamiz va boshqa hech narsa.

MUHIM. Biz VM -ga olinadigan, ya'ni olinadigan qurilmalarni joylashtira olmaymiz, garchi bu borada ba'zi fokuslar mavjud bo'lsa -da, lekin hozir biz bu haqda gapirmayapmiz. Bizning algoritm faqat USB kabi ishlaydi. Biz bunday disklar uchun surat qila olmaymiz.

Manipulyatsiyani boshlash




MUHIM. Qattiq disk qo'shishdan oldin VMni o'chirib qo'yish shart emas. Buning uchun maxsus issiq qo'shish va issiq o'chirish texnologiyasi mavjud.

  1. Biz VD -ga rdp orqali ulanamiz yoki faqat konsolni ochamiz. Biz diskni boshqarishga o'tamiz. Agar yangisi joyida bo'lsa, demak biz hamma narsani to'g'ri qilyapmiz. Biz uning Internetda ekanligini tekshiramiz. Agar yo'q bo'lsa, biz uni avvalgidek qo'ng'iroq qilib tuzatamiz kontekst menyusi... Bizning bo'limlarda ulanish nuqtalari va harflar yo'q, biz bu masalani tuzatishimiz kerak. Har qanday bo'limni bosing o'ng tugmasini bosing va "Drayv harfini yoki unga yo'lni o'zgartirish ..." bandini tanlang. Biz har qanday bepul birini tanlaymiz.

USB uzatiladi virtual mashina Hyper-V tugadi, endi biz uni o'z maqsadlarimiz uchun ishlatishimiz mumkin.

USB Network Gate - bu foydalanuvchilarga ulanish imkonini beradigan dastur USB qurilmalari a, IP -kanallar yordamida boshqa kompyuterlarga ulangan.

Bozorda masofadan boshqarishning turli xil qo'llanmalari mavjud. USB ulanishi qurilmalar, ham apparat, ham dasturiy ta'minot. Ulardan ba'zilari foydalanuvchilardan ma'lum bilim va ko'nikmalarni talab qiladi; ba'zi hollarda sozlash uzoq vaqt talab qilishi mumkin. USB tarmoq darvozasi meni soddaligi bilan hayratga soldi. Men dasturni yukladim, o'rnatdim, ulashish tugmachasini bosdim va qurilma mijoz o'rnatilgan masofaviy mashinaga ulanishi mumkin.

USB tarmoq darvozasi, masalan, foydalanish paytida ajralmas bo'lishi mumkin USB tokenlari RDP serverida dastur uzoqdan ish stoli foydalanuvchisi uchun uni boshqa foydalanuvchilardan ajratib turadigan qurilmalarga eksklyuziv kirishni sozlash imkonini beradi. Agar biron sababga ko'ra qurilma to'g'ridan -to'g'ri ulanmasa, dasturni virtual muhitda ham ishlatish mumkin. Windows, Linux (RPM va Deb paketlari), Apple OS X va, eng qizig'i, Android uchun versiyalari mavjud. Endi u qanday ishlashi haqida.

Server

Dastur ham server, ham mijozdir. Ishga tushganda, sukut bo'yicha u kompyuterga ulangan barcha USB qurilmalarini ko'rsatadi. Lekin uni ko'rsatish va sozlash mumkin umumiy kirish barcha portlarga.

Ulanishni har bir qurilma yoki port uchun alohida sozlash mumkin, ulanishga faqat ma'lum bir manzil uchun ruxsat beriladi. Ulanishni himoya qilish uchun avtorizatsiya va shifrlash ta'minlanadi.


Xaridor

Da USB yordamida Tarmoq darvozasi mijoz sifatida, dastur skanerdan o'tkaziladi mahalliy tarmoq serverlar mavjudligi uchun ulanish uchun mavjud bo'lgan barcha qurilmalarni ko'rsatadi. Agar server boshqa pastki tarmoqda bo'lsa, masalan, VPN orqali ulansangiz, uni "Server qo'shish" tugmasi yordamida qo'shishingiz mumkin. Men printerga kirishni ochganimdan so'ng, u MacBook -da ulanishi mumkin bo'lgan ro'yxatda paydo bo'ldi. Printerdan tashqari men USB -ni uladim qattiq disk HFS + bo'limlari bilan u ham ulandi, lekin bo'limlar katta hajmda bo'lgani uchun taxminan uch daqiqa davomida o'rnatildi.

Xulosa

Sinov versiyasi faqat bitta qurilmaga kirishni ochish imkonini beradi, ro'yxatdan o'tgan - litsenziyalar darajasiga qarab, birdan $89, 95 uchun cheksizgacha $699,95 ... Agar siz qurilmani tarmoq orqali tezda ulashingiz kerak bo'lsa, USB tarmoq darvozasi sizga kerak bo'ladi, ayniqsa kompyuter texnikasi haqida kuchli ma'lumotga ega bo'lmasangiz.

Ushbu ko'rsatmalar 2 -versiyadan boshlab to'g'ri.

Ko'rinib turibdiki, rasmiy ko'rsatma bo'lsa, nima uchun men boshqa biror narsa yozishim kerak? Biroq, bu erda yo'q narsa bor.

USB qurilmasini mehmonga o'tkazish uchun ikkita variant mavjud:

  • ma'lum bir qurilmani "mehmonga" o'tkazish;
  • ushbu qurilma ulangan USB portini o'tkazing.

USB qurilmalarini yo'naltirish

Agar USB dongle bo'lsa yoki tashqi xotira, bu qurilmaning qaysi USB portiga jismonan ulangan bo'lishidan qat'i nazar, qurilmaning o'zini mehmon tizimiga to'g'ridan -to'g'ri o'tkazish qulayroqdir. Axir, xizmat ko'rsatishda biz keyingi safar uni boshqa ulagichga ulashimiz mumkin.

# lsusb Bus 002 Qurilmasi 002: ID 8087: 8000 Intel Corp. Avtobus 002 qurilmasi 001: ID 1d6b: 0002 Linux Foundation 2.0 ildiz uyasi Bus 001 qurilmasi 002: ID 8087: 8008 Intel Corp. Bus 001 qurilmasi 001: ID 1d6b: 0002 Linux Foundation 2.0 ildiz uyasi Bus 004 qurilmasi 001: ID 1d6b: 0003 Linux Foundation 3.0 ildiz uyasi Bus 003 qurilmasi 004: ID 051d: 0002 Amerika quvvatini uzatish uzluksiz quvvat manbai Bus 003 qurilmasi 003: ID 051d : 0002 Amerika quvvat konvertatsiyasi uzluksiz quvvat manbai Bus 003 qurilmasi 002: ID 046d: c00c Logitech, Inc. Optik g'ildirakli sichqon avtobusi 003 qurilmasi 001: ID 1d6b: 0002 Linux Foundation 2.0 ildiz uyasi

Biz kerakli qurilmani topamiz va uning identifikatorini olamiz.

Menga UPSni yuborish vazifasi qo'yilgan edi.
(Vaziyat, aslida, odatiy emas, aksincha, bunday bo'lmasligi kerak: ish stantsiyalari uchun eng oddiy 2 ta uzluksiz quvvat manbai server va tarmoq uskunalariga etkazib berildi. UPSlar yumshoq bo'lib chiqdi va ular bilan gaplasha boshladilar. Debian UPSni qanday boshqarishni bilgunimcha va Windows mehmonlariga ikkita uzluksiz quvvat manbasini ulashga qaror qilinmaguncha.)

Bu bosqichda, menga kerak bo'lgan ikkala qurilma ham bir xil identifikatorga ega ekanligini topdim ... Lekin harakat qilaylik.

Yuborilgan qurilmalar tegishli virtual mashinaning konfiguratsiya faylida qayd qilinadi.

# nano /etc/pve/qemu-server/101.conf usb0: host = 051d: 0002

Qayta yuklandi. Qurilma ko'tarildi, hamma narsa yaxshi ko'rinadi. Ammo bu erda biz xuddi shu identifikatorga ega bo'lgan ikkinchi qurilma ekanligini eslaymiz. Ularni qanday ajratish mumkin? Haqiqatan ham, tajriba shuni ko'rsatadiki, agar ikkita virtual mashinaga bitta identifikator tayinlansa, ular yoqilganda bir xil qurilmani bir -biridan oladi. Asosiy tizimda ushbu identifikatorga ega bo'lgan bir nechta USB qurilmalari mavjudligiga qaramay.

Bu erda biz uzatishni boshqa usuli borligini eslaymiz.

USB portni yo'naltirish

Bizga kerak bo'lgan qurilma qaysi portga ulanganligini aniqlash kerak.

Birinchi usul:

# lsusb -t /: Bus 04. Port 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 6p, 5000M /: Bus 03. Port 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 15p, 480M | __ Port 4: Dev 2, 0 bo'lsa, Class = HID, Driver = usbhid, 1.5M | __ Port 7: Dev 3, If 0, Class = HID, Driver = usbfs, 12M | __ Port 8: Dev 4, 0 bo'lsa, Class = HID, Driver = usbfs, 12M /: Bus 02. Port 1: Dev 1, Class = root_hub, Driver = ehci_hcd / 3p, 480M | __ Port 1: Dev 2, If 0, Class = hub, Driver = hub / 8p, 480M /: Avtobus 01. Port 1: Dev 1, Sinf = root_hub, Haydovchi = ehci_hcd / 3p, 480M | __ Port 1: Dev 2, Agar 0 bo'lsa, Sinf = hub, Haydovchi = hub / 6p, 480M

Keyinchalik ma'lum bo'lishicha, menga kerak bo'lgan qurilmalar 3 -avtobusda, 7 va 8 -portlarda o'tirishadi. Ammo hozircha bu biz uchun aniq emas va bu erda ikkinchi variant:

Qm monitor qm> info usbhost Bus 3, Addr 4, Port 8, Tezlik 12 Mb / s Class 00: USB qurilmasi 051d: 0002, Back-UPS XS 650CI FW: 892.R2.I USB FW: R2 Bus 3, Addr 3 , Port 7, tezlik 12 Mb / s sinf 00: USB qurilmasi 051d: 0002, Back-UPS XS 650CI FW: 892.R2.I USB FW: R2 avtobus 3, Addr 2, port 4, tezlik 1,5 Mb / s sinf 00: USB qurilmasi 046d: c00c, USB optik sichqonchasi

Bu erda biz kim kim ekanligini aniq ko'ramiz. Va endi jasorat bilan:

# nano /etc/pve/qemu-server/101.conf usb0: host = 3-7

To'liqlik uchun men ko'rsatmalarni rasmiy hujjatlardan misol bilan to'ldiraman.

Bu variant mumkin:

Qm monitor qm> info usbhost Bus 3, Addr 2, Port 1.2, Tezlik 1,5 Mb / s Vendorga xos: USB qurilmasi 0529: 0001, HASP 2.17