User Tools

Site Tools


zh:docs:guide-user:virtualization:virtualbox-vm

在Virtualbox虚拟机中运行OpenWrt

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

准备工作

  • 下载并安装 VirtualBox虚拟机
  • 下载并安装 Virtualbox Guest Additions 扩展工具 ( 因为需要usb连接等其他功能 )
  • snapshots/targets/x86/64/下载 lede-x86-64-combined-squashfs.img 镜像。 (在 Linux系统上, 下载这个lede-x86-64-combined-ext4.img 镜像 )
  • 到你下载文件的目录,打开一个终端窗口 ( 下面的功能只有命令行的界面 )
  • 将镜像转换为原生VB格式,使用以下命令(命令在 Windows, Mac 和 Linux 上通用. ): VBoxManage convertfromraw --format VDI lede-x86-64-combined-squashfs.img lede-x86-64-combined-squashfs.vdi (在 VB 5.1.10 debian8 上测试可以用,但是lede-x86-64-combined-squashfs.img镜像看起来不能用,因为是只读的)

如果你看到类似右边的错误: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虚拟机设置

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

  • 虚拟机的eth0 作为 mng (管理) 接口, 固定ip 192.168.56.2, VirtualBox中设置 仅主机网卡(Host-only Adapter)vboxnet0. 即使主机或虚拟机与任何网络断开连接,此网卡将始终可供主机使用.
  • 虚拟机的eth1 作为 wan 接口, 动态ip地址, 在VirtualBox中设置为NAT. 这个接口会被用于联网,不管你的宿主机是如何联网的.
  • (可选) 虚拟机的eth2 作为lan 接口, 配置取决于你的本地网络, 在VirtualBox中设置为 桥接网卡(Bridged Adapter). 这个网卡允许其他设备 (包括宿主机) 来连接到虚拟机,就好像他是本地网络中的真实存在的物理网卡一样. 只有本地已经有网络的情况下才能生效.
  • 要配置两个桥接物理网卡请查看 故障排除. 本指南的其余部分也适用于具有2个物理卡的设置.

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) 除非你有其他原因要选择允许.
  • 配置 网卡2(Adapter 2)
    1. 连接方式选择 (网络地址转换)NAT
  • (可选) 配置 网卡3 (Adapter 3)
    1. 连接方式选择 桥接网卡(Bridged Adapter)
    2. 在网卡名称处选择你的网卡(以太网或者是无线网络) . 在windows上是全名, 在Linux上会是代号,就像 eth0, eth1 以太网或者 wlp2s0 无线网.
    3. 点击 高级(Advanced) ,其余和 网卡1(Adapter 1)中的高级配置一样

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界面 或者点击这个链接.

故障排除

  • 如果你修改了硬盘的文件, VirtualBox 将会报告硬盘文件的UUIDs无效
    • 你需要在虚拟机中和虚拟介质管理器(Virtual Media Manager)移除硬盘文件
    • 然后重新添加硬盘镜像文件到虚拟机
  • 如果你要用一个桥接的VPN连接到LEDE,并连接到你的本地网络,你需要设置:
    • 混杂模式(Promiscuous Mode) 对应的 桥接网卡(Bridged Network Adapter) 选择为 “允许所有”,否则你的本地网络将不会正确桥接到你的vpn网络
  • 你还可以设置两个物理网络接口在你的宿主操作系统上. 这样的话:
    • 用一个网络接口作为 WAN 并在VirtualBox 中选择为 桥接网卡(Bridged Adapter) 并且 混杂模式(Promiscuous Mode) 设置为 拒绝(Deny)
    • 用另一个网卡作为 LAN 并在VirtualBox 中选择为 桥接网卡(Bridged Adapter) 并且 混杂模式(Promiscuous Mode) 设置为
      • 拒绝(Deny) 如果你不希望暴露桥接的虚拟网络到你的物理网络中
      • 允许所有(Allow All) 如果你希望连接你的桥接虚拟网络到你的物理网络

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

  • 按顺序将以下条目导入您的注册表或手动添加:
    1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    2. “VB-LEDE”=“\”C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe\“ startvm \”NAMEOFVBINSTANCE\“ –type headless”
  • 创建2个快捷方式并使用Windows任务调度程序
    1. “C:\Program Files\Oracle\VirtualBox\VBoxManage.exe” startvm LEDE –type headless
      1. 在任务调度程序中创建一个任务,通过任意用户的登录触发快捷方式
    2. “C:\Program Files\Oracle\VirtualBox\VBoxManage.exe” controlvm LEDE acpipowerbutton
      1. 在任务调度程序中创建一个任务,通过事件触发快捷方式
        1. Begin the task: On an event
        2. Basic Log: System
        3. Source: User32
        4. Event ID: 1074
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
zh/docs/guide-user/virtualization/virtualbox-vm.txt · Last modified: 2019/03/30 00:49 by hgao