This comprehensive guide explains how to assign multiple IP addresses to a single network interface in Linux. This technique, often called IP aliasing or creating virtual interfaces, is useful in various scenarios, such as:

  • Hosting multiple websites on a single server.
  • Running multiple services that require dedicated IP addresses.
  • Testing network configurations.
  • Creating redundant network setups.

We will cover two methods: assigning individual virtual interfaces and assigning a range of IP addresses. This guide assumes you are using a static IP configuration for your server.

Scenario:

  • Current IP of the server: 10.130.18.11
  • Virtual IPs to be assigned: 10.130.18.22, 10.130.18.23, 10.130.18.24

Prerequisites:

  • Root or sudo privileges.
  • A Linux system with a network interface configured with a static IP address.
  • Basic understanding of Linux command-line interface.

Method 1: Assigning Individual Virtual Interfaces

This method involves creating separate configuration files for each virtual IP address.

Step 1: Navigate to the Network Scripts Directory

Open a terminal and navigate to the /etc/sysconfig/network-scripts/ directory:

cd /etc/sysconfig/network-scripts/

This directory contains the network interface configuration files.

Step 2: Verify Static IP Configuration

Before proceeding, ensure your primary network interface (e.g., eth0) is configured with a static IP address. Examine the contents of the ifcfg-eth0 file.

sudo vim ifcfg-eth0

The file should contain lines similar to the following (adjust values to match your network):

DEVICE="eth0"
BOOTPROTO=static
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Ethernet"
IPADDR=10.130.18.11
NETMASK=255.255.255.192
GATEWAY=10.138.18.1
DNS1=8.8.8.8
DNS2=8.8.4.4
HWADDR=A0:0C:29:28:A7:4C

Key Parameters Explained:

  • DEVICE: The name of the network interface (e.g., eth0).
  • BOOTPROTO=static: Specifies a static IP configuration.
  • ONBOOT=yes: Enables the interface at boot time.
  • IPADDR: The static IP address assigned to the interface.
  • NETMASK: The network mask.
  • GATEWAY: The default gateway.
  • DNS1, DNS2: DNS server addresses.
  • HWADDR: The MAC address of the interface. This should not be changed in the virtual interface configurations.

Step 3: Create Virtual Interface Configuration Files

Create copies of the ifcfg-eth0 file for each virtual interface, naming them ifcfg-eth0:0, ifcfg-eth0:1, and ifcfg-eth0:2 corresponding to the desired virtual IPs.

sudo cp ifcfg-eth0 ifcfg-eth0:0
sudo cp ifcfg-eth0 ifcfg-eth0:1
sudo cp ifcfg-eth0 ifcfg-eth0:2

Step 4: Configure Virtual Interface Files

Edit each of the copied files to assign the virtual IP addresses. The key changes are the DEVICE and IPADDR parameters.

ifcfg-eth0:0 Configuration

sudo vim ifcfg-eth0:0
DEVICE="eth0:0"
BOOTPROTO=static
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Ethernet"
IPADDR=10.130.18.22
NETMASK=255.255.255.192
GATEWAY=10.138.18.1
HWADDR=A0:0C:29:28:A7:4C

ifcfg-eth0:1 Configuration

sudo vim ifcfg-eth0:1
DEVICE="eth0:1"
BOOTPROTO=static
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Ethernet"
IPADDR=10.130.18.23
NETMASK=255.255.255.192
GATEWAY=10.138.18.1
HWADDR=A0:0C:29:28:A7:4C

ifcfg-eth0:2 Configuration

sudo vim ifcfg-eth0:2
DEVICE="eth0:2"
BOOTPROTO=static
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Ethernet"
IPADDR=10.130.18.24
NETMASK=255.255.255.192
GATEWAY=10.138.18.1
HWADDR=A0:0C:29:28:A7:4C

Important:

  • Ensure that the DEVICE parameter is set correctly (e.g., “eth0:0”, “eth0:1”, etc.).
  • The IPADDR parameter should be set to the desired virtual IP address.
  • The NETMASK and GATEWAY parameters should match the configuration of your primary interface.
  • The HWADDR (MAC address) should remain the same as the primary interface. Changing this can cause network issues.

Step 5: Restart the Network Service

Apply the changes by restarting the network service:

sudo /etc/init.d/network restart

Note: The command to restart the network service might vary depending on your Linux distribution. Common alternatives include:

  • sudo systemctl restart network
  • sudo systemctl restart networking

Step 6: Verify the Configuration

Use the ifconfig command to verify that the virtual interfaces have been created and assigned the correct IP addresses:

ifconfig

The output should show eth0 along with eth0:0, eth0:1, and eth0:2, each with its respective IP address.

eth0      Link encap:Ethernet  HWaddr A0:0C:29:28:A7:4C
          inet addr:10.130.18.11  Bcast:10.130.18.63  Mask:255.255.255.192
          inet6 addr: fe80::a2d3:c1ff:fef9:d8dc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:74 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6687 (6.5 KiB)  TX bytes:10366 (10.1 KiB)
          Interrupt:32

eth0:0    Link encap:Ethernet  HWaddr A0:0C:29:28:A7:4C
          inet addr:10.130.18.22  Bcast:10.130.18.63  Mask:255.255.255.192
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:32

eth0:1    Link encap:Ethernet  HWaddr A0:0C:29:28:A7:4C
          inet addr:10.130.18.23  Bcast:10.130.18.63  Mask:255.255.255.192
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:32

eth0:2    Link encap:Ethernet  HWaddr A0:0C:29:28:A7:4C
          inet addr:10.130.18.24  Bcast:10.130.18.63  Mask:255.255.255.192
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:32

Step 7: Test Connectivity

Ping each of the IP addresses to verify connectivity:

ping 10.130.18.11
ping 10.130.18.22
ping 10.130.18.23
ping 10.130.18.24

Method 2: Assigning an IP Address Range

This method is convenient when you need to assign a contiguous range of IP addresses to an interface.

Step 1: Navigate to the Network Scripts Directory

cd /etc/sysconfig/network-scripts/

Step 2: Copy the Existing ifcfg-eth0 File

Create a copy of the ifcfg-eth0 file and name it ifcfg-eth0-range0:

sudo cp -p ifcfg-eth0 ifcfg-eth0-range0

The -p option preserves the original file’s permissions and timestamps.

Step 3: Edit the ifcfg-eth0-range0 File

Open the ifcfg-eth0-range0 file and modify it as follows:

sudo vim ifcfg-eth0-range0
# DEVICE="eth0"
# BOOTPROTO=static
# NM_CONTROLLED="no"
# ONBOOT=yes
TYPE="Ethernet"
IPADDR_START=10.130.18.22
IPADDR_END=10.130.18.24
IPV6INIT=no

Key Changes:

  • Comment out the original DEVICE, BOOTPROTO, NM_CONTROLLED, and ONBOOT lines using a # at the beginning of the line. This prevents conflicts with the primary interface configuration.
  • Add IPADDR_START and IPADDR_END lines, specifying the beginning and ending IP addresses of the range.
  • IPV6INIT=no disables IPv6 initialization on the range, preventing potential conflicts.

Step 4: Restart the Network Service

Restart the network service to apply the changes:

sudo /etc/init.d/network restart

Step 5: Verify the Configuration

Use the ifconfig command to verify that the virtual interfaces have been created:

ifconfig

The output should be similar to the output in Method 1, showing eth0 and the virtual interfaces eth0:0, eth0:1, and eth0:2 with their assigned IP addresses.

Troubleshooting

  • Network Service Fails to Restart: Check the syntax of your configuration files for errors. Use the journalctl command to view system logs for more detailed error messages.
  • Virtual Interfaces Not Created: Ensure that the ONBOOT=yes parameter is set in the virtual interface configuration files. Also, double-check the file names and syntax.
  • Connectivity Issues: Verify that the NETMASK and GATEWAY parameters are correctly configured. Check your firewall rules to ensure that traffic to the virtual IP addresses is allowed.

Conclusion

This guide provided two methods for configuring multiple IP addresses on a single network interface in Linux. Choose the method that best suits your needs and network environment. Remember to test your configuration thoroughly after making changes to ensure proper connectivity.

Additional Resources