VirtualBox on Azure VM for testing or run Old apps

VirtualBox on Azure VM for testing or run Old apps

This article is about testing VirtualBox on Azure VM, the open-ource virtualization platform of Oracle. For the official nested virtualization support in Microsoft Azure please use the Nested Virtualization feature. You can find more info at my post serries about Nested Virtualization here: https://www.e-apostolidis.gr/tag/nested-virtualization/

Virtualization has great interest and value to the information systems ecosystem. As a sence, Virtualization, refers to running two or more operating systems one one physical PC. Either the multiple operating systems run side-by-side, with a separate piece of software called a hypervisor used to manage them, or one operating system runs the other operating systems within program windows. The former is usually limited to servers, with the latter finding common use on desktop computers.

Microsoft Azure offers virtualization layer access at the following series Virtual Machines:

D_v3
Ds_v3
E_v3
Es_v3
F2s_v2
M 160

You can find out excactly the VM sizes that supports Virtualization at the official documentation: https://docs.microsoft.com/en-us/azure/virtual-machines/acu

Why VM virtualization on Azure?

Virtualization allows to run Old Applications, that need Operating Systems that are not officialy supported on Azure. If you have an old app that is preventing your jurney to Microsoft Azure then you can transfer your old machine that runs this application directly on Azure. Of cource you can use it for testing purposes!

Step by Step Guide

For my test I am using a Standard D2s v3 (2 vcpus, 8 GiB memory) Azure VM running Windows Server 2012 R2, as it is the most ligh Windows OS to run virtualization on Azure. You can also use Windows 10, WIndows Server 2016 & WIndows Server 2019.

Download the latest VirtualBox from the Official site, https://www.virtualbox.org/, currently 6.1

Install it with all default settings. Press yes at the Network Interfaces warning and proceed.

After the installation open the VirtualBox interface. You can add a previous created Virtual Machine from your on-premises VM, or you can create a New one.

For my test I downloaded a Windows Server 2003 Standard x86 image from my Visual Studio Subscription. Yes you can still download official Windows Server 2003 🙂

Create a new VirtualBox Virtual Machine, and select Microsoft Windows 2003 32-bit. I provided 4096 GB Ram, since it is 32-bit.

My VMs Hardware details:

Open the VM and at the “Optical Disk Selector” promt press Add and select the OS iso

And a tear droped… Windows Server 2003 setup screen, on a Virtual Machine on Azure… That runs Windows Server 2012 R2…

Networking

VirtualBox has already created a new Network Interface Card to use for the VirtualBox Virtual Machines.

You will see two IP configuration. The Ethernet adapter “Ehternet” shows the IP address of the Azure VM and the “VirtualBox Host-Only Network” shows the IP subnet that will be used for the nested VMs

Since we are inside an Azure Virtual Machine we need to use Network Address Translation to forward the traffic inside our VM. This will allow you to conenct directly to the VirtualBox VM directly from internet. This can be used for publishing a Web Service, Web Site, RDP or any other service that needs to be published from the VirtualBox nested VM.

To manage the Port Forwarding from the Host VM (Azure VM) to the Guest VM (VirtualBox VM) open the VirtualBox Preferences and go to Network

Add an Interface, add a Nertwork CIDR (the network subnet that you want the guest VMs to have) and press Port Forwarding

Now, close the VirtualBox preferences and open the VM settings and go to Network. At the Adapter 1 go select “NAT Network” and select the “NATNetwork”

After this close the VM’s settings and login to the VM. Check the IP configuration (for windows use the cms ipconfig) and you will see that the VM has been assigned an IP from the 172.16.1.0/24 range that we added at the VirtualBox NAT network. My VM has the 172.16.1.4 IP address. Note this.

Lets go back to the VirtualBox Preferences -> Network -> Edit the NatNetwork -> Port Forwarding and add a rule to forward the 443 port from the Host VM (Azure VM) to the Guest VM (VirtualBox VM).

in my example I use Prt Forward for HTTP, HTTPS & RDP. I forward HTTP & HTTPS directly but since the RDP port 3389 is already used by the Azure VM, I use 43389 Port from Azure VM to the 3389 port of the Guest VM.

Those are my rules:

There are three places that you need to open the spesified ports in order to allow the conenction to reach the VirtualBox VM. Below I will go trough the process of opening the HTTPS port 443. The same is for all other ports.

  1. Azure Network Security Group (NSG)
  2. Azure VM Windows Firewall
  3. VirtualBox VM Windows Firewall

1. Go to the Azure Portal, find the Network Security Group that protects the Public IP of the Azure VM and add an inbound security rule to allow access from Any source, any port, to the IP address of the Azure VM that hosts the VirutalBox and destination port 443 (for the HTTPS Web Service)

2. At the Azure VM open the Windows Firewall and add an inbound rule to allow port 443 any to any.

3. At the VirtualBox VM open the Windows Firewall and add an exception for Port 443

To test the conenctivity I just added the Application server role at my VirtualBox VM. This will publish the default IIS web page

Once the web server is ready, from my laptop I try to access the web page, usign the Public IP address of the Azure VM using https using my browser

https://104.214.233.164/

The “Under Construction” default page of Windows Server 2003 IIS

Share

One comment

  1. Hi,

    Searching on the web on this topic and seeing this post written pro made me feel that all the burden have been relieved from my shoulders, yet, I am still stuck when running a Win 7 iso image on Windows 10 pro on D_v3 series ( as seen that it supports nested Virtualization) managed on Azure, I am getting this error when STARTING it
    {timestamp} HM: HMR3Init: Attempting fall back to NEM: VT-x is not available
    {timestamp} NEM: WHvCapabilityCodeHypervisorPresent is TRUE, so this might work….

    I tried as well to run Windows 7 image on the same managed Win 10 VM on Hyper-V. with no luck

    Appreciate your feedback if I am missing something.

    Regards,
    Ayman

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.