受欢迎的博客标签

基于Debian,4个网口的工控机安装网卡直通的OpenWRT虚拟机

Published

工具:

宿主机:一台安装了Debain 12且已经安装qemu的有4个网口的工控机。
OpenWRT官方镜像:openwrt-23.05.2-generic-ext4-combined.img.gz

安装OpenWRT虚拟机且让它能够进行网卡直通,需要三步:

第一步准备可用的虚拟机的磁盘;

第二步把网卡解绑并绑定为vfio设备;

第三步创建一个OpenWRT的虚拟机并实现网卡直通。

创建给虚拟机用的磁盘:OpenWRT作为为路由器开发的系统,直接提供了一个.img,且不能引导,很多人会将其转换为iso,然后制作成引导盘。

这种转换在给物理机安装OpenWRT时是必须的,但是我们现在是在安装虚拟机,所以直接用qemu-img进行转换

qemu-img convert -p -f raw -O qcow2 ./openwrt-23.05.2-x86-64-generic-ext4-combined.img openwrt-23.05.2-generic-ext4-conbined.qcow2 #转换产生一个qcow2以供qemu使用
qemu-img resize -f raw openwrt-*.img 20G #扩容到20 G。


卸载网卡并以vfio的方式驱动:Linux系统中,使用PCI/PCI-e总线连接到电脑上的设备都有一个id,可以用来识别某个设备

lspci | grep "Ethernet" #lspci列出使用PCI/PCI-e总线的设备,grep "Ethernet"用于匹配网卡


第一列就是设备的id。

按照第一列给出的内容,找到你想要直通给OpenWRT的设备。我在这里用eth1和eth2,解绑并且允许作为vfio设备使用。

sudo modprobe vfio
sudo modprobe vfio-pci
echo "0000:02:00.0" | sudo tee /sys/bus/pci/devices/0000:02:00.0/driver/unbind
echo "0000:03:00.0" | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind
echo "vfio-pci" | sudo tee /sys/bus/pci/devices/0000:02:00.0/driver_override
echo "vfio-pci" | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override
echo "0000:02:00.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/bind
echo "0000:03:00.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/bind


前两行加载vfio相关的模块,3、4行解绑、5、6行说明这两网卡跟vfio跑了,7、8行把网卡绑定到vfio。
3. 启动一个直通这两个网卡的虚拟机:

qemu-system-x86_64 -enable-kvm -machine q35 -cpu host -smp 2 -m 2048 -drive file=/path-to/openwrt-23.05.2-generic-ext4-conbined.qcow2,if=virtio  -device vfio-pci,host=0000:02:00.0 -device vfio-pci,host=0000:03:00.0 -nographic -net none
#/path-to/改为openwrt-23.05.2-generic-ext4-conbined.qcow2所在路径
#2核,2 GiB内存。


虚拟机,启动!

进去看看哪个网卡被设置成了wan,哪个网卡被设置成了lan。wan对应的网卡接上游的设备,lan口接下游的设备,自己配置
https://blog.csdn.net/hsyxxyg/article/details/136638643