VMware安装OpenWrt虚拟机让宿主机上网

OpenWrt是一个常用的路由器操作系统,基于Linux可以实现丰富的功能。将其配置为软路由虚拟机,可以让宿主机及其他虚拟机通过OpenWrt虚拟机上网。完成后,可以利用x86软路由的强大性能部署透明代理等各种功能。

虚拟机的创建

  1. 以VMware Workstation 15.1为例,在新建虚拟机中使用自定义配置、Workstation15.x硬件兼容性、稍后安装操作系统。

    新建虚拟机配置类型
    新建虚拟机硬件兼容性
    新建虚拟机操作系统

  2. 选择客户机操作系统为Linux,版本为其他Linux 4.x 或更高版本内核64位。并对虚拟机进行命名。

    选择客户机操作系统
    命名虚拟机

  3. 配置处理器核心数、内存(根据软路由中将要配置的软件选择合适的配置)。

    配置处理器核心数
    配置虚拟机内存

  4. 配置网络类型为使用桥接网络。

    配置桥接网络

  5. 配置硬盘,使用LSI Logic类型SCSI控制器、SCSI硬盘类型、创建新虚拟磁盘、配置磁盘大小、命名磁盘文件。

    配置I/O控制器类型
    配置虚拟磁盘类型
    配置创建新建虚拟磁盘
    配置磁盘容量
    指定磁盘文件

  6. 选择自定义硬件,删除不必要的硬件,并添加新的VMnet1仅主机模式网卡。完成配置。

    硬件配置一览
    删除不必要的硬件、配置新网卡

写入OpenWrt固件

  1. 将新建的虚拟机磁盘挂载到现有的Linux虚拟机上。

    现有虚拟机配置
    新增磁盘
    磁盘类型
    使用现有磁盘
    选择磁盘文件
    进行确认

  2. 在现有虚拟机上下载OpenWrt压缩包、解压并写入到硬盘中。

    从OpenWrt官网下载页面找到对应版本的固件下载地址

    1
    2
    3
    # wget http://downloads.openwrt.org/releases/18.06.4/targets/x86/64/openwrt-18.06.4-x86-64-combined-ext4.img.gz
    # gunzip openwrt-18.06.4-x86-64-combined-ext4.img.gz
    # dd if=openwrt-18.06.4-x86-64-combined-ext4.img.gz of=/dev/sdb

    下载、解压、写入

  3. 从作为工具用的虚拟机上删除OpenWrt虚拟磁盘。

    删除OpenWrt虚拟磁盘

配置OpenWrt虚拟机

  1. 对OpenWrt虚拟机执行快照,方面后续操作错误时进行恢复。

    快照功能入口
    快照配置

  2. 默认情况下OpenWrt虚拟机的网卡绑定是反的(WAN与LAN交换),因此需要在OpenWrt虚拟机控制台上修改网卡绑定。修改时需要将/etc/config/network文件中的eth0和eth1交换。

    1
    2
    # vim /etc/config/network
    # reboot

    OpenWrt控制台
    修改后的网络配置文件的一部分

  3. 断开主机网络(网线、WiFi),在浏览器地址栏输入OpenWrt默认地址192.168.1.1进入配置页面。点击Login进入到OpenWrt管理页面(无需密码)。点击Go to password configuration进入密码配置页面,输入密码、确认密码后拖动到页面底部点击Save保存密码。

    OpenWrt登录界面
    登录后的界面
    新密码填写
    保存密码

  4. 接着进入Network->Interfaces进行网络的配置。默认情况下WAN使用DHCP上网(电脑连接到路由器),如果使用其他方式上网需要在此处进行配置。LAN网络在默认情况下使用192.168.1.1地址并提供DHCP服务,为了避免与常见的路由器冲突,我们将其地址改为192.168.3.1。

    网络接口配置界面
    点击需要修改的接口(此处为LAN)的Edit按钮,在跳转到的界面上填写新的IP地址值,点击页面底部的Save保存配置。
    LAN接口配置修改
    在界面右上角点击UNSAVED CHANGES进入配置保存界面,点击Save & Apply按钮完成配置的保存。
    进入配置保存页
    配置保存页

  5. 重启OpenWrt虚拟机使修改生效,并重启VMnet1虚拟机网卡重新获取IP。

    重启OpenWrt虚拟机
    重启VMnet1网卡

  6. 可以通过Network->Firewall->Port Forwards配置端口转发向外部提供服务(需要在控制台使用命令行安装ipset包)。

    1
    2
    # opkg update
    # opkg install ipset

    端口转发配置界面

  7. 可以通过Network->Firewall->Traffic Rules配置SNAT将通过网络包的源地址修改为OpenWrt的LAN地址。通过这种方式,可以避免内网服务器将经过端口映射的包不经过OpenWrt虚拟机进行转发而不能被客户接收的问题。

    SNAT配置界面

  8. 在控制台使用命令行安装shadow-common、shadow-useradd包后即可通过useradd命令新增用户。新增完成后使用passwd修改密码。创建用户home目录,并编辑/etc/passwd文件指定新用户shell。

    1
    2
    3
    4
    5
    6
    # opkg update
    # opkg install shadow-common shadow-useradd
    # useradd newUserName
    # mkdir -p /home/newUserName
    # passwd newUserName
    # vim /etc/passwd # 在newUserName行尾添加/bin/ash后可以通过SSH登录

配置宿主机通过OpenWrt上网

  1. 关闭物理网卡的IP协议(方案1)。使用这种方案,物理网卡在宿主机上没有IP地址,无法联网。而OpenWRT虚拟机的WAN口桥接到了物理网卡上,接管了IP层的工作。此时,宿主机通过VMnet1仅主机模式虚拟网卡连接到OpenWrt虚拟机LAN口通过OpenWrt上网。因此在OpenWrt上配置的透明代理等可以在宿主机上使用。需要注意的是,WiFi连接工作在数据链路层,其连接、断开、密码等仍在宿主机上进行管理。

    关闭物理网卡的IP协议

  2. 取消物理网卡的默认网关(方案2)。使用这种方案,宿主机物理网卡上虽然配置了IP地址,但不指定默认网关。对主机路由表中不存在的IP条目,将通过VMnet1上配置的默认网关发送,从而实现了通过OpenWrt虚拟机上网。使用这种方式,可以在物理网卡上保留静态IP地址,对于需要使用静态IP来连接外部设备的情况很有用。

    关闭物理网卡的IP协议

配置其他虚拟机使用OpenWrt来提供网络服务

  1. 其他虚拟机需要通过OpenWrt虚拟机上网时只需要将网卡修改为VMnet1仅主机网络并使用DHCP方式上网即可实现目标。

配置OpenWrt虚拟机开机自启

  1. 将虚拟机关机,配置为共享虚拟机

    关闭虚拟机
    配置为共享虚拟机

  2. 在管理虚拟机电源操作中将OpenWrt虚拟机配置为开机自启

    打开管理虚拟机电源操作
    打开管理虚拟机电源操作

  3. 打开虚拟机电源

参考资料