起因: 完全是因为想折腾,但没有合适的可刷固件的路由器。所以考虑在虚拟机上安装x86版的OpenWrt,来实验各种功能。这里是2022-11-08新补充的方法,个人认为比较合适,主要是可以用到全部的安装介质空间,可操作的余地较大。

一、准备工作

宿主机可以是 Windows系统安装了VirtualBox,或者是安装了KVM的Linux系统PC。

Puppy Linux的镜像。目前是基于ubuntu22.04构建的9.5版。只有409MB。

二、用VirtualBox或者virt-manager 创建虚拟机。

内存配置2G或以上,虚拟硬盘空间根据自己需要,一般2G差不多了。如果要实验在OpenWrt上装docker或者套娃其他KVM虚拟机,则内存和虚拟硬盘尽量大一些。

三、在虚拟机的光驱上挂载Puppy Linux镜像并启动。

这是一个非常易用的LiveCD,基本的parted分区工具之类都有,后面扩展OpenWrt空间要用到。

进入Puppy Linux系统,使用里面的浏览器,搜索OpenWrt并下载镜像。 下载的默认存储位置在 /root/Download/中。

打开Puppy Linux系统中的命令行终端,进行操作。

# 如果是用Puppy Linu的浏览器下载的,请进入/root/Download/  从下面第2条命令开始执行
wget https://downloads.openwrt.org/releases/22.03.2/targets/x86/64/openwrt-22.03.2-x86-64-generic-ext4-combined.img.gz
gunzip openwrt-22.03.2-x86-64-generic-ext4-combined.img.gz
fdisk -l
dd if=openwrt-22.03.2-x86-64-generic-ext4-combined.img of=/dev/sda bs=4M; sync;
parted /dev/sda print
parted /dev/sda resizepart 2 17.2GB  #根据上一条命令所显示的sda的总体大小填写
parted /dev/sda print                #看一下大小是否调整成功
resize2fs /dev/sda2

四、操作过程截图

docker容器实现旁路由 docker 旁路由_KVM装Openwrt

五、优点和缺点

相较于这篇文章之前的内容所示方法,该安装过程更为直接,也可以使用VirtualBox挂载实体U盘,对USB存储介质进行直接操作,用到全部的U盘空间。

注意!U盘不要在虚拟机上启动,制作完,直接拔掉,插到要作为OpenWRT服务器的PC上进行首次启动

比较麻烦的是,在使用虚拟机套娃安装KVM虚拟机时,有可能会出现 virt-manager鼠标发飘的问题。需要用到右键打开Puppy的Menu,箭头和Tab键来操作浏览器和命令行终端。

#############以下为旧办法,仅作参考################

一、将openwrt x86_64下载的img镜像转换为vdi硬盘镜像

进入 VirtualBox 安装路径,一般是 C:\Program Files\Oracle\VirtualBox,里面应该有一个 VBoxManage.exe 应用程序。

运行 CMD 命令提示符执行命令把 img 镜像文件转换为 vdi 文件。

将下载和解压后的img文档放到C:\Program Files\Oracle\VirtualBox文件夹中,以管理员身份运行powershell,进入该文件夹,运行转换命令

PS C:\Users\Tina-D> cd "C:\Program Files\Oracle\VirtualBox"
PS C:\Program Files\Oracle\VirtualBox> .\VBoxManage.exe convertfromraw -format VDI openwrt-21.02.1.img openwrt-21.02.1.vdi
Converting from raw image file="openwrt-21.02.1.img" to file="openwrt-21.02.1.vdi"...
Creating dynamic image with size 126385664 bytes (121MB)...
PS C:\Program Files\Oracle\VirtualBox> .\VBoxManage.exe convertfromraw -format VDI openwrt-21.02.1.img openwrt-21.02.1.vdi

其他格式的转换

# 例如要用于适合kvm的虚拟机
.\VBoxManage.exe convertfromraw -format VMDK openwrt-21.02.1.img openwrt-21.02.1.vmdk
# 其他VHD格式
.\VBoxManage.exe convertfromraw -format VHD openwrt-21.02.1.img openwrt-21.02.1.vhd

docker容器实现旁路由 docker 旁路由_KVM装Openwrt_02

 二、新建virtualbox 虚拟机,导入该vdi硬盘镜像,设置两个桥接网卡,开机

三、配置 Openwrt的 network:

vi /etc/config/network
# 修改下列部分
config interface 'lan'
        option ifname 'br-lan'
        option proto 'static'
        option ipaddr '192.168.0.1'  #主要是这里,默认是192.168.1.1,因为和主路由冲突,所以修改
        option netmask '255.255.255.0'
        option ip6assign '60'

重启网络服务:

/etc/init.d/network restart

 将要用于登录OpenWRT的电脑的网卡,增加一任意一个 192.168.0.x 的 ip ,使之生效,然后 浏览器打开192.168.0.1 ,账户root,密码root,即可登录。

四、Debian KVM 安装OpenWRT X86

3.1 基本环境介绍

宿主机为Debian11 最小化安装,要使用KVM还需要安装下列软件包

apt install qemu-kvm bridge-utils libvirt-bin virtinst

qemu-kvm 是QEMU 和 KVM 的附加组件
bridge-utils 用于管理网桥
libvirt-bin    是额外的虚拟机所需的包virtualization packages
virtinst        用于进行手动虚拟化管理
3.2  如果你不想增加其他用户,而是只用root来进行管理,则需要进行下列配置:

将 /etc/libvirt/qemu.conf 文件的拥有者和用户组都更改为root
重新启动 /etc/init.d/libvirt* 条目

3.3 然后就是配置KVMhost的网络了。修改 /etc/network/interfaces ,主要是配置和使用网桥,请根据你的具体情况进行调整。

auto br0 br1 br2 br3
 
iface br0 inet dhcp
  bridge_ports eth0
 
iface br1 inet dhcp
  bridge_ports eth1
 
iface br2 inet dhcp
  bridge_ports eth2
 
iface br3 inet dhcp
  bridge_ports eth3

注: 有关debian系统的桥接网卡配置,请参考:https://wiki.debian.org/BridgeNetworkConnections 

 3.4 Openwrt虚拟机的创建,用1个网桥接口模拟了两个网卡

virt-install --name=openwrt --vcpus=2 --ram=512 --os-type=linux --disk path=/home/iso/openwrt.img,bus=ide --autostart --network bridge=br0,model=e1000 --network bridge=br0,model=e1000 --import --noautoconsole
#注:network 的 model=e1000可以让openwrt更好的认出网卡接口,并且有两个network,这是设置了2个网卡.

在主机上有多个网卡的情况下,设置多个网络端口的虚拟机的配置

virt-install --name=openwrt --ram=256 --vcpus=1 --os-type=linux --disk path=/home/isos/openwrt-x86-generic-combined-ext4.img,bus=ide --network bridge=br0,model=e1000 --network bridge=br3,model=e1000 --import --noautoconsole

3.5 安装完成后的配置。

通常安装完后,要通过浏览器以 http://192.168.1.1 登录到luci管理界面,如果你的网络上有另外的路由器,可能会产生冲突,可以先临时关闭路由器,更改 openwrt虚拟机的lan口ip为 192.168.X.1,

3.6 如果命令行安装不能成功的解决方法。

只能通过virt-manager 这个图形化管理工具,进行安装

3.6.1  关键步骤是,选择使用已有的硬盘镜像

docker容器实现旁路由 docker 旁路由_Openwrt虚拟机的配置_03

 从解压后的openwrt.img 所在的文件夹选中,一步一步完成虚拟机的新建

3.6.2 用virt-manager 新建的虚拟机,只有1个网卡,需要新添加一个,方法如下图

docker容器实现旁路由 docker 旁路由_Openwrt虚拟机的配置_04

3.6.3  启动虚拟机,以浏览器进入 http://192.168.1.1 在luci图形界面下进行配置,或者以virt-manager 在命令行下进行配置。 这里主要介绍在命令行下如何配置,适用于主路由器不好临时关闭的情况,手动修改。

vim /etc/config/network

修改为如下图所示即可,eth0 作为lan口,ip配置为和主路由不同的网段,方便我们以浏览器登录luci;eth1 就是我们新增加的网卡,是wan口,这里设置为了dhcp获得IP,通过这里从主路由器获得ip和以此接口上网。

docker容器实现旁路由 docker 旁路由_Openwrt X86安装_05

重启一下网络  ./etc/init.d/network restart

然后就可以配置openwrt虚拟机了。

docker容器实现旁路由 docker 旁路由_KVM装Openwrt_06