Example of configuring a second public floating IP address on a cloud server
Configuration goal
Configure a second public floating IP address on a cloud server to access the server via two public IP addresses.
What is needed for configuration
In the configuration example, 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 the default gateway 192.168.0.1. The cloud server private IP address is 192.168.0.2.
The server private subnet is connected to a cloud router with internet access. The private IP address of the cloud router is the same as the private subnet gateway.
One public floating IP address 203.0.113.10 is attached to the cloud server.
Configuration result
A second port in the private subnet 192.168.0.0/24 with IP address 192.168.0.3 is added to the cloud server. A second public floating IP address 198.51.100.13 is attached to this port. The server receives incoming traffic on both public floating IP addresses — the first 203.0.113.10 and the second 198.51.100.13.
Configuration steps
- Add a port to the private subnet.
- Create a public floating IP address.
- Attach the public floating IP address to the port in the private subnet.
- Edit the cloud server network configuration file.
- Optional: check access to and from the internet.
1. Add a port to the private subnet
Control panel
OpenStack CLI
- In the control panel, in the top menu, click Products and select Cloud servers.
- Go to Network → Private networks tab.
- Open the network page → Ports tab.
- Click Add port.
- Select a subnet, in the example —
192.168.0.0/24. - Enter a new private IP address for the port, in the example —
192.168.0.3. - Select the cloud server to which you need to add a 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, in the top menu, click Products and select Cloud servers.
- Go to Network → Private networks tab.
- Open the network page → Ports tab.
- On the cloud server port card, click Public IP.
- Select the public floating IP address you created in step 2, in the example —
198.51.100.13. - Click Attach.
4. Edit the cloud server network configuration file
For the server to accept traffic on both public floating IP addresses, a separate routing table with routes and routing rules must be configured for each network interface. A route defines the gateway for sending traffic, and a routing rule specifies which table to use for sending traffic from a specific private IP address.
-
Connect to the server using the first public floating IP address, in the example —
203.0.113.10. -
If the cloud server is created from an image with cloud-init, then when the server restarts, cloud-init automatically applies the network settings specified in the control panel on the server page on the Ports tab. The changes you made manually to the server network settings will not be saved.
To disable applying settings from the control panel upon server reboot, 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
netplanutility configuration file with thevitext editor:vi /etc/netplan/50-cloud-init.yaml -
Edit the
netplanutility configuration file:5.1. At the end of the block with the first network interface data, add 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— default subnet for sending internet traffic;192.168.0.1— gateway of the cloud server private subnet;192.168.0.0/24— cloud server subnet with the mask/24;102— routing table ID for the first interface, a unique number from 1 to 252;192.168.0.2/32— private IP address of the cloud server with the mask/32.
5.2. After the block with the first network interface data, add the second network interface and 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— MAC address of the port you obtained in step 3;192.168.0.3/24— private IP address of the cloud server with the mask/24;192.168.0.0/24— cloud server subnet with the mask/24;103— routing table ID for the second interface, a unique number from 1 to 252;0.0.0.0/0— default subnet for sending internet traffic;192.168.0.1— gateway of the cloud server private subnet;192.168.0.3/32— private IP address of the cloud server with the mask/32.
Example of the
netplanutility configuration filenetwork:version: 2renderer: networkdethernets:# First network interface with private IP address 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:# Default route- to: 0.0.0.0/0via: 192.168.0.1# Routes for routing table 102- to: 192.168.0.0/24table: 102- to: 0.0.0.0/0via: 192.168.0.1table: 102# Outbound traffic from 192.168.0.2 goes through routing table 102routing-policy:- from: 192.168.0.2/32table: 102# Second network interface with private IP address 192.168.0.3eth1:match:macaddress: 00:00:5e:00:53:01set-name: eth1addresses:- 192.168.0.3/24# Routes for routing table 103routes:- to: 192.168.0.0/24table: 103- to: 0.0.0.0/0via: 192.168.0.1table: 103# Outbound traffic from 192.168.0.3 goes through routing table 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 access to and from the internet
-
Open the CLI.
-
Check the server 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 either of the server's two public floating IP addresses.
-
From the server, check the availability of any public IP address, for example:
ping 8.8.8.8