Table of Contents

在Virtualbox虚拟机中运行OpenWrt

本文描述了如何将x86-64的OpenWrt镜像运行在VirtualBox虚拟机

准备工作

如果你看到类似右边的错误:VBoxManage: error: VD: The given disk size 19444018 is not aligned on a sector boundary (512 bytes) VBoxManage: error: Error code VERR_VD_INVALID_SIZE at /Users/vbox/tinderbox/5.1-mac-rel/src/VBox/Storage/VD.cpp(7002) in function int VDCreateBase(PVBOXHDD, const char *, const char *, uint64_t, unsigned int, const char *, PCVDGEOMETRY, PCVDGEOMETRY, PCRTUUID, unsigned int, PVDINTERFACE, PVDINTERFACE) VBoxManage: error: Cannot create the disk image “lede.vdi”: VERR_VD_INVALID_SIZE 你可以重新整合镜像,dd if=lede-x86-64-combined-squashfs.img of=lede.img bs=128000 conv=sync 整合后的镜像, 再用 VBoxManage convertfromraw 工具转换.

你也可以自己编译(Target System → x86-64 and Target Images → Build VirtualBox image files). 首先需要启用ext4.

VirtualBox 设置

创建虚拟机

:!: 教程和截图来自 Virtualbox 5.1.8 Linux 主机, Windows 或者 MacOS 主机上大同小异( 比如菜单栏会)同 但是 Virtualbox 界面和按键是一样的。

打开VirtualBox,然后点击 新建(New) 来新建一个虚拟机(VM)


给虚拟机设置 名字(Name), 类型(Type) 选择 Linux , 版本(Version) 选择 Linux 2.6 / 3.x / 4.x (64-bit) , 点击 下一步(Next).


LEDE 工作需要的内存(RAM)比推荐的少的很多,128 MiB 就已经足够.


选择 使用已有的虚拟硬盘文件(Use an existing hard disk file), 点击文件(file) 图标来打开虚拟介质管理器(Virtual Media Manager, 点击添加(Add) 来选择你的.vdi 文件. 点击 创建(Create)即可完成创建.


:!: 这里推荐,在把镜像文件添加到VirtualBox前,把镜像文件放在一个永久存储的位置。如果你之后移动了文件, VB 将不会找到,并且会在下次启动时报告这个问题。但是不用担心,VB将会告诉你如何再次链接这个虚拟硬盘文件。

VM虚拟机设置

本部分将会手动设置网络配置.
你将通过本教程设置:

Virtualbox 设置

仅主机(Host-only) 网络适配器

首先我们需要确认是否有一个仅主机(Host-only) 网络适配器,并且正确配置


点击 文件(File)偏好设置(Preferences)网络(Network)


点击仅主机(Host-only)网络标签,如果没有vboxnet0 选项,点击 窗口右边的 + 图标来添加.
选择 vboxnet0 选项, 点击右边那个螺丝刀的图标来打开设置.


IPv4 地址(Address) 设置为 192.168.56.1, IPv4 网络掩码(Network Mask) 设置为 255.255.255.0, IPv6 地址(Address) 为空, IPv6 网络掩码(Network Mask)0


(可选) 如果你想让虚拟机获得动态地址,可以像截图中的那样,设置 DHCP 服务器, 但是对于本教程,不需要在虚拟机本身设置静态地址


按 OK 保存并关闭,然后再次返回 Virtualbox 管理器界面.

网络设置

打开虚拟机的设置


点击 网络(Network) 标签


配置 网卡1(Adapter 1):

  1. 连接方式选择 仅主机网络(Host-only Adapter)
  2. 选择 vboxnet0 作为网卡 Name
  3. 点击 高级(Advanced) 并在控制芯片(Adapter Type) 选择 Intel PRO/1000 MT 桌面
  4. 混杂模式(Promiscuous mode) 应设置为 拒绝(Deny) 除非你有其他原因要选择允许.

VM 设置

:!: 因为 LEDE 的限制, 在虚拟机的终端屏幕上,输入源设置为US,所以你的一些按键不会打印出正确的符号.
同样, 由于您所看到的是一个裸机终端,而不是一个ssh程序(Putty / Kitty / whatever)或终端仿真器程序, 所以你不能往里面复制-粘贴文本.
别担心, 大多数配置会在你连接到SSH(remote terminal)后进行,所以不会有不能复制粘贴的问题.
这是一份 US 键盘布局,你可以查看以比对出你应该在你的键盘上按的按键.


  1. 启动你的虚拟机
  2. 等待4秒,GRUB程序将会自动引导系统
  3. 当启动信息停止滚动后,按下 回车键Enter 来激活命令行
  4. 查看网络配置信息
    root@lede:~# uci show network
    network.loopback=interface
    network.loopback.ifname='lo'
    network.loopback.proto='static'
    network.loopback.ipaddr='127.0.0.1'
    network.loopback.netmask='255.0.0.0'
    network.globals=globals
    network.globals.ula_prefix='fd1b:e541:8f1a::/48'
    network.lan=interface
    network.lan.type='bridge'
    network.lan.ifname='eth0'
    network.lan.proto='static'
    network.lan.netmask='255.255.255.0'
    network.lan.ip6assign='60'
    network.lan.ipaddr='192.168.56.2'
    network.wan=interface
    network.wan.ifname='eth1'
    network.wan.proto='dhcp'
    network.wan6=interface
    network.wan6.ifname='eth1'
    network.wan6.proto='dhcpv6'
  5. 编辑网络配置信息,以允许SSH连接,输入以下命令并回车:
    1. uci set network.lan.ipaddr='192.168.56.2'
    2. uci commit
    3. reboot
  6. 现在你的虚拟机应该可以从SSH来连接, 用户名 root (没有密码) ip地址 192.168.56.2
  7. 成功登陆后, 我们可以继续配置, 复制-粘贴以下代码并回车:
    uci batch <<EOF
    set network.mng=interface
    set network.mng.type='bridge'
    set network.mng.proto='static'
    set network.mng.netmask='255.255.255.0'
    set network.mng.ifname='eth0'
    set network.mng.ipaddr='192.168.56.2'
    delete network.lan
    delete network.wan6
    set network.wan=interface
    set network.wan.ifname='eth1'
    set network.wan.proto='dhcp'
    EOF
  8. 输入 uci changes 来确认配置是否被正确加载. 如果你看到( network.mng 的值和以下一样, network.wan 可能会稍微不一样), 那就对了
    root@lede:~# uci changes
    network.mng='interface'
    network.mng.type='bridge'
    network.mng.proto='static'
    network.mng.netmask='255.255.255.0'
    network.mng.ifname='eth0'
    network.mng.ipaddr='192.168.56.2'
    -network.lan
    -network.wan6
    network.wan='interface'
  9. 如果上面的操作正确, 保存配置并重启uci commit && reboot, 如果没有操作好, 输入 reboot 来删除临时的修改,然后手动设置上面的配置.
  10. 关闭终端,当虚拟机重启好后再打开SSH终端,使用同样的连接参数 (用户 root and ip地址 192.168.56.2)
  11. 现在你的虚拟机应该接入了外网 (使用opkg软件包更新来测试 opkg update) 然后,你可以用过SSH客户端连接到具有静态ip的管理界面,即使你的电脑断开了外网.
  12. 可选的在 网卡3(Adapter 3)选择桥接网卡(Bridged Adapter) 并不是基本功能的关键,而是你本地网络参数中特有的. 在我自己的网络(并在大多数家庭网络),输入以下命令生效
    uci batch <<EOF
    set network.lan=interface
    set network.lan.ifname='eth2'
    set network.lan.proto='dhcp'
    EOF
    uci commit


    如果你有更多的需求,你可以阅读文档来设置, 或是通过 luci.

  13. 你现在可以像通常一样,安装软件包到镜像里面, 你也许会想要安装luci, 输入 opkg update && opkg install luci, 然后在你的浏览器地址栏输入192.168.56.2 你就可以访问到虚拟机的luci界面 或者点击这个链接.

故障排除

在Windows操作系统的启动时自动运行Lede的virtualbox虚拟机