[Openwrt]在VirtualBox虚拟机中玩耍OpenWrt

OpenWrt官方对OpenWrt的定义,是适合于嵌入式设备的一个Linux发行版。但其实对用户来说,它就是一个开源的路由器操作系统。可以方便的使用opkg包管理来安装和卸载软件,同时有luci做为web ui。

使用OpenWrt制作一个软路由需要一个物理设备,比如经典的低功耗Arm软路由R4S,又或者是一个x86的工控机。在这篇贴子里,我们先用虚拟机熟悉一下OpenWrt操作系统,这样以后购买设备后才不会一头雾水。关于设备的挑选,篇幅较长足够另起一篇贴子了,这里就先跳过。

安装VirtualBox

谈到虚拟机软件,一般都会推荐VMware,但它是商业付费的。而VirtualBox免费开源的虚拟机软件,成为唯一真神。

下载页面下载对应平台的安装包,全程默认配置运行安装即可。

在vbox中安装OpenWrt

OpenWrt官方已经给出了指南:在Virtualbox虚拟机中运行OpenWrt,直接对着着做就行,只记录几个需要留意的点。

OpenWrt镜像选择

镜像建议使用generic-squashfs-combined-efi.img.gz。ext4没有overlay分区,后续需要额外设置,麻烦。

内存

OpenWrt推荐的值是128MiB,这有点太少了,后续我们会运行docker,128M绝对不够,建议最少给个1GB。

CPU

默认的单核差不多能将科学上网的网速跑到2MB/s。
但如果开启了Hyper-V,不要轻易增加核心数,可能会有反效果。关于Hyper-V与VirutalBox的冲突可查看VirtualBox在win上特别卡

网络

如果想通过VBox里的OpenWrt上网,桥接网卡是必选项,注意要桥接到用来上网的实体网卡上。

OpenWrt国内镜像站

国内有阿里上交大两个官方镜像站任君选择。

还有腾讯清华等非官方的镜像站。

配置源特别简单,修改/etc/opkg/distfeeds.conf中的网址就好。

1
sed -i 's_downloads.openwrt.org_mirror.sjtu.edu.cn/openwrt_' /etc/opkg/distfeeds.conf

语言

如果想将luci显示语言换成中文,安装中文语言包再刷新下页面就好了。后面可以进到“系统”->“系统”->“语言和界面”里切换。

1
2
opkg update
opkg install luci-i18n-base-zh-cn

扩容

官方的镜像文件只有100多M的空间,肯定不够用,我们需要将root扩容。

实机扩容root大致可以分两步,先是挂载新硬盘获得新的存储空间,再是扩容root。可以参见:OpenWrt扩容

同为虚拟机,VBox里的扩容比Hyper-V要简单得多。

首先将虚拟机关机;
然后在VBox的工具->介质中,选择我们使用的虚拟磁盘openwrt.vdi,直接将虚拟分配空间的大小改到200G;
最后启动虚拟机,完事。

安装软件

宿主机使用虚拟机中的OpenWrt上网

实现宿主机使用虚拟机上网有蛮多路径,我们实现最简单的一种:虚拟机桥接模式。

虚拟机需要设置两块网卡,一块Host Only,一块桥接网卡。其中,

  • Host Only网卡,视为lan。用以连接宿主机。
  • 桥接网卡,视为wlan。用以连接宿主机的上游,通常是路由器。注意宿主机还可能有Hyper-V等虚拟网卡,桥接网卡是实体网卡,通常以Intel开头,不要选错了。

在上面创建虚拟机时,多半已经设置了这两个网卡,而且还多出一个网络地址转换NAT网卡,需要把NAT网卡先删除掉。

我们的思路是,宿主机使用Host Only网卡连接虚拟机,虚拟机使用桥接网卡连接上游路由器,同时禁掉宿主机到上游路由器的ipv4,迫使网络走仅剩的虚拟机通道。

要实现这点,需要修改宿主机和虚拟机中的Host Only网卡的配置,将网关反过来。

  1. 修改虚拟机的lan ip为192.168.8.1
    1
    2
    3
    uci set network.lan.ipaddr='192.168.8.1'
    uci commit
    reboot
  2. 修改宿主机的VirtualBox Host-Only Network的ipv4为192.168.8.2,同时网关和dns为192.168.8.1
  1. 禁掉宿主机的以太网ipv4

注意:禁掉宿主机的以太网ipv4后,有些应用会直接无法连接网络,比如Office。它不会去使用VirtualBox Host-Only网卡,而是判断到以太网网卡无ipv4就认为断网。
如果需要联网则需要暂时恢复本地以太网ipv4。

开机自启

"$ENV:USERPROFILE\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"创建一个vbox.bat,内容为:

1
VBoxManage startvm OpenWrt --type headless

即可实现开机自启。