我有一台 N100 小主机用 PVE 虚拟化了 OpenWrt 做软路由,但是碍于只有 2 个 2.5Gb 网口,只能一个 WAN 进,一个 LAN 出接到我的 1Gb 路由器上,路由器设置为无线 AP 和交换机,电脑再接到路由器上。这样就导致明明我是 2.5Gb 的局域网,经过路由器后就只剩 1Gb 了,非常浪费。
其中一种解决方法是换个 2.5Gb 路由器,不过我觉得在宿舍用这个千兆路由都绰绰有余了。最近发现 RTL8156b 的 2.5Gb USB 网卡只要 50 块钱左右,于是打算用它给 N100 主机加个 LAN 口。
接入并测试网卡
我使用的 PVE 版本是 8.1.3,Linux 内核是 Linux 6.5.11-7-pve. 实际使用时发现这款芯片的网卡似乎是免驱的,直接插入 USB 网卡就能识别到了。下面是我插入 USB 后的内核日志:
也可以通过指令来检查,首先安装 usbutils 工具:apt install usbutil -y
然后查看当前系统的 USB 设备情况:lsusb
然后查询 USB 网卡对应网卡名,网卡名可以在 PVE 的网络菜单里找到:
我这个网卡名是 enxc84d4429814e,长得非常奇怪,和内置网卡格格不入。
然后安装 ethtool 工具:apt install ethtool -y
查询该网卡的信息:ethtool enxc84d4429814e
需要注意支持的连接模式和通告连接模式是否都包含 2.5G 全双工,如果有那就是正常的。另外可以看下下面的当前运行模式,如果没有设备接入会显示 10M 半双工,可以尝试插个 2.5G 的设备上去,正常情况下就会运行到 2.5G 全双工了。
将网卡分配给 OpenWrt
(这里是错误方法)因为是 USB 网卡,我最开始自然而然想到的就是把 USB 端口直通给 OpenWrt 虚拟机,就像下面这样:
直通后还得在 OpenWrt 安装驱动,直接在软件包里安装 kmod-usb-net-rtl8152
就可以了。驱动安装好后能正常检测到网卡,但是非常奇怪的是不管怎么样都显示的 2.5Gb 半双工,用 iperf3 测速甚至连 1Gb 都到不了,只有 800Mb 左右。
(下面是正确方法)于是我就换了种方法,网卡分配给 PVE 宿主机,然后创建一个网桥分配给 OpenWrt。我们在 PVE 的网络管理界面,点击创建新网桥,桥接端口选择我们的 USB 网卡名:enxc84d4429814e. 然后点击应用配置。
新建网桥后,在 OpenWrt 的虚拟机硬件里,添加一个网络设备即可。设备选我们刚才新建的网桥,模型选半虚拟化就行了:
这个过程是热更新的,不需要重启 OpenWrt,直接进入后台,可以看到已经多了个新接口:
接下来不要忘记在 OpenWrt 里,要将新加入的网口并入 LAN 口网桥里,加入网桥后,这几个接口就是互通的了,相当于这几个网口拥有一个交换机。我们点击 br-lan 的配置,把自己的所有 LAN 口都勾上保存就行了。
测试速率
我们可以在除了本机的任意局域网设备开启 iperf3 服务端进行测试,首先得安装 iperf3:apt install iperf3 -y
,这个在客户端和服务端都得安装。然后启动服务端:iperf3 -s -i 1
首先测试服务端 -> 客户端的流量,在客户端运行:iperf3 -c 192.168.6.2 -i 1 -t 10 -b 10G
可以看到能跑到 2.35Gb,有一点小损失,可能是虚拟化的损失,也有可能是 USB 网卡本来的损失:
首先测试客户端 -> 服务端的流量,在客户端运行:iperf3 -c 192.168.6.2 -i 1 -t 10 -b 10G -R
可以看到能跑到 2.32Gb,仍然有一点小损失:
使用 SMB 进行文件传输测试,也可以达到 280MB/s 也就是 2.2Gb 左右的传输速度。说明网卡正常工作。
评论(0)