If you have a dedicated server with OVHcloud, you can purchase additional IPs, also known as "Fallback IPs", for your server. Because I have enough resources on my dedicated servers, I wanted to give/rent VPSes for my friends for them to use for their own projects, but I wanted to give them the real VPS experience, with a real external public IP that they can connect and use.
So I figured out how to bind an external IP to your LXD container/LXD VM! Although there are several online tutorials discussing this process, none of them worked for me until I stumbled upon this semi-unrelated OVHcloud guide that helped me go in the right direction.
First, launch the container/VM with lxc launch
root@divine-doge:/etc/netplan# lxc launch ubuntu:22.04 fallbackiptest
Creating fallbackiptest
Starting fallbackiptest
Add a macvlan
device to the container with lxc config device add fallbackiptest eth0 nic nictype=macvlan parent=YOUR_HOST_NETWORK_INTERFACE_HERE
.
Check your host's network interface name with ip a
. If you only have a single network interface, it will probably be enp1s0f0
.
root@divine-doge:/etc/netplan# lxc config device add fallbackiptest eth0 nic nictype=macvlan parent=enp1s0f0
Device eth0 added to fallbackiptest
Go to OVHcloud's Dashboard, go to the "Bare Metal Cloud" tab, click on the "IP" section, find your Additional IP, click on the three dots and click to "Add a virtual MAC".
On the popup, select ovh
as the type, and the name can be anything.
After the Virtual MAC is created, it will be shown in the "Virtual MAC" column, copy it.
Set the container's MAC address with lxc config set fallbackiptest volatile.eth0.hwaddr YOUR_VIRTUAL_MAC_HERE
root@divine-doge:/etc/netplan# lxc config set fallbackiptest volatile.eth0.hwaddr YOUR_VIRTUAL_MAC_HERE
Restart the container
root@divine-doge:/etc/netplan# lxc restart fallbackiptest
Now we'll need to configure the IP within the container, so let's connect to the container
root@divine-doge:/etc/netplan# lxc exec fallbackiptest bash
root@fallbackiptest:~#
Then open netplan's cloud init config
root@fallbackiptest:~# nano /etc/netplan/50-cloud-init.yaml
The default setting is this, if you are using a VM, the interface name may be enps5
or something different.
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
eth0:
dhcp4: true
Now we'll replace everything after the eth0:
section with the following:
addresses:
- YOUR_FALLBACK_IP_HERE/32
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
optional: true
routes:
- to: 0.0.0.0/0
via: YOUR_HOST_GATEWAY_IP_HERE
on-link: true
The YOUR_FALLBACK_IP_HERE
is the Additional IP that you've bought, and the YOUR_HOST_GATEWAY_IP_HERE
is your host's gateway IP that you can find in your dedicated server's OVHcloud dashboard, it always ends with .254
. It will look something like this:
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
eth0:
addresses:
- 123.123.123.123/32
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
optional: true
routes:
- to: 0.0.0.0/0
via: 200.200.200.254
on-link: true
After you are done, save the file by pressing CTRL+X, and now let's apply it! Apply the netplan config with netplan apply
.
root@fallbackiptest:~# netplan apply
I've noticed that sometimes netplan apply
complains saying that it needs to do a hard restart, but don't worry, it will work.
And then let's test it!
root@fallbackiptest:~# curl https://api.ipify.org/
HOPEFULLY_YOUR_FALLBACK_IP_WILL_BE_HERE
If your fallback IP is shown, then yay, you did it!
Now we need to tell cloud-init to not replace our custom settings, to do this, open /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
root@fallbackiptest:~# nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
And write the following into the file:
network: {config: disabled}
And that's it, have fun!