Skip to content

CHR: Installing on Hyper-V

This guide covers deploying RouterOS Cloud Hosted Router (CHR) on Microsoft Hyper-V using the VHDX disk image. CHR is supported on Windows Server 2008 R2, 2012, 2019, and Windows 10/11 Hyper-V.

CHR on Hyper-V supports Generation 1 VMs only. Generation 2 VMs use UEFI secure boot and a different virtual hardware model that is not compatible with CHR.

  • Windows Server with Hyper-V role installed, or Windows 10/11 Pro/Enterprise with Hyper-V feature enabled
  • At least 256MB RAM and 128MB disk space available
  • VHDX disk image downloaded from MikroTik

If Hyper-V is not yet enabled:

  1. Open Control Panel → Programs → Turn Windows features on or off
  2. Check Hyper-V (both Management Tools and Platform)
  3. Click OK and restart when prompted

Or enable via PowerShell:

Terminal window
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Restart-Computer
  1. Visit the MikroTik download page
  2. Select the Cloud Hosted Router section
  3. Download the Hyper-V disk image (.vhdx file)
  1. Open Hyper-V Manager
  2. In the Actions panel, click New → Virtual Machine
  3. Click Next to begin the wizard

Specify Name and Location:

  • Enter a name (e.g., CHR)
  • Click Next

Specify Generation:

  • Select Generation 1 ← Required for CHR
  • Click Next

Assign Memory:

  • Set Startup memory to at least 1024 MB
  • Uncheck Use Dynamic Memory for predictable performance
  • Click Next

Configure Networking:

  • Select your virtual switch from the dropdown
  • Click Next

Connect Virtual Hard Disk:

  • Select Use an existing virtual hard disk
  • Browse to the downloaded .vhdx file
  • Click Next → Finish
Terminal window
# Variables
$VMName = "CHR"
$VHDXPath = "C:\Hyper-V\VHDs\chr-7.x.vhdx"
$SwitchName = "Default Switch"
# Create the VM (Generation 1)
New-VM -Name $VMName `
-MemoryStartupBytes 1GB `
-Generation 1 `
-VHDPath $VHDXPath `
-SwitchName $SwitchName
# Set vCPU count
Set-VMProcessor -VMName $VMName -Count 2
# Disable dynamic memory for stability
Set-VMMemory -VMName $VMName -DynamicMemoryEnabled $false
# Start the VM
Start-VM -Name $VMName

Hyper-V offers two NIC types for CHR:

Adapter TypePerformanceNotes
Network AdapterBetterSynthetic; requires integration services
Legacy Network AdapterLowerEmulated; works without integration services

CHR works with both adapter types. The Network Adapter (synthetic) is preferred for performance. If CHR does not detect interfaces at boot, try switching to Legacy Network Adapter.

The system disk must use the IDE controller. SCSI is supported only for secondary/data disks in Generation 1 VMs.

Terminal window
# Add a second network adapter
Add-VMNetworkAdapter -VMName "CHR" -SwitchName "Internal Switch"
# Add a legacy network adapter if needed
Add-VMNetworkAdapter -VMName "CHR" -SwitchName "External Switch" -IsLegacy $true

Open the VM console in Hyper-V Manager (Connect) and log in:

Username: admin
Password: (empty — press Enter)

Perform initial setup:

# Set admin password
/user set admin password=StrongPassword123!
# Verify interfaces
/interface print
# Assign IP address
/ip address add address=192.168.88.1/24 interface=ether1
# Add default route
/ip route add dst-address=0.0.0.0/0 gateway=192.168.88.254
# Configure DNS
/ip dns set servers=1.1.1.1,8.8.8.8
# Enable SSH
/ip service enable ssh

For VLAN-tagged traffic on Hyper-V, you must enable trunk mode on the virtual switch port via PowerShell. Hyper-V Manager GUI does not expose all VLAN trunking options.

Terminal window
# Allow all VLANs on the adapter (trunk mode)
Set-VMNetworkAdapterVlan -VMName "CHR" `
-VMNetworkAdapterName "Network Adapter" `
-Trunk `
-AllowedVlanIdList "1-4094" `
-NativeVlanId 1

Inside RouterOS, configure VLAN filtering:

/interface bridge add name=br-trunk vlan-filtering=yes
/interface bridge port add bridge=br-trunk interface=ether1
/interface bridge vlan add bridge=br-trunk vlan-ids=10 tagged=br-trunk,ether1
/interface bridge vlan add bridge=br-trunk vlan-ids=20 tagged=br-trunk,ether1
Terminal window
# Set a specific access VLAN on the adapter
Set-VMNetworkAdapterVlan -VMName "CHR" `
-VMNetworkAdapterName "Network Adapter" `
-Access `
-VlanId 10

CHR can be cloned from a snapshot or exported/imported. After cloning, generate a new system ID before requesting a license:

/system license generate-new-id

Clones are aware of any previous trial period on the original. You cannot extend trial time through cloning. Always generate a new ID on cloned instances before licensing.

If CHR boots but shows no interfaces:

  1. Verify the VM is Generation 1
  2. In Hyper-V Manager, stop the VM
  3. Remove the Network Adapter and add a Legacy Network Adapter instead
  4. Restart the VM

Ensure the VHDX is attached to an IDE controller in the VM settings:

  1. In Hyper-V Manager, right-click the VM and select Settings
  2. Under IDE Controller 0, verify the VHDX is attached
  3. If attached under SCSI, move it to IDE Controller 0

Switch from Legacy Network Adapter to synthetic Network Adapter and ensure the virtual switch has appropriate bandwidth limits removed.