Configuring a second public floating IP address on a cloud server
Setup goal
Configure a second public floating IP address on a cloud server to access the server using two public IP addresses.
Requirements
For this setup, we used a cloud server created from a pre-built image of Ubuntu 24.04 LTS 64-bit.
The server is located in a private subnet 192.168.0.0/24 with a default gateway 192.168.0.1. The private IP address of the cloud server is 192.168.0.2.
The private subnet of the server is connected to a cloud router with internet access. The private IP address of the cloud router matches the gateway of the private subnet.
One public floating IP address 203.0.113.10.
Result
A second port has been added to the cloud server in the private subnet 192.168.0.0/24 with the IP address 192.168.0.3. To this port, a second public floating IP address 198.51.100.13 is connected. The server receives incoming traffic on both public floating IP addresses — the first one, 203.0.113.10, and the second one, 198.51.100.13.
Configuration steps
- Add a port to the private subnet.
- Create a public floating IP address.
- Connect the public floating IP address to the port in the private subnet.
- Edit the network configuration file of the cloud server.
- Optional: check internet access from and to the internet.
1. Add a port to the private subnet
Control panel
OpenStack CLI
- In the Control panel, click Products in the top menu and select Cloud Servers.
- Go to the Network section → Private networks tab.
- Open the network page → Ports tab.
- Click Add port.
- Select a subnet, for example —
192.168.0.0/24. - Enter the new private IP address of the port, for example —
192.168.0.3. - Select the cloud server to which you want to add the port.
- Click Add.
2. Create a public floating IP address
Create one public floating IP address in the same location as the cloud server.
Control panel
OpenStack CLI
- In the Control panel, on the top menu, click Products and select Cloud Servers.
- Go to the Network section → the Public Floating IPs tab.
- Click Create IP address.
- Select the location where the public floating IP address will be created.
- Specify the number of public floating IP addresses.
- Click Create.
3. Connect the public floating IP address to the port in the private subnet
Control panel
OpenStack CLI
- In the Control panel, click Products in the top menu and select Cloud Servers.
- Go to the Network section → Private networks tab.
- Open the network page → Ports tab.
- In the cloud server port card, click Public IP.
- Select the public floating IP address you created in step 2, for example —
198.51.100.13. - Click Connect.
4. Edit the network configuration file of the cloud server
For the server to accept traffic on both public floating IP addresses, you must configure a separate routing table for each network interface with routes and routing rules. A route determines the gateway for sending traffic, and a routing rule specifies which table to use when sending traffic from a specific private IP address.
-
Connect to the server using the first public floating IP address, for example —
203.0.113.10. -
If the cloud server is created from a cloud-init image, then upon server reboot, cloud-init automatically applies the network settings specified in the Control panel on the server page on the Ports tab. Any manual changes you have made to the server's network settings will not be saved.
To prevent network settings from being applied via the Control panel when the server reboots, disable network management via cloud-init:
echo "network: {config: disabled}" >> /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg -
Check the MAC address of the port you added in step 1. To do this, display information about the server network interfaces:
ip link show -
Open the
netplanconfiguration file using thevitext editor:vi /etc/netplan/50-cloud-init.yaml -
Change the
netplanconfiguration file:5.1. At the end of the block containing the data for the first network interface, add the following routes:
routes:- to: 0.0.0.0/0via: 192.168.0.1- to: 192.168.0.0/24table: 102- to: 0.0.0.0/0via: 192.168.0.1table: 102routing-policy:- from: 192.168.0.2/32table: 102Where:
0.0.0.0/0— the default subnet for sending internet traffic;192.168.0.1— the gateway of the cloud server's private subnet;192.168.0.0/24— the cloud server subnet with a/24mask;102— the routing table ID for the first interface, a unique number from 1 to 252;192.168.0.2/32— the private IP address of the cloud server with a/32mask.
5.2. After the block with the data for the first network interface, add the second network interface and the routes for it:
eth1:match:macaddress: 00:00:5e:00:53:01set-name: eth1addresses:- 192.168.0.3/24routes:- to: 192.168.0.0/24table: 103- to: 0.0.0.0/0via: 192.168.0.1table: 103routing-policy:- from: 192.168.0.3/32table: 103Where:
00:00:5e:00:53:01— the MAC address of the port you obtained in step 3;192.168.0.3/24— the private IP address of the cloud server with a/24mask;192.168.0.0/24— the cloud server subnet with a/24mask;103— the routing table ID for the second interface, a unique number from 1 to 252;0.0.0.0/0— the default subnet for sending internet traffic;192.168.0.1— the gateway of the cloud server's private subnet;192.168.0.3/32— the private IP address of the cloud server with a/32mask.
Example of a
netplanconfiguration filenetwork:version: 2renderer: networkdethernets:# Первый сетевой интерфейс with приватным IP-адресом 192.168.0.2eth0:match:macaddress: 00:00:5e:00:53:00set-name: eth0addresses:- 192.168.0.2/24nameservers:addresses:- 188.93.16.19- 188.93.17.19routes:# Маршрут по умолчанию- to: 0.0.0.0/0via: 192.168.0.1# Маршруты для таблицы маршрутизации 102- to: 192.168.0.0/24table: 102- to: 0.0.0.0/0via: 192.168.0.1table: 102# Исходящий трафик with 192.168.0.2 идет через таблицу маршрутизации 102routing-policy:- from: 192.168.0.2/32table: 102# Второй сетевой интерфейс with приватным IP-адресом 192.168.0.3eth1:match:macaddress: 00:00:5e:00:53:01set-name: eth1addresses:- 192.168.0.3/24# Маршруты для таблицы маршрутизации 103routes:- to: 192.168.0.0/24table: 103- to: 0.0.0.0/0via: 192.168.0.1table: 103# Исходящий трафик with 192.168.0.3 идет через таблицу маршрутизации 103routing-policy:- from: 192.168.0.3/32table: 103 -
Check the file syntax:
sudo netplan try -
Apply the settings:
sudo netplan apply
5. Optional: check internet access
-
Open the CLI.
-
Check the server's availability via the new public floating IP address:
ping 198.51.100.13Where
198.51.100.13is the public floating IP address you created in step 2. -
Connect to the server using any of the two public floating IP addresses of the server.
-
From the server, check the availability of any public IP address, for example:
ping 8.8.8.8