OpenWrt是很受欢迎的路由器固件,可被轻易地定制和扩展。这里跟大家介绍一个快速安装OpenWrt虚拟机并且实现网卡直通的方法。
说起安装虚拟机,除了VMware Workstation、VirtualBox等软件,还有虚拟化平台。说起使用虚拟化平台,很多人会说用VMware的ESXi,也有人说用基于Debian的Proxmox Virtual Environment (PVE)。不管别人用什么,现在我们介绍直接用Debian 12实现一分钟安装OpenWRT镜像并且实现网卡直通。
用到的工具:
- 宿主机:一台安装了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口接下游的设备,剩下的自己配置吧。
写在最后
一分钟安装只是开个玩笑,后续补几张图说明一下。