إعادة توجيه أجهزة USB عبر الشبكة باستخدام بوابة شبكة USB. USB عبر الشبكة في الوضع الافتراضي.

توجد اليوم عدة طرق لإعادة توجيه جهاز USB إلى كمبيوتر آخر أو جهاز افتراضي عبر الشبكة.
الأكثر شيوعًا هي منتجات الأجهزة مثل AnywhereUSB ومنتجات البرامج البحتة ، والتي جربتها بنفسي: USB Redirector و USB / IP.
أود أن أخبرك عن طريقة أخرى مثيرة للاهتمام تعمل مباشرة مع محاكي QEMU.
إنه أيضًا جزء من مشروع التوابل ، الذي تتم صيانته رسميًا بواسطة RedHat.

UsbRedir هو بروتوكول مفتوح لإعادة توجيه أجهزة USB عبر TCP إلى جهاز تحكم عن بعد خادم إفتراضيتم تطويره بدعم من RedHat كجزء من مشروع التوابل. ولكن كما اتضح ، يمكن استخدامه بنجاح كبير بدون توابل. الخادم هو usbredirserver ، والذي يتحسس جهاز USB على منفذ معين ، والعميل هو QEMU نفسه ، والذي يحاكي اتصال جهاز USB المُصدَّر بوحدة تحكم USB معينة بجهازك الظاهري. بفضل هذا النهج ، يمكن استخدام أي نظام تشغيل على الإطلاق كنظام ضيف ، لأنه لا يعرف حتى أن الجهاز قد تمت إعادة توجيهه عن بُعد ، ويقع كل المنطق على QEMU.

أولاً ، بضع كلمات حول الحلول المذكورة أعلاه

  • يعد AnywhereUSB حلاً جيدًا ، ولكنه مكلف ، ولديه أخطاء سيئة ، على سبيل المثال ، إذا سقط محرك أقراص فلاش مشترك ، فلا يمكنك إعادة توصيله إلا عن طريق إزالته وإدخاله فعليًا.
  • USB / IP - مشروع مفتوح المصدر. يبدو أنه تم التخلي عنها. في الواقع ، إنها عربات التي تجرها الدواب جميلة. عندما يتم قطع الاتصال ، غالبًا ما يدخل الجهاز في حالة تجمد كاملة ، وتظهر النوافذ شاشة الموت الزرقاء
  • USB Redirector - برنامج رائع. بالنسبة لمشاركة الأجهزة من نظام Linux إلى Linux ، فهي مجانية ، وفي جميع الحالات الأخرى تكلف بالفعل أموالاً ، ليس بقدر AnywhereUSB ، ولكنها ليست مجانية كما نرغب :)
كما ترى ، هناك الكثير للاختيار من بينها ، لكن دعنا نجرب أخيرًا طريقة أخرى - UsbRedir؟

إعداد آلة افتراضية

من أجل تحديد مكان توصيل الأجهزة التي تم تصديرها ، تحتاج إلى إنشاء وحدات تحكم USB الضرورية على الجهاز الظاهري:

  • uhci - لـ USB1.0
  • ehci - لـ USB2.0
  • xhci - لـ USB3.0
بالنسبة إلى qemu (بدون libvirt)

أضف خيارات إلى الأمر لبدء تشغيل الجهاز الظاهري:
-جهاز ich9-usb-ehci1 ، id = ehci ، addr = 1d.7 ، متعدد الوظائف = on -device ich9-usb-uhci1 ، id = uhci-1 ، addr = 1d.0 ، multifunction = on ، masterbus = ehci.0 ، firstport = 0 -device ich9-usb-uhci2، id = uhci-2، addr = 1d.1، multifunction = on، masterbus = ehci.0، firstport = 2 -device ich9-usb-uhci3، id = uhci-3 ، addr = 1d.2، multifunction = on، masterbus = ehci.0، firstport = 4

من أجل libvirt
في ملف التكوين الأصلي للجهاز الظاهري في المضيف & ltdevices & GTأزل جميع وحدات تحكم USB وأضف الكتلة التالية:

بالمناسبة ، إذا كنت تستخدم التوابل ، فبإضافة 3 أجهزة خاصة أخرى إلى وحدات التحكم ، سيكون من الممكن إعادة توجيه أجهزة USB من عميل التوابل إلى الخادم.

مثال تحت المفسد

ل qemu
نضيف الخيارات التالية إلى الأمر لبدء تشغيل الجهاز الظاهري ، بالإضافة إلى وحدات التحكم التي حددناها سابقًا:
-chardev spicevmc، name = usbredir، id = usbredirchardev1 -device usb-redir، chardev = usbredirchardev1، id = usbredirdev1، debug = 3 -chardev spicevmc، name = usbredir، id = usbredirchardev2 = جهاز usb-redir و chardev2 = = 3 -chardev spicevmc، name = usbredir، id = usbredirchardev3 -device usb-redir، chardev = usbredirchardev3، id = usbredirdev3، debug = 3
من أجل libvirt
في ملف تكوين الجهاز الظاهري الأصلي في العقدة & ltdevices & gt ، أضف الخيارات التالية ، بالإضافة إلى وحدات التحكم التي حددناها سابقًا:

الآن كل شيء جاهز لإعادة التوجيه.

بدء الخادم

يمكن العثور على حزمة usbredirserver في المستودعات القياسية في جميع توزيعات Linux الشائعة تقريبًا.

نقوم بإدخال محرك أقراص فلاش USB في الكمبيوتر ، وإلقاء نظرة على إخراج أجهزة USB:
$ lsusb ... ناقل 003 الجهاز 011: المعرف 125f: c82a A-DATA Technology Co.، Ltd. ...

نرى أن معرف البائع: زوج prodid يساوي 125f: c82a ، وقد حددت النواة محرك أقراص فلاش usbbus-usbaddr 003-001 ، على التوالي.

الآن دعنا نشاركه على المنفذ 4000:

# استخدام الزوج vendorid: prodid $ usbredirserver -p 4000 125f: c82a # باستخدام الزوج usbbus-usbaddr $ usbredirserver -p 4000003-011

توصيل جهاز بجهاز افتراضي

من خلال الخيارات عند بدء تشغيل VM

يمكن تحديد الجهاز الذي يحتاج إلى توصيله بـ VM عند بدء التشغيل عن طريق إضافة الخيارات التالية إلى أمر بدء التشغيل

ل qemu
-chardev socket ، id = usbredirchardev1 ، port = 4000 ، host = 192.168.1.123 -device usb-redir ، chardev = usbredirchardev1 ، id = usbredirdev1 ، bus = ehci.0 ، debug = 4
من أجل libvirt
يتم وضع هذه الكتلة قبل العلامة & lt / الأجهزة و GTبجانب وحدات التحكم التي حددناها سابقًا:
يمكن أيضًا تنفيذه باستخدام الأمر إرفاق جهاز virsh

أو عبر qemu-monitor

نذهب إلى برنامج Hypervisor وننفذ الأوامر التالية في شاشة qemu لجهازنا:
# أضف مقبس chardev-add الخاص بجهازنا ، id = usbredirchardev1 ، المنفذ = 4000 ، المضيف = 192.168.1.123 # قم بتوصيله بوحدة تحكم ehci (USB-2.0) device_add usb-redir ، chardev = usbredirchardev1 ، id = usbredirdev1 ، bus = ehci . 0 ، تصحيح = 4
لتعطيل محرك أقراص فلاش USB ، يكفي الأمر التالي:
device_del usbredev1

هذا كل شيء ، بعد هذه الخطوات ، سيرى جهاز VM محرك أقراص USB المحمول الخاص بك وسيكون قادرًا على العمل معه أصلاً.

إذا كان هناك العديد من الأجهزة وكلها متشابهة

هذا هو المكان الذي ظهرت فيه مهمة مثيرة للاهتمام ، كيف يمكن إعادة توجيه عدة أجهزة متطابقة إلى أجهزة افتراضية مختلفة؟
في الوقت نفسه ، تجدر الإشارة إلى أن جميع الأجهزة لها نفس البائع: زوج prodid ، وزوج usbbus-usbaddr ليس ثابتًا على الإطلاق ، بمجرد إزالة الجهاز وإدخاله ، فإنه سيغير usbaddr الخاص به على الفور.

لقد قمت بحلها مع udev.
بالمناسبة ، إذا كنت لا تفهم تمامًا كيف يعمل udev ، فإن Debian Wiki يتمتع بميزة رائعة

ولذا فلنبدأ

أولاً ، نحتاج إلى معرفة الرقم التسلسلي لجهازنا ، والذي من خلاله سنتعرف عليه في udev:

لنبدأ شاشة udev:
شاشة $ udevadm - البيئة --udev
وأدخل الجهاز الخاص بنا ، بعد ذلك سنرى على الفور قائمة متغيرات هذا الجهاز التي تفضل udev بتهيئتها لنا:
... UDEV add / devices / virtual / bdi / 8: 16 (bdi) ACTION = add DEVPATH = / devices / virtual / bdi / 8:16 ID_SERIAL_SHORT = 11C130317234004B SEQNUM = 4352 SUBSYSTEM = bdi USEC_INITIALIZED = 189056149826 ...
يمكن الحصول على معلومات حول المسلسل والسمات الأخرى بطريقة أخرى ، ولكن يجب أن يؤخذ في الاعتبار أنه لكتابة القواعد ، سنستخدم المتغيرات من الأمر أعلاه بالضبط ، وليس السمات من الأمر أدناه. خلاف ذلك ، لن ينطلق مشغل الإزالة عند فصل الجهاز.
$ udevadm info -a -n / dev / bus / usb / 003/011 | grep "(مسلسل)"

لنقم الآن بإنشاء ملف /etc/udev/rules.d/99-usb-serial.rules واكتب القواعد التالية فيه:
ACTION == "add"، ENV (ID_SERIAL_SHORT) = "11C130317234004B"، RUN + = "/ usr / bin / usbredirserver -p 4000 $ attr (busnum) - $ attr (devnum)" ACTION == "إزالة" ، ENV ( ID_SERIAL_SHORT) = "11C130317234004B" ، RUN + = "/ usr / bin / fuser -k 4000 / tcp"

إعادة تحميل قواعد udev:
التحكم في $ udevadm - قواعد إعادة التحميل
انتهى ، الآن عندما نقوم بتوصيل أجهزتنا ، سيبحث تلقائيًا عن المنفذ الذي نحتاجه ، وعند قطع الاتصال ، سيتوقف usbredirserver عن العمل.
أضف أجهزة أخرى عن طريق القياس.

هذا كل شئ. شكرا لك على اهتمامك:)

أداة قوية جدًا في اليد اليمنى. لأسباب فنية مختلفة ، لا يتمتع الجهاز الظاهري بوصول مباشر إلى محرك أقراص USB افتراضيًا. تشرح هذه المقالة كيفية إعادة توجيه محرك أقراص USB إلى جهاز ظاهري Hyper-V. سيكون تنفيذ الفكرة بسيطًا ، كما يمكن للمرء أن يقول ، بنقرتين. لن تكون هناك حاجة إلى برامج إضافية ، كما ينصح "المعلمون" الأريكة أحيانًا ، فنحن نستخدم أيدينا ولا شيء أكثر من ذلك.

الأهمية. لن نتمكن من إدخال أجهزة قابلة للإزالة ، أي أجهزة قابلة للإزالة في الجهاز الظاهري ، على الرغم من وجود بعض الحيل في هذا الصدد ، لكننا الآن لا نتحدث عن ذلك. تعمل الخوارزمية الخاصة بنا فقط مع USB ، والتي تظهر على أنها ثابتة. لن نتمكن من عمل لقطة لهذه الأقراص.

الشروع في التلاعب




الأهمية. ليس من الضروري على الإطلاق إيقاف تشغيل الجهاز الظاهري قبل إضافة قرص صلب. لهذا الغرض ، هناك تقنية خاصة للإضافة الساخنة والإزالة الساخنة.

  1. نقوم بالاتصال بـ VM عبر rdp أو مجرد فتح وحدة التحكم. ندخل في إدارة القرص. إذا كان الجديد في مكانه ، فإننا نفعل كل شيء بشكل صحيح. نتحقق مما إذا كان متصلاً بالإنترنت. إذا لم يكن كذلك ، فنحن نصلحها ، كما كان من قبل ، عن طريق الاتصال قائمة السياق... لا تحتوي أقسامنا على نقاط وحروف تحميل ، نحتاج إلى إصلاح هذا الأمر. انقر فوق أي من الأقسام انقر على اليمينوحدد العنصر "تغيير حرف محرك الأقراص أو المسار إليه ...". نختار أي واحد مجاني.

إعادة توجيه USB إلى آلة افتراضيةانتهى Hyper-V ، والآن يمكننا استخدامه لأغراضنا الخاصة.

USB Network Gate هو برنامج يتيح للمستخدمين الاتصال جهاز USB:٪ sأ ، متصلة بأجهزة كمبيوتر أخرى باستخدام قنوات IP.

هناك تطبيقات مختلفة للتحكم عن بعد في السوق. اتصال USBالأجهزة ، سواء الأجهزة والبرامج. يتطلب بعضها معرفة ومهارات معينة من المستخدمين ؛ في بعض الحالات ، قد يستغرق الإعداد وقتًا طويلاً. فاجأني USB Network Gate ببساطته. لقد قمت بتنزيل البرنامج وتثبيته وضغطت على زر المشاركة وأصبح الجهاز متاحًا على الفور للاتصال على جهاز بعيد مع تثبيت العميل.

يمكن أن تكون بوابة شبكة USB لا غنى عنها عند الاستخدام على سبيل المثال رموز USBعلى خادم RDP ، يسمح لك البرنامج بتكوين وصول خاص إلى الأجهزة لمستخدم سطح المكتب البعيد الفردي ، وعزله عن المستخدمين الآخرين. يمكن أيضًا استخدام البرنامج في بيئة افتراضية إذا كان لا يمكن توصيل الجهاز مباشرة لسبب ما. هناك إصدارات لنظام التشغيل Windows و Linux (حزم RPM و Deb) و Apple OS X والأكثر إثارة للاهتمام لنظام Android. الآن حول كيف يعمل.

الخادم

البرنامج عبارة عن خادم وعميل. عند بدء التشغيل ، يعرض افتراضيًا جميع أجهزة USB المتصلة بالكمبيوتر. ولكن يمكن عرضها وتخصيصها الوصول العاملجميع المنافذ.

من الممكن تكوين الاتصال بشكل منفصل لكل جهاز أو منفذ ، والسماح بالاتصال فقط لعنوان محدد. لحماية الاتصال ، يتم توفير الإذن والتشفير.


عميل

في باستخدام USBبوابة الشبكة كعميل ، يفحص التطبيق شبكة المنطقة المحليةلوجود الخوادم يعرض جميع الأجهزة المتاحة للاتصال. إذا كان الخادم على شبكة فرعية مختلفة ، على سبيل المثال عند الاتصال عبر VPN ، يمكنك إضافته باستخدام زر "إضافة خادم". بعد أن فتحت الوصول إلى الطابعة ، ظهرت في قائمة المتاحة للاتصال على جهاز MacBook الخاص بي. بالإضافة إلى الطابعة ، قمت بتوصيل USB HDDمع أقسام HFS + ، تم توصيله أيضًا ، ولكن تم تركيب الأقسام لمدة ثلاث دقائق تقريبًا ، على ما يبدو بسبب حجمها الكبير.

ملخص

يسمح لك الإصدار التجريبي بفتح الوصول إلى جهاز واحد فقط مسجل - اعتمادًا على مستوى التراخيص ، من جهاز إلى $89, 95 ما يصل إلى غير محدود ل $699,95 ... إذا كنت بحاجة إلى توصيل جهاز بسرعة عبر شبكة ، فإن USB Network Gate هو ما تحتاجه ، خاصة إذا لم تكن لديك معرفة قوية بأجهزة الكمبيوتر.

هذه التعليمات صحيحة بدءًا من الإصدار 2.

على ما يبدو ، لماذا يجب أن أكتب شيئًا ما عندما يكون هناك تعليمات رسمية؟ ومع ذلك ، هناك شيء هنا غير موجود.

يوجد خياران لنقل جهاز USB إلى الضيف:

  • نقل جهاز معين إلى "الضيف" ؛
  • انقل منفذ USB الذي يتصل به هذا الجهاز.

إعادة توجيه أجهزة USB

إذا كان هناك دونجل USB ، أو تخزين خارجي، فمن الأنسب نقل الجهاز نفسه مباشرة إلى نظام الضيف ، بغض النظر عن منفذ USB الذي يتصل به هذا الجهاز فعليًا. بعد كل شيء ، عند الصيانة ، يمكننا توصيله بموصل مختلف في المرة القادمة.

# lsusb Bus 002 الجهاز 002: المعرف 8087: 8000 Intel Corp. Bus 002 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087: 8008 Intel Corp. Bus 001 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b: 0003 Linux Foundation 3.0 root hub Bus 003 Device 004: ID 051d: 0002 American Power Conversion Uninterruptible Power Supply Bus 003 Device 003: ID 051d : 0002 ناقل إمداد الطاقة الأمريكي غير المنقطع لتحويل الطاقة 003 الجهاز 002: معرف 046d: c00c Logitech، Inc. ناقل الفأرة الضوئية 003 الجهاز 001: المعرف 1d6b: 0002 Linux Foundation 2.0 root hub

نعثر على الجهاز الذي نحتاجه ونأخذ معرفه الذي سنستخدمه.

كان لدي مهمة لإعادة توجيه UPS.
(الوضع ، في الواقع ، ليس نموذجيًا ، ولكن يجب ألا يكون كذلك من السلسلة: تم توفير أبسط 2 مصدر طاقة غير منقطع لمحطات العمل للخادم ومعدات الشبكة. تبين أن UPS كانت لطيفة وبدأت في التعبير عن أو بدون سبب. حتى اكتشفت كيفية إدارة UPS من دبيان ، وتقرر توصيل اثنين من إمدادات الطاقة غير المنقطعة لضيوف Windows.)

في هذه المرحلة ، وجدت أن كلا الجهازين اللذين أحتاجهما لهما نفس المعرف ... لكن دعنا نجرب.

يتم تسجيل الأجهزة المعاد توجيهها في ملف التكوين الخاص بالجهاز الظاهري المقابل.

# nano /etc/pve/qemu-server/101.conf usb0: المضيف = 051d: 0002

إعادة التشغيل. التقط الجهاز ، يبدو أن كل شيء على ما يرام. لكن هنا نتذكر أن الجهاز الثاني بنفس المعرف. كيف يمكنك التمييز بينهما؟ في الواقع ، أظهرت التجربة أنه إذا تم تعيين معرف واحد لجهازين افتراضيين ، فسوف يأخذان نفس الجهاز من بعضهما البعض عند تشغيلهما. على الرغم من حقيقة أن النظام المضيف يحتوي على العديد من أجهزة USB مع هذا المعرف.

هذا هو المكان الذي نتذكر فيه أن هناك طريقة أخرى لإعادة التوجيه.

منفذ USB للشحن

من الضروري تحديد المنفذ الذي يتصل به الجهاز الذي نحتاجه.

الطريقة الأولى:

# 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 | __ المنفذ 4: Dev 2، If 0، Class = HID، Driver = usbhid، 1.5M | __ Port 7: Dev 3، If 0، Class = HID، Driver = usbfs، 12M | __ Port 8: Dev 4، If 0، 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 /: Bus 01.Port 1: Dev 1، Class = root_hub، Driver = ehci_hcd / 3p، 480M | __ Port 1: Dev 2، If 0، Class = hub، Driver = hub / 6p، 480M

كما اتضح لاحقًا ، الأجهزة التي أحتاجها موجودة في الحافلة 3 والمنافذ 7 و 8. ولكن هذا ليس واضحًا لنا حتى الآن ، وهنا الخيار الثاني:

مراقب Qm qm> info usbhost Bus 3، Addr 4، Port 8، Speed ​​12 Mb / s Class 00: USB device 051d: 0002، Back-UPS XS 650CI FW: 892.R2.I USB FW: R2 Bus 3، Addr 3 ، المنفذ 7 ، السرعة 12 ميجا بايت / ثانية الفئة 00: جهاز USB 051d: 0002 ، Back-UPS XS 650CI FW: 892.R2.I USB FW: R2 Bus 3 ، Addr 2 ، Port 4 ، السرعة 1.5 ميجا بايت / s فئة 00: جهاز USB 046d: c00c ، ماوس بصري USB

هنا نرى بوضوح من هو من. والآن بجرأة:

# nano /etc/pve/qemu-server/101.conf usb0: المضيف = 3-7

للتأكد من اكتمالها ، سأكمل التعليمات بمثال من الوثائق الرسمية.

هذا الخيار ممكن:

مراقب Qm qm> info usbhost Bus 3، Addr 2، Port 1.2، Speed ​​1.5 Mb / s البائع المحدد: جهاز USB 0529: 0001، HASP 2.17