Skip to main content

What is Multipass?

Multipass is a lightweight VM manager that lets you create and manage Ubuntu virtual machines on your local machine. It provides a simple CLI to launch, configure, and manage VMs without the overhead of traditional virtualization solutions.

Installation

You can install Multipass on Windows in two ways: Manual installer — download from the official Windows download page and run the installer. Microsoft Store — search for Multipass in the Microsoft Store and install directly.
Based on real-world experience, Multipass on Windows can consume significant CPU resources — particularly the multipassd process. Consider this before deploying it in resource-constrained environments.

Known Issues on Windows

  • Unable to launch instances with the default Hyper-V backend — switching to VirtualBox resolves this.
  • Cannot shell, SSH, or exec into a VM instance when connected to a VPN (e.g. Cisco GlobalProtect). Routing VPN traffic from host to VM via route add may not work without IT team involvement.
  • Cannot ping the VM instance IP from the host machine while on VPN.

Setting Up a VM Instance

The goal is to create a VM that supports port-forwarding to the host machine, even over a VPN network.
1
Install VirtualBox and PsTools
2
Download and install VirtualBox. Make sure to install the VirtualBox driver as Administrator.
3
Download PsTools and add the PsTools directory to your system PATH. PsTools is needed to interact with VirtualBox GUI because Multipass runs as the System account.
4
Switch to the VirtualBox Driver
5
By default, Multipass uses Hyper-V on Windows. Switch to VirtualBox:
6
multipass set local.driver=virtualbox
7
If you see a Waiting for Daemon to start error, force-kill the service using PowerShell (as Administrator):
Get-WmiObject win32_service | Where-Object { $_.Name -eq "Multipass" } | Select-Object ProcessId
Stop-Process -Id <PID> -Force
See Multipass Service Stuck on Windows for full details.
8
Set a Bridged Network
9
A bridged network allows the VM to obtain an IP on the same segment as the host. First, list available network interfaces:
10
multipass networks
11
Sample output:
12
Name         Type       Description
Ethernet 5   ethernet   Lenovo USB Ethernet
Wi-Fi        wifi       Intel(R) Wi-Fi 6 AX201 160MHz
13
Set the interface you use to connect to the internet:
14
multipass set local.bridged-network="Wi-Fi"
15
Launch a VM Instance
16
Make sure the bridged network is configured before launching.
17
Without SSH setup:
18
multipass launch --bridged --name primary
19
With SSH setup (using cloud-init):
20
Generate an SSH key pair:
21
ssh-keygen -C karchunt -f multipass-ssh-key
22
Copy the public key from C:\Users\<user>\.ssh\multipass-ssh-key.pub, then create a cloud-init config:
23
users:
  - default
  - name: karchunt
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - <Your Public Key>
24
Launch with the config:
25
multipass launch --bridged --name primary --cloud-init cloud-init.yaml
26
Access the VM Instance
27
Use multipass shell or multipass exec:
28
multipass shell primary
multipass exec primary -- bash
29
For SSH access over VPN, direct SSH to the VM IP will not work. Instead, use port-forwarding through localhost. To inspect or configure port-forwarding rules, launch the VirtualBox GUI via PsTools (run as Administrator):
30
PsExec -s -i $env:VBOX_MSI_INSTALL_PATH\VirtualBox.exe
31
Navigate to Settings > Network > NAT Adapter Network > Port Forwarding, then connect via SSH:
32
ssh karchunt@localhost -i "C:\Users\karchunt\.ssh\multipass-ssh-key" -o StrictHostKeyChecking=no -p 56041
33
When inside the VM on a VPN network, curl requests may fail even if VPN traffic is not routed to the VM. Export proxy environment variables as needed:
export http_proxy=...
export https_proxy=...
export no_proxy=...
34
(Optional) Launch a Web Server and Port-Forward
35
Start a simple HTTP server inside the VM:
36
multipass shell primary
python3 -m http.server  # exposes port 8000
37
Forward port 8000 from host to VM using PsTools:
38
PsExec -s $env:VBOX_MSI_INSTALL_PATH\VBoxManage.exe controlvm "primary" natpf1 "myservice,tcp,,8000,,8000"
39
Access the server from the host at http://localhost:8000.
40
For more on VirtualBox port-forwarding, see the VirtualBox NAT documentation.

Build docs developers (and LLMs) love