客户机接入终极方案
type
status
date
slug
summary
tags
category
icon
password
最近开始在家办公了,家里桌子很小,如果还是两台电脑中间插根网线的话,桌子会非常乱。
而且上一个方案有很多小问题:
- Openwrt会经常让直通的USB网卡进入DOWN的状态
- USB网卡有时候直接断开连接,表现是在宿主机和虚拟机都找不到这个设备
- 宿主机Windows偶尔会被客户组策略强制重启
问题1可以通过写脚本自动检查来重启网络解决,问题2只能靠物理重新插拔,问题3则无解。
设计方案
首先解决问题3,因为所有问题2可以靠重启解决😂。所以需要一个KVM,廉价解决方案是PiKVM,垃圾佬解决方案是玩客云。
用到KVM之后,发现了Linux USB Gadget这个玩意儿,可以模拟网卡。便有了一个大胆的想法,在Bridge这个设备上,模拟出两个USB设备,一个是键鼠,给宿主机Windows使用。一个是USB网卡,直通给虚拟机。

然后在Bridge上,将这个USB网卡与Bridge接入的虚拟机网络桥接。然后在路由器上直接将客户网段的网关指向VM的IP。
这样问题2的方案也能快速解决,只需要在Bridge上重置USB Gadget,就能起到物理重新插拔的效果。
遇到的问题
- Linux USB Gadget模拟的是一个多功能设备,并不是多个物理设备,没办法只选择其中一个设备直通,只能全部直通或者不直通。
- Bridge是要桥接的是一个无线网卡,无线网卡桥接有很多限制,也很复杂(反正就是一通操作,没搞成
最终方案

改动如下:
- OpenWRT换成Linux,直接用iptables,更易于排查问题,而且驱动问题好解决
- 配上了一个USB Wi-Fi Adapter,直通给VM用来做backup
- 网关改成Bridge,由Bridge来决定是走USB Net(192.168.168.101)还是走Wi-Fi(192.168.2.101)
- 分成两个USB Gadget,日常模拟成网卡,需要维护的时候,切换成键鼠模式,使用不同的VID/PID,避免键鼠被直通,导致Windows只能看不能操作。
Bridge的网卡配置
VM的网卡配置
当Wi-Fi断开时,在Mac上
当USB断开时,
当两条链路都通时
维护模式
关闭USB网卡模拟,开启KVMD,在Windows进行维护。
终于,现在可以把客户机和Bridge(实际上是一台Rock 5C Lite),塞在家里任何一个角落,只要其他设备连上了家里局域网,就能正常访问内网无阻。
Update
后续改动是:
- 设备换成Rock 3A,原因是价格便宜。
- KVMD采用CH9329,而不是USB Gadget。因为OneKVM只需要模拟键盘和鼠标就够了。
- 修改了Bridge的路由,不由netplan控制,而是交由脚本控制,每15秒ping一次VM。
- 如果USB线路是通的,就添加USB线路的路由。
- 如果无线网卡是通的,就添加无线网卡的路由。
- 如果都不通,就报警。
这样KVMD和USB网络就能共存,维护起来会更加方便。
- 在VM里面添加网络检测脚本, 每5秒检查一下WIFI,如果不通,就usbreset之后再重新netplan apply
Loading...