OpenWrt 是一个面向嵌入式的Linux系统,常用于刷入路由器替换路由器原有系统。
个人部署的虚拟化环境中所有虚拟机需要一个私有的网络地址,ESXi 本身不提供 DHCP 功能,所以只能找其它解决方案。最开始部署了一个 CentOS7 当作路由器,详细请参考 https://linuxhint.com/centos7_router/ 一文。但是不太方便,最终考虑安装专给路由器诞生的 OpenWrt 系统。
准备工作:ESXi (安装目标),ESXi 中的 Windows (Web配置 OpenWrt),CentOS 或其它 Linux (转换官方镜像)。
下载安装镜像
在 https://downloads.openwrt.org/releases/21.02.0-rc4/targets/x86/64/ 页面中下载所需镜像。这里以 generic-ext4-combined.img.gz 为例,在 CentOS7 下准备 ESXi 可用镜像。
yum -y install qemu-img # 安装磁盘镜像格式转换工具 wget https://downloads.openwrt.org/releases/21.02.0-rc4/targets/x86/64/openwrt-21.02.0-rc4-x86-64-generic-ext4-combined.img.gz # 下载所需镜像 gunzip openwrt-21.02.0-rc4-x86-64-generic-ext4-combined.img.gz qemu-img convert -f raw -O vmdk openwrt-21.02.0-rc4-x86-64-generic-ext4-combined.img openwrt-21.02.0-rc4-x86-64-generic-ext4-combined.vmdk
可以用自己喜欢的方式把转换后的镜像上传到 ESXi 的存储盘中。然后启动 ESXi 的 SSH 控制台,需要在这里把前一步的 vmdk 转换成 ESXi 可用的。这里直接上传到根目录为例:

df -h # 显示ESXi中所有文件系统挂载点,找到虚拟化系统数据存储位置 cd /vmfs/volumes/datastore1 # 以我的挂载点为例 vmkfstools -i openwrt-21.02.0-rc4-x86-64-generic-ext4-combined.vmdk openwrt_sys.vmdk # 转换成ESXi可用的磁盘文件格式
建立虚拟交换机和端口组
在建立虚拟机之前请先建立一个虚拟交换机网络,网络->虚拟交换机 中点击 添加标准虚拟交换机,这里以名称 vSwitch1 为例。
然后在 网络->端口组 中点击 添加端口组,这里以名称 Test Internal Network 为例,虚拟交换机指定为 vSwitch1。
建立完成后,点击端口组详情,是这个样子的:

建立虚拟机
选择 创建新虚拟机,然后指定名称,这里以 openwrt21-test 为例。
客户机操作版本选择,其它 2.4.x Linux (32位)。然后下一步。
内存使用默认的 512MB 或者更高即可。
SCSI控制器使用默认的 LSI Logic Parallel。
网络适配器中选择刚刚创建的端口组 Test Internal Network,适配器类型选择 E1000e
然后硬盘1点击右侧的(x)移除,然后左上角 添加硬盘->现有硬盘 选择我们刚刚转换的 openwrt_sys.vmdk 文件。
那么现在应该是这个样子的:

下一步再完成虚拟机创建,然后点击打开虚拟机。
然后进入系统后输出一些启动信息之后卡住时,尝试敲击回车,你就会看见如下内容。

使用 ifconfig 查看网络信息时你会发现它自动配置了网段 192.168.1.0/24,很明显它现在可以看成是一个没连入上级网络的路由器了。
想一想,正常情况下我们是怎么配置新路由器的,当然是把一个电脑接入路由器的LAN (或LAN口下交换机) 口去管理页面配置路由器了。有些消费级路由器是可以从外部网络联入的,有些则不行,不行的也得去管理页面关闭防火墙才行。
当然此时也可以找其它的教程直接去配置 /etc/config/network,不过这对不熟悉 OpenWrt 和网络配置的人有点难度。
在这里使用一个同一 ESXi 虚拟化环境 Windows 来配置加入 Test Internal Network 并禁用其它已有网络(排除影响)。当然如果你喜欢也可以用带有浏览器的 Linux。

此时打开任务管理器查看网络连接,发现已经进入 192.168.1.0/24 网络
打开浏览器,输入 OpenWrt 管理页面路径 http://192.168.1.1/。成功会是这个样子:

它提示你设置 root 的密码,转到 OpenWrt 的 ESXi 控制台管理页面,输入 passwd 然后按照提示创建root密码。
创建成功后就可以登录浏览器页面了。
配置路由功能
打开 Network->Interfaces 页面发现只有一组LAN口,我们如果需要 192.168.1.0/24 能够上网。则需要配置一个WAN口。

在 ESXi 中给 OpenWrt 添加接入到物理网卡能实际上网的那个网络端口组,这里是 ESXi 默认的名称 VM Network。请注意:适配器类型请选择E1000。点击保存:

然后 OpenWrt 的 Web 管理页面中 Network->Devices 会多出一个设备:

点击左下角绿色的添加设备配置按钮,添加新的桥接设备 (Bridge device),名称为 br-wan,桥接端口设置为新添加的设备eth1,MTU1500,MAC地址请复制eth1设备的,TX队列长度为1000,保存。然后在外部页面点击右下角的 Save & Apply 按钮保存生效。

前往 Network->Interfaces 界面点击左下角的添加网络界面接口,点击添加新的网络设备,名称为wan,协议为 DHCP 客户端,设备指定刚刚添加的 br-wan,点击创建界面。然后再 Save & Apply 生效。

此时当前仅连入 OpenWrt 网络的设备已经可以上外网了。
其它
可以前往 Network->DHCP and DNS->Static Leases 给设备绑定静态IP配置。
建议前往 Network->Interfaces 界面修改 LAN 配置的默认网段为其它,不要用 192.168.1.0/24,这个网段消费级路由器网段重灾区,可以使用例如 10.10.x.x/24。如果你的实际上网的路由器为这个网段,可以先修改 LAN 口的配置再接入 WAN 口。
创建完成 OpenWrt 之后,安全停止虚拟机,可以移除硬盘,然后把 openwrt_sys.vmdk 文件移动到相关联的虚拟机目录之后重新加入硬盘。
参考文章
https://openwrt.org/docs/guide-user/virtualization/vmware https://xmanyou.com/vmware-esxi-install-openwrt/