[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 | opkg update |
扩容
官方的镜像文件只有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网卡的配置,将网关反过来。
- 修改虚拟机的lan ip为
192.168.8.1
1
2
3uci set network.lan.ipaddr='192.168.8.1'
uci commit
reboot - 修改宿主机的
VirtualBox Host-Only Network
的ipv4为192.168.8.2
,同时网关和dns为192.168.8.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 |
即可实现开机自启。