This page is no longer maintained. Please refer to How to create an instance - Create an instance with multiple network interfaces.
[since version 1.6.0]
Multipass can launch
instances with additional network interfaces, via the --network
option. That is complemented by the networks
command, to find available host networks to bridge with.
This is supported only for images with cloud-init support for Version 2 network config, which in turn requires netplan to be installed (inside the instance). So, from 17.10 and core 16 onward, except for snapcraft:core16
. And then only in the following scenarios:
- on Linux, with LXD
- on Windows, with both Hyper-V and VirtualBox
- on macOS, with both QEMU and VirtualBox
Contents:
Network specification
The --network
option can be given multiple times, each one requesting an additional network interface (beyond the default one, which is always present). Each use takes an argument specifying the properties of the desired interface:
name
— the only required value, it identifies the host network to connect the instance’s device to (seenetworks
for possible values)mode
— eitherauto
(the default) ormanual
; withauto
, the instance will attempt automatic network configurationmac
— a custom MAC address to use for the device
These properties can be specified in the format <key>=<value>,…
. but a simpler form with only <name>
is available for the most common use-case. Here is an example:
$ multipass launch --network en0 --network name=bridge0,mode=manual
Launched: upbeat-whipsnake
$ multipass exec upbeat-whipsnake -- ip -br address show scope global
enp0s3 UP 10.0.2.15/24
enp0s8 UP 192.168.1.146/24
enp0s9 DOWN
$ ping -c1 192.168.1.146 # elsewhere in the same network
PING 192.168.1.146 (192.168.1.146): 56 data bytes
64 bytes from 192.168.1.146: icmp_seq=0 ttl=64 time=0.378 ms
[...]
In the example above, we got the following interfaces inside the instance:
enp0s3
— the default interface, that the instance can use to reach the outside world and which Multipass uses to communicate with the instance;enp0s8
— the interface that is connected toen0
on the host and which is automatically configured;enp0s9
— the interface that is connected tobridge0
on the host, ready for manual configuration.
Routing
Extra interfaces are configured with a higher metric (200) than the default one (100). So, by default the instance will only route through them if they’re a better match for the destination IP:
$ multipass exec upbeat-whipsnake -- ip route
default via 10.0.2.2 dev enp0s3 proto dhcp src 10.0.2.15 metric 100
default via 192.168.1.1 dev enp0s8 proto dhcp src 192.168.1.146 metric 200
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15
10.0.2.2 dev enp0s3 proto dhcp scope link src 10.0.2.15 metric 100
192.168.1.0/24 dev enp0s8 proto kernel scope link src 192.168.1.146
192.168.1.1 dev enp0s8 proto dhcp scope link src 192.168.1.146 metric 200
$ multipass exec upbeat-whipsnake -- ip route get 91.189.88.181
91.189.88.181 via 10.0.2.2 dev enp0s3 src 10.0.2.15 uid 1000
cache
$ multipass exec upbeat-whipsnake -- ip route get 192.168.1.13
192.168.1.13 dev enp0s8 src 192.168.1.146 uid 1000
cache
Bridging
Connecting to a host network is done by creating a bridge to it. Although we will not get into details in this document, it is important to remark that each platform has a different behavior under the hood that Multipass hides. However, there are some differences between platforms.
WiFi
When bridging a new MAC address is generated. Unfortunately, most access points will reject packets with a MAC address different to that used for authentication. macOS solves this problem at low level, but it is not possible to bridge WiFi networks on Linux and Windows at the moment. That is the reason why some of the network adapters are not listed in multipass networks
.
Bridging request
On Linux and Windows, when trying to connect an instance network to an Ethernet device on the host, Multipass will offer to create the required bridge:
$ multipass networks
Name Type Description
eth0 ethernet Ethernet device
lxdbr0 bridge Network bridge
mpbr0 bridge Network bridge for Multipass
virbr0 bridge Network bridge
$ multipass launch --network eth0
Multipass needs to create a bridge to connect to eth0.
This will temporarily disrupt connectivity on that interface.
Do you want to continue (yes/no)?
On Linux, Multipass requires NetworkManager
to achieve this. On installations that do not have NetworkManager
installed (e.g. Ubuntu Server), the user can still create a bridge by other means and pass that to Multipass. For instance, this configuration snippet achieves that with netplan
:
bridges:
mybridge:
dhcp4: true
interfaces:
- eth0
That goes somewhere in /etc/netplan/
(e.g. /etc/netplan/50-custom.yaml
). After a successful netplan try
or netplan apply
, Multipass will show the new bridge with the networks
command and instances can be connected to it:
multipass launch --network mybridge
Another option is to install NetworkManager
, but other network handlers need to be deactivated to avoid conflicts and make the new bridges permanent.
Specifying a default interface
[since version 1.7.0]
In case the same interface needs to be used many times across successive launchs, a shortcut can be used, via the settings interface. For example, to use the interface eth0
as default bridging interface, it must be specified with:
multipass set local.bridged-network=eth0
Then, the default can be used at launch with
multipass launch --bridged
or
multipass launch --network bridged
These two commands are exactly the same as multipass launch --network name=eth0
.