USB ผ่าน IP ที่บ้าน

บางครั้งคุณต้องการทำงานกับอุปกรณ์ที่เชื่อมต่อผ่าน USB โดยไม่ต้องวางอุปกรณ์ไว้บนโต๊ะข้างแล็ปท็อป อุปกรณ์ของฉันเป็นช่างแกะสลักชาวจีนที่มีเลเซอร์ 500 มิลลิวัตต์ ซึ่งค่อนข้างไม่เป็นที่พอใจเมื่อต้องสัมผัสใกล้ชิด นอกจากอันตรายที่เกิดขึ้นทันทีต่อดวงตาแล้ว ผลิตภัณฑ์จากการเผาไหม้ที่เป็นพิษจะถูกปล่อยออกมาในระหว่างการใช้เลเซอร์ ดังนั้น อุปกรณ์ควรอยู่ในบริเวณที่มีการระบายอากาศดี และควรแยกจากผู้คน คุณจะควบคุมอุปกรณ์ดังกล่าวได้อย่างไร? ฉันพบคำตอบสำหรับคำถามนี้โดยบังเอิญขณะเรียกดูที่เก็บ OpenWRT ด้วยความหวังว่าจะพบการใช้งานที่คุ้มค่าสำหรับเราเตอร์ D-Link DIR-320 A2 รุ่นเก่า เพื่อเชื่อมต่อ ฉันตัดสินใจใช้อันที่อธิบายไว้ในHabréก่อนหน้านี้ USB ผ่านอุโมงค์ IPอย่างไรก็ตาม คำแนะนำในการติดตั้งทั้งหมดสูญเสียความเกี่ยวข้อง ดังนั้นฉันจึงเขียนด้วยตัวเอง

OpenWRT เป็นระบบปฏิบัติการที่ไม่จำเป็นต้องมีการแนะนำ ดังนั้น ฉันจะไม่อธิบายการติดตั้ง สำหรับเราเตอร์ของฉัน ฉันใช้ OpenWrt 19.07.3 เวอร์ชันเสถียรล่าสุด และเชื่อมต่อกับจุดเข้าใช้งาน Wi-Fi หลักในฐานะไคลเอ็นต์ โดยเลือกโหมด แลนเพื่อไม่ให้ทรมานไฟร์วอลล์

ส่วนเซิร์ฟเวอร์

เราปฏิบัติตาม คำแนะนำอย่างเป็นทางการ. หลังจากเชื่อมต่อผ่าน ssh ให้ติดตั้งแพ็คเกจที่จำเป็น

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-client

ต่อไปเราเชื่อมต่ออุปกรณ์ของเราเข้ากับพอร์ต USB ของเราเตอร์ (ในกรณีของฉันคืออุปกรณ์: ฮับ USB, แฟลชไดรฟ์ที่ติดตั้งระบบไฟล์ของเราเตอร์ (เนื่องจากไม่มีพื้นที่ในที่จัดเก็บข้อมูลภายใน) และโดยตรง ช่างแกะสลัก)

ลองแสดงรายการอุปกรณ์ที่เชื่อมต่อ:

root@OpenWrt:~# usbip list -l

ว่างเปล่า.

เมื่อค้นกูเกิลแล้วพบว่าคนร้ายกลายเป็นห้องสมุด libudev-fbsd.
เราดึงเวอร์ชันการทำงานล่าสุดออกจากพื้นที่เก็บข้อมูลด้วยมือ libudev_3.2-1 จาก OpenWRT 17.01.7 สำหรับสถาปัตยกรรมของคุณ ในกรณีของฉันคือ libudev_3.2-1_mipsel_mips32.ipk ใช้ wget/scp ดาวน์โหลดลงในหน่วยความจำของเราเตอร์แล้วติดตั้งใหม่

root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk

เราตรวจสอบ:

root@OpenWrt:~# usbip list -l
 - busid 1-1.1 (090c:1000)
   Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) : Flash Drive (090c:1000)

 - busid 1-1.4 (1a86:7523)
   QinHeng Electronics : HL-340 USB-Serial adapter (1a86:7523)

ชายชาวจีนที่เชื่อมต่อกับฮับ USB ได้รับข้อความแจ้ง 1-1.4. จดจำ.

ตอนนี้เรามาเริ่ม daemon กันดีกว่า:

root@OpenWrt:~# usbipd -D

และผูกมัดคนจีน

root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: complete

ตรวจสอบว่าทุกอย่างใช้งานได้:

root@OpenWrt:/home# netstat -alpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

หากต้องการผูกอุปกรณ์เพิ่มเติมโดยอัตโนมัติ เรามาแก้ไขกัน /etc/rc.localโดยการเพิ่มก่อน ทางออก 0 ต่อไปนี้:

usbipd -D &
sleep 1
usbip bind -b 1-1.4

ด้านลูกค้า

ลองเชื่อมต่ออุปกรณ์กับ Windows 10 โดยใช้คำแนะนำข้างต้นจาก openwrt.org ฉันจะพูดทันที: ความคิดนี้ถึงวาระที่จะล้มเหลว ประการแรกพิจารณาเฉพาะ Windows 7 x64 เท่านั้น ประการที่สอง มีการมอบลิงก์ไปยังเธรดบน sourceforge.net ซึ่งแนะนำให้ดาวน์โหลดไดรเวอร์ที่ได้รับแพตช์ในปี 2014 จาก Dropbox เมื่อเราพยายามเรียกใช้งานภายใต้ Windows 10 และเชื่อมต่อกับอุปกรณ์ของเรา เราได้รับข้อผิดพลาดต่อไปนี้:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip for windows ($Id$)

*** ERROR: cannot find device

นี่เป็นเพราะว่าไคลเอนต์ไม่ทำงานกับเซิร์ฟเวอร์ที่สร้างขึ้นสำหรับเคอร์เนลที่เก่ากว่าเวอร์ชัน 3.14
เซิร์ฟเวอร์ usbip สำหรับ OpenWRT 19.07.3 สร้างขึ้นบนเคอร์เนล 4.14.180

เมื่อค้นหาต่อไป ฉันพบการพัฒนาไคลเอ็นต์ Windows ในปัจจุบัน GitHub. ตกลง มีการระบุไว้ว่ารองรับ Windows 10 x64 แต่ไคลเอนต์เป็นเพียงไคลเอนต์ทดสอบ ดังนั้นจึงมีข้อจำกัดหลายประการ

ก่อนอื่นพวกเขาขอให้ติดตั้งใบรับรองและสองครั้ง ตกลง เราจะใส่ไว้ใน Trusted Root Certification Authority และผู้เผยแพร่ที่เชื่อถือได้

ถัดไปคุณต้องทำให้ระบบปฏิบัติการเข้าสู่โหมดทดสอบ นี้จะกระทำโดยทีมงาน

bcdedit.exe /set TESTSIGNING ON

ฉันไม่ประสบความสำเร็จในครั้งแรกฉันขวางทาง บูตที่ปลอดภัย. หากต้องการปิดใช้งาน คุณต้องรีบูตเข้าสู่ UEFI และตั้งค่าการบูตแบบปลอดภัยเป็นปิดใช้งาน แล็ปท็อปบางรุ่นอาจจำเป็นต้องตั้งรหัสผ่านของผู้ควบคุม

หลังจากนั้นให้บูตเข้าสู่ Windows แล้วทำ bcdedit.exe / ตั้งค่าการทดสอบการลงชื่อเข้าใช้
วินดาบอกว่าทุกอย่างโอเค เรารีบูตอีกครั้ง และเราจะเห็นคำว่า Test Mode, version และ OS build number ที่มุมขวาล่าง

กิจวัตรเหล่านี้มีไว้เพื่ออะไร? ในการติดตั้งไดรเวอร์ที่ไม่ได้ลงนาม USB/IP VHCI. แนะนำให้ทำเช่นนี้โดยการดาวน์โหลดไฟล์ usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat และทำงานด้วยสิทธิ์ผู้ดูแลระบบ

usbip.exe install

หรือวิธีที่สอง ติดตั้ง Legacy Hardware ด้วยตนเอง ฉันเลือกตัวเลือกที่สอง ได้รับคำเตือนเกี่ยวกับการติดตั้งไดรเวอร์ที่ไม่ได้ลงนามและเห็นด้วยกับมัน

ต่อไปเราตรวจสอบว่าเราสามารถเชื่อมต่อกับอุปกรณ์ USB ระยะไกลได้โดยการรันคำสั่ง:

usbip.exe list -r <ip вашего роутера>

เราได้รับรายการอุปกรณ์:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: error: failed to open usb id database
Exportable USB devices
======================
 - 192.168.31.203
      1-1.4: unknown vendor : unknown product (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : unknown class / unknown subclass / unknown protocol (ff/00/00)

สำหรับความผิดพลาด usbip: ข้อผิดพลาด: ไม่สามารถเปิดฐานข้อมูล usb id ได้ เราไม่ใส่ใจไม่กระทบการทำงาน

ตอนนี้เราผูกอุปกรณ์:

c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4

เพียงเท่านี้ Windows ตรวจพบอุปกรณ์ใหม่ ตอนนี้คุณสามารถใช้งานได้ราวกับว่าอุปกรณ์นั้นเชื่อมต่อกับแล็ปท็อปจริงๆ

ฉันต้องทนทุกข์ทรมานเล็กน้อยกับช่างแกะสลักชาวจีน เพราะเมื่อฉันพยายามติดตั้งไดรเวอร์ CH341SER ผ่านตัวติดตั้งที่มาพร้อมกับช่างแกะสลัก (ใช่ ช่างแกะสลัก Arduino) USB/IP VHCI จะทิ้ง Windows ลงใน BSOD อย่างไรก็ตาม การติดตั้งไดรเวอร์ CH341SER ไปยัง การเชื่อมต่ออุปกรณ์ผ่าน usbip.exe ช่วยแก้ปัญหาได้

ประเด็นสำคัญ: ช่างแกะสลักส่งเสียงดังและสูบบุหรี่ในห้องครัวโดยที่เปิดหน้าต่างและประตูปิด ฉันดูกระบวนการเผาไหม้จากห้องอื่นผ่านซอฟต์แวร์ของตัวเอง ซึ่งไม่รู้สึกถึงสิ่งที่จับได้

แหล่งที่มาที่ใช้:

https://openwrt.org/docs/guide-user/services/usb.iptunnel
https://github.com/cezanne/usbip-win

ที่มา: will.com

เพิ่มความคิดเห็น