PVE 8+OpenWrt 网卡 RTL8156b USB网卡

我手头有一台 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 后的内核日志:

[847658.661547] usb 4-2: new SuperSpeed USB device number 5 using xhci_hcd [847658.687950] usb 4-2: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.00 [847658.687955] usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=6 [847658.687957] usb 4-2: Product: USB 10/100/1G/2.5G LAN [847658.687958] usb 4-2: Manufacturer: Realtek [847658.687959] usb 4-2: SerialNumber: 0013000001 [847658.726573] cdc_ncm 4-2:2.0: MAC-Address: c8:4d:44:29:81:4e [847658.726578] cdc_ncm 4-2:2.0: setting rx_max = 16384 [847658.727082] cdc_ncm 4-2:2.0: setting tx_max = 16384 [847658.727762] cdc_ncm 4-2:2.0 eth0: register 'cdc_ncm' at usb-0000:01:00.0-2, CDC NCM (NO ZLP), c8:4d:44:29:81:4e [847658.728904] cdc_ncm 4-2:2.0 eth0: unregister 'cdc_ncm' usb-0000:01:00.0-2, CDC NCM (NO ZLP) [847658.890810] r8152-cfgselector 4-2: reset SuperSpeed USB device number 5 using xhci_hcd [847659.022551] r8152 4-2:1.0: load rtl8156b-2 v3 10/20/23 successfully [847659.111535] r8152 4-2:1.0 eth0: v1.12.13 [847659.126096] r8152 4-2:1.0 enxc84d4429814e: renamed from eth0

也可以通过命令来验证。首先安装 usbutils 工具:apt install usbutil -y

然后查看系统里的 USB 设备状况:lsusb

Bus 004 Device 005: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN

接着查询 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 的虚拟机硬件里,添加一个网络设备即可。设备选择我们新建的网桥,模型选 VirtIO 半虚拟化就 OK 了。

这个过程是热更新的,不需要重启 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 网卡本来的损耗。

Connecting to host 192.168.6.2, port 5201 [ 5] local 172.25.15.46 port 40638 connected to 192.168.6.2 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 281 MBytes 2.36 Gbits/sec 0 2.84 MBytes [ 5] 1.00-2.00 sec 280 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 2.00-3.00 sec 281 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 3.00-4.00 sec 281 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 4.00-5.00 sec 281 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 5.00-6.00 sec 281 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 6.00-7.00 sec 280 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 7.00-8.00 sec 281 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 8.00-9.00 sec 281 MBytes 2.35 Gbits/sec 0 2.84 MBytes [ 5] 9.00-10.00 sec 281 MBytes 2.35 Gbits/sec 0 2.84 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec 0 sender [ 5] 0.00-10.01 sec 2.74 GBytes 2.35 Gbits/sec receiver iperf Done.

首先测试客户端 -> 服务端的速率,在客户端运行:iperf3 -c 192.168.6.2 -i 1 -t 10 -b 10G -R

可以看到能达到 2.32Gb,当然也有一点丢包。

连接至主机 192.168.168.6.2,端口 5201。反向模式,远端主机 192.168.168.6.2 正在发送数据。本地地址 172.25.15.46 端口 44888 已连接到 192.168.168.6.2 端口 5201。

[ ID] 时间间隔 传输量 比特率
[ 5] 0.00-1.00 秒 260 MB 2.18 Gb/秒
[ 5] 1.00-2.00 秒 268 MB 2.25 Gb/秒
[ 5] 2.00-3.00 秒 276 MB 2.31 Gb/秒
[ 5] 3.00-4.00 秒 277 MB 2.32 Gb/秒
[ 5] 4.00-5.00 秒 276 MB 2.32 Gb/秒
[ 5] 5.00-6.00 秒 276 MB 2.32 Gb/秒
[ 5] 6.00-7.00 秒 276 MB 2.31 Gb/秒
[ 5] 7.00-8.00 秒 276 MB 2.32 Gb/秒
[ 5] 8.00-9.00 秒 276 MB 2.32 Gb/秒
[ 5] 9.00-10.00 秒 277 MB 2.32 Gb/秒


[ ID] 时间间隔 传输量 比特率 重传
[ 5] 0.00-10.00 秒 2.68 GB 2.30 Gb/秒 0 发送端
[ 5] 0.00-10.00 秒 2.67 GB 2.30 Gb/秒 接收端
iperf 测试完成。

使用 SMB 进行文件传输测试,也可以达到约 280MB/s,即 2.2Gb 左右的传输速度,说明网卡工作正常。

Q.E.D.


生命在于折腾