【发布时间】:2021-12-18 08:02:44
【问题描述】:
客户端可以通过代理连接服务器,但我还需要将客户端 TCP/UDP 端口从服务器连接到客户端:
[vm ---> 代理 ---> 路由器或防火墙---> 客户:3000]
我不想通过 NAT 规则打开客户端到 Internet 的端口。 我正在寻找一种方法来做到这一点。有可能吗?
编辑:我想我必须添加更多关于我的目标的信息。
我在 Linux 客户端(图表)上有一个应用程序,它有 2 个工作:
1- 在客户端和虚拟机之间创建 websocket 进行通信
2- USB/IP :我使用 Usb/ip 协议重定向本地 USB 设备。这就是我需要这个解决方案的原因。
让我告诉你 USB/IP 的工作原理:
建筑
USB/IP 协议遵循服务器/客户端架构。服务器导出 USB 设备,客户端导入它们。导出的 USB 设备的设备驱动程序在客户端计算机上运行。
首先客户端打开一个到服务器的 TCP/IP 连接并发送一个 OP_REQ_IMPORT 数据包。 (I) 服务器回复 OP_REP_IMPORT。如果导入成功,TCP/IP 连接将保持打开状态,并将用于在客户端和服务器之间传输 URB 流量。客户端可以发送两种类型的数据包:USBIP_CMD_SUBMIT 用于提交 URB,USBIP_CMD_UNLINK 用于取消链接先前提交的 URB。服务器的答案可能分别是 USBIP_RET_SUBMIT 和 USBIP_RET_UNLINK。
virtual host controller usb host
"client" "server"
(imports USB devices) (exports USB devices)
| |
| OP_REQ_IMPORT |
| ----------------------------------------------> |
| |
| OP_REP_IMPORT |
| <---------------------------------------------- |
| |
| |
| USBIP_CMD_SUBMIT(seqnum = n) |
| ----------------------------------------------> |
| |
| USBIP_RET_SUBMIT(seqnum = n) |
| <---------------------------------------------- |
| . |
| : |
| |
| USBIP_CMD_SUBMIT(seqnum = m) |
| ----------------------------------------------> |
| |
| USBIP_CMD_SUBMIT(seqnum = m+1) |
| ----------------------------------------------> |
| |
| USBIP_CMD_SUBMIT(seqnum = m+2) |
| ----------------------------------------------> |
| |
| USBIP_RET_SUBMIT(seqnum = m) |
| <---------------------------------------------- |
| |
| USBIP_CMD_SUBMIT(seqnum = m+3) |
| ----------------------------------------------> |
| |
| USBIP_RET_SUBMIT(seqnum = m+1) |
| <---------------------------------------------- |
| |
| USBIP_CMD_SUBMIT(seqnum = m+4) |
| ----------------------------------------------> |
| |
| USBIP_RET_SUBMIT(seqnum = m+2) |
| <---------------------------------------------- |
| . |
| : |
【问题讨论】:
-
在路由器防火墙端口转发配置上使用80到3000的端口转发