Multiple IP Addresses on Single Interface

Nov 2023

Introduction

There are occasions where we might want to assign multiple network addresses to a single interface on a server. This might be because you want to talk to another network where no routing exists, or you might want to assign a second address to a server where the main IP Address cannot be changed (maybe changing the primary management address will break the unit).
This article is written with the assumption that you are using on prem hardware, not sure if this has any suitability in cloud environments.
There are a couple of methods we can discuss here, there is what I would call a quick and dirty method, that has some limitations, and there is a better method of doing this, it takes a little more work, but it worth the effort in the long run.

Quick and Dirty Method

If you just need a second IP Address because the existing one is not suitable (and cannot be changed because maybe it will break the software) then you can use this method.
Lets look at an existing configuration for the first interface, which is normally the management interface on eno1 (or eth0 for CentOS if you have used the MediaKind ISO for OS install).
In Alma/CentOS/RedHat the interface configuration files are stored in /etc/sysconfig/network-scripts. In this example there are two interfaces, eno1 and eno2. eno1 is for management and eno2 is for data.
If we look at the interface configuration, we can see the IP Addresses available on each interface.

ip -br -c a
lo UNKNOWN 127.0.0.1/8
eno1 UP 192.168.1.223/24
eno2 UP 11.0.223.2/16

We can see that the interface eno1 currently has a single IP Address of
192.168.1.233. However, lets assume that we want to add an additional
IP Address of 10.32.13.233.
Here is the current configuration of eno1 where we only have a single IP Address of this interface.

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno1
UUID=ca90417f-9df9-4f34-bae5-77aa6531cc00
DEVICE=eno1
ONBOOT=yes
IPADDR=192.168.1.223
PREFIX=24
GATEWAY=192.168.1.1
PREFIX1=24
DNS=8.8.8.8

We can edit this file and simply add another address to this interface, if we edit this file we can add these lines to the ifcfg-eno1 file:

IPADDR1=10.32.13.223
PREFIX1=24
DNS1=8.8.4.4 (this line is not required, it just shows we can add another DNS setting.

Below is the edited ifcfg-eno1 configuration file with the additional lines (in Blue).
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno1
UUID=ca90417f-9df9-4f34-bae5-77aa6531cc00
DEVICE=eno1
ONBOOT=yes
IPADDR=192.168.1.223
PREFIX=24
GATEWAY=192.168.1.1
PREFIX1=24
DNS=8.8.8.8
IPADDR1=10.32.13.223
PREFIX1=24
DNS1=8.8.4.4
If we look at the interface details in the OS now we can see the following IP Addresses.

eno1 UP 192.168.1.223/24 10.32.13.223/24

We can see that the interface has two IP Addresses. The big issue with this method is the Gateway, the first IP Address has the gateway (192.168.1.1) where as the 10.32.13.233 has no gateway. We could change the gateway to accommodate the new additional IP, but I don't believe you can have two gateways. I have not tried to add a second gateway, but I believe that method two would be preferential as this is really a quick method.

The Better Method

The better method requires using multiple configuration files for a single interface. This method has a couple of advantages, it simplifies adding addresses and allows for multiple gateways to be used.