This document describes how to run the x86-64 OpenWrt images in <abbr>Virtual Machine (VM)</abbr> VirtualBox, or VBox for short.
You need a x86 64 bit version of OpenWrt. There is two versions of them:
combined-squashfs.img.gz This disk image uses the traditional OpenWrt layout, a squashfs read-only root filesystem and a read-write partition where settings and packages you install are stored. Due to how this image is assembled, you will have only 230-ish MB of space to store additional packages and configuration, and Extroot does not work.combined-ext4.img.gz This disk image uses a single read-write ext4 partition with no read-only squashfs root filesystem, which allows to enlarge the partition. Features like Failsafe Mode or Factory Reset won't be available as they need a read-only squashfs partition to function.In the guide we'll use openwrt-x86-64-combined-ext4.img.gz because it has fewer limitations.
gzip -d openwrt-*.img.gz. As a result you should get the raw openwrt-x86-64-combined-ext4.img image file.You can compile your own image (Target System -> x86-64 and Target Images -> Build VirtualBox image files). ext4 needs to be enabled first.
VBoxManage.exe is available in the installation path C:\Program Files\Oracle\VirtualBox.VBoxManage convertfromraw --format VDI openwrt-*.img openwrt.vdi. This will create the openwrt.vdi file which a virtual drive for VBox virtual machine.If you receive an error similar to:
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 "openwrt.vdi": VERR_VD_INVALID_SIZE
or:
VBoxManage.exe: error: VDI: cannot create image 'openwrt.vdi'
VBoxManage.exe: error: Error code VERR_ACCESS_DENIED at D:\tinderboxb\win-6.1\src\VBox\Storage\VDI.cpp(691) in function int __cdecl vdiImageCreateFile(struct VDIIMAGEDESC *,unsigned int,struct VDINTERFACEPROGRESS *,unsigned int,unsigned int)
VBoxManage.exe: error: Cannot create the disk image "openwrt.vdi": VERR_ACCESS_DENIED
you may need to pad the image with dd if=openwrt-x86-64-combined-ext4.img of=openwrt.img bs=128000 conv=sync and use the padded image as input to VBoxManage convertfromraw or try another with this command line: VBoxManage convertdd openwrt-*.img openwrt.vdi.
<!-- -->
$ VBoxManage modifymedium openwrt.vdi --resize 128
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
:!: Tutorial and screenshots from VirtualBox 5.1.8 on Linux host, on Windows or macOS hosts there will be some cosmetic differences (a different top bar) but the VirtualBox panels and buttons will be exactly the same
Start VirtualBox and click New to add a virtual machine (VM)
----
Choose a Name for your virtual machine, choose Linux for Type, and Linux 2.6 / 3.x / 4.x (64-bit) for Version, then click Next.
----
OpenWrt will work fine with much less RAM than the recommended amount, 128 MiB will be enough.
Choose Use an existing hard disk file, click the file icon to open Virtual Media Manager, click Add and choose your openwrt.vdi file using the file chooser window. Click Create to end this guided procedure.
---- :!: It's recommended to place the disk image in a permanent place before linking it with VBox. If you move it afterwards, VBox will not find it anymore and will complain about this issue on next start (or when you try to start the VM). It will offer a guided procedure to link the disk image again, so don't worry.
:!: If the Virtual machine keeps restarting with Kernel Panic - not syncing: Attempted to kill the idle task! message, try changing the number of CPUs to 2 and then start the VM. Reference: https://forums.virtualbox.org/viewtopic.php?t=106196.
This part of the configuration will deal with setting up networking manually.
The configuration you will set up by following this tutorial is:
Note that the order of the "Host-only Adapter" as "Adapter 1" and "NAT" as "Adapter 2" is important for turn-key operation of OpenWrt in the VM. While it can be configured using the console, configuration in this way simplifies getting to a running configuration.
we first need to make sure there is a Host-only network adapter and that it has the right settings
Note: this is found in VBox 6.0 (at least for Windows) under Tools, and is pre-configured.
Click on File -> Preferences -> Network
On macOS, this setting may be found through File -> Host Network Manager...
VirtualBox 7.1: File -> Tools -> Network Manager, or press CTRL-H.
Click on Host-only Networks tab and then if you don't see a vboxnet0 entry click on the + icon on the right of the window to add a new one.
Now select the vboxnet0 entry, and click on the screwdriver icon on the right to open its settings.
----
IPv4 Address should be 192.168.56.1, IPv4 Network Mask should be 255.255.255.0, IPv6 Address should be empty and IPv6 Network Mask should be 0
----
(optional) you can also set the DHCP server as shown in the screenshot if you want to have dynamic addresses to the VM, but for this tutorial it is not required as we set a static address in the VM itself
Press OK to save and close until you are back to VirtualBox Manager interface again.
Open the VM's settings
Go in the Network tab
configure Adapter 1:
with Host-only Adapter
- select vboxnet0 as (adapter) **Name**
- click on **Advanced** and in **Adapter Type** select **Intel PRO/1000 MT Desktop**
- **Promiscuous mode** should be set to **Deny** unless you have good reasons to enable it.\\
Configure Adapter 2
(optional) Configure Adapter 3
:!: Due to limitations, the keyboard in the virtual machine's terminal is set to US, so some (or most) of your keys may not print the symbols as indicated by the keycaps.
Also, due to the fact that what you see there is a bare machine terminal and not a smart thing like a SSH program (Putty/Kitty/whatever) or a terminal emulator program, you cannot copy-paste text into it.
Don't worry, most of the setup will be done after you are connected with SSH (remote terminal) that does not have any of these issues.
Look at this US keyboard layout to find what button you need to press on your keyboard to generate the right symbol.
random: crng init done with OpenWrt 17.01.4). Until there is sufficient entropy, SSH and other cryptographic functions may fail.Note that the default LAN address of 192.168.1.1 is present on first boot.
Edit the network configuration to allow SSH access by writing these commands and pressing enter:
Now your VM should be accessible from SSH, user root (no password) address 192.168.56.2.
After you have logged in successfully, we can actually do the true configuration. For 22.03 and earlier, copy-paste the following block of code and press enter:
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
For 23.05 and later, copy-paste the following:
uci batch <<EOF
set network.mng=interface
set network.mng.device='br-lan'
set network.mng.proto='static'
set network.mng.ipaddr='192.168.56.2'
set network.mng.netmask='255.255.255.0'
set firewall.@zone[0].network='mng'
set firewall.@zone[0].name='mng'
delete network.lan
delete network.wan6
set network.wan=interface
set network.wan.device='eth1'
set network.wan.proto='dhcp'
EOF
now write uci changes to check if the setting configuration was loaded correctly. If you see the following on 22.03 and earlier (the network.mng entries MUST be the same as the ones shown here, the network.wan might be slightly different), everything went well
root@openwrt:~# 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'
For 23.03 and later, you should see
root@OpenWrt:~# uci changes
firewall.cfg02dc81.network='mng'
firewall.cfg02dc81.name='mng'
network.mng='interface'
network.mng.device='br-lan'
network.mng.proto='static'
network.mng.ipaddr='192.168.56.2'
network.mng.netmask='255.255.255.0'
-network.lan
-network.wan6
if all is well, save config with uci commit && reboot, if all is NOT well, write reboot to erase the temporary changes and find a way to set the above configuration manually.
close and open again the SSH terminal when the VM has restarted, with same connection parameters (user root and 192.168.56.2)
now you should have both internet access (try a opkg update) AND a management interface with a static address you can connect your SSH client program to even if your PC is disconnected from a local network.
the optional Bridged Adapter on Adapter 3 isn't crucial for basic functionality and is also specific for your own local network parameters. In my own network (and in most home networks) it will work fine for 22.03 and earlier if you write
uci batch <<EOF
set network.lan=interface
set network.lan.ifname='eth2'
set network.lan.proto='dhcp'
EOF
uci commit
and for 23.05 and later
uci batch <<EOF
set network.lan=interface
set network.lan.device='eth2'
set network.lan.proto='dhcp'
EOF
uci commit
service network restart
If you have more complex requirements you will have to set that up on your own by reading the documentation, or through luci.
you can now install packages to this images as normal, you will probably want to install luci, write opkg update && opkg install luci, then you can connect to the VM's luci by typing 192.168.56.2 in your browser address bar or click on this link to get there.
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
- [[https://github.com/onlyfang/VBoxVmService|VBoxVmService]] Windows Service to run VirtualBox VMs automatically