A method for assigning multiple IP addresses to a network card on CentOS 7

  • 2020-05-24 06:45:54
  • OfStack

Sometimes you may want to give more than one address to a network card. What should you do? Buy another network card to allocate addresses? You don't really have to do that in a small network. We can now assign multiple ip addresses to a network card in CentOS/RHEL 7. Want to know how to do it? Ok, follow me. It's not hard.

First, let's find the IP address of the network card. On my CentOS 7 server, I used only one nic.

Run the following command with the root privilege:


ip addr

Sample output:


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
    valid_lft forever preferred_lft forever

As seen above, my network card name is enp0s3 and my ip address is 192.168.1.150.

As you know, the network card configuration file is stored in the /etc/sysconfig/ network-scripts/directory. The details of each card will be stored under a different name, such as ifcfg-enp0s3.

Let's look at the details of ifcfg-enp0s3.


cat /etc/sysconfig/network-scripts/ifcfg-enp0s3

Sample output:


TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="e9f9caef-cb9e-4a19-aace-767c6ee6f849"
ONBOOT="yes"
HWADDR="08:00:27:80:63:19"
IPADDR0="192.168.1.150"
PREFIX0="24"
GATEWAY0="192.168.1.1"
DNS1="192.168.1.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"

Ok, now we will assign multiple addresses to the same subnet.

Edit file /etc/sysconfig/ network-scripts/ifcfg-enp0s3:


vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

Add the additional IP address as below.


TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0"
ONBOOT="yes"
HWADDR="08:00:27:3F:AB:68"
IPADDR0="192.168.1.150"
IPADDR1="192.168.1.151"
IPADDR2="192.168.1.152"
PREFIX0="24"
GATEWAY0="192.168.1.1"
DNS1="192.168.1.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"

As you can see, I have added two IP addresses: IPADDR1= "192.168.1.151". & IPADDR2 192.168.1.152 = ""

Similarly, you can add more ip addresses.

Finally, save and exit the file. Restart the network service for the changes to take effect.


systemctl restart network

Now, let's check that the ip address has been added.


ip addr

Sample output:


: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 08:00:27:3f:ab:68 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
    valid_lft forever preferred_lft forever
  inet 192.168.1.151/24 brd 192.168.1.255 scope global secondary enp0s3
    valid_lft forever preferred_lft forever
  inet 192.168.1.152/24 brd 192.168.1.255 scope global secondary enp0s3
    valid_lft forever preferred_lft forever
  inet6 fe80::a00:27ff:fe3f:ab68/64 scope link 
    valid_lft forever preferred_lft forever

As you can see, a single nic already has three ip addresses.

Let's add the IP address under ping1:


ping -c 4 192.168.1.151

Sample output:


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
    valid_lft forever preferred_lft forever
0

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
    valid_lft forever preferred_lft forever
1

Sample output:


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
    valid_lft forever preferred_lft forever
2

If you want to use a different subnet, you can change PREFIX0=24 to a different subnet, such as PREFIX1=16.

For example, I want to add an A class address (* such as 10.0.0.1) to my network card.


TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0"
ONBOOT="yes"
HWADDR="08:00:27:3F:AB:68"
IPADDR0="192.168.1.150"
IPADDR1="192.168.1.151"
IPADDR2="192.168.1.152"
IPADDR3="10.0.0.1"
PREFIX0="24"
PREFIX1=16
GATEWAY0="192.168.1.1"
DNS1="192.168.1.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"

You can see that I have added 1 A class address (10.0.0.1) and prefixed it with 16.

Save and exit the file. Restart the web service, then, ping's new address:


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
    valid_lft forever preferred_lft forever
4

Sample output:


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
    valid_lft forever preferred_lft forever
5

Similarly, you can add different gateways.


Related articles: