> ## Content Index
> Fetch the complete content index at: https://snubmonkey.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Add Multiple IP Addresses into One Single Network Interface. (Server)
- URL: https://snubmonkey.com/how-to-add-multiple-ip-addresses-into-one-single-network-interface/
- Published: 2023-10-24T06:06:19.000Z
- Updated: 2025-04-16T22:31:04.000Z
- Description: Adding an additional; secondary or third IP is a thing to think of when you are a Linux system administrator. Some of you may be curious as to why we would allocate numerous IP addresses to a single network card...
- Author: Aleksandra Sloan
- Tags: how to 🪄, linux 🐧

The first reason is just because you can ..., and yes Ubuntu server allows you to add multiple virtual IP addresses on a single network interface card without having to buy an additional network adapter.   
  
Let's take the scenario where you are testing a Linux system and need two or more network cards.   
Would you purchase a new one?  
...  
..  
.  
No, ...not necessary.  
  
You may configure a network card with various IP series, such as *192.168.1.4*, *192.168.2.2*, *192.168.3.12*, *etc.*, and utilize each of them simultaneously.  
  
Sounds helpful? – Of course, it is!  
  
### **Permanently add an additional IP Address**  
  
Ubuntu uses the *Netplan utility* to configure networking.   
We will permanently add an additional IP address to our system by editing the file `/etc/netplan/50-cloud-init.yaml`.  

Let's find the IP address we are currently using:

```
$ ip addr  

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:32:xx:4x:x4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.93/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 xxzz::xxx:3xxf:fxx5:2xx7/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 10.8.0.1/24 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fxxx::xxx:cxxx:xxxx:axxx/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

```

  
As you see above, the IP address of my network card **eth0** is **192.168.1.19**.  
Now; what if we need to add another IP address, for example, **192.168.1.4**?

Let's take a look at our current *Netplan configuration* and apply the change.

```
$ sudo cat 50-cloud-init.yaml                                         
[sudo] password for snubmonkey: 

# This is the network config written by 'subiquity'
network:
  ethernets:
     eth0:
     dhcp4: no
     dhcp6: no
      addresses:
      - 192.168.1.93/24
      - 192.168.1.4/24 <<<
      routes:
       - to: default
         via: 192.168.1.1
      nameservers:
        addresses:
        - 9.9.9.9
        search:
        - 208.67.222.222, 1.0.0.1
  version: 2

```

  
Here’s a brief explanation of each parameter:

- **eth0**: A device name to be configured.
- **dhcp4**: Used to enable or disable dhcp4.
- **dhcp6**: Used to enable or disable dhcp6.
- **addresses**: The IP address of the device.
- **gateway4**: The IP address of your gateway.
- **nameservers**: The IP address of your DNS server.

Save and close the file when done.   
Enable the new configuration with the following command.

```
$ netplan apply

```

Restart the networking service.

```
$ sudo systemctl status systemd-networkd.service
```

  
Run the below command to check whether the new IP has been taken into account:

```
$ ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:ax brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.93/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.4/24 brd 192.168.1.255 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::xxxx:xxxx:fxx4:4xxx/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether xc:x6:3x:x4:4x:xx brd ff:ff:ff:ff:ff:ff
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 10.8.0.1/24 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::xbxx:cxxx:x4xx:ax7x/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever2

```

  
Let's double-check by pinging our new assignment address.  

`-a` : the system plays a sound when there is a response from a host. An audible ping is useful when you are troubleshooting network issues and do not want to look at the screen until there is a response.

`-c` : automatically stops after it sends a certain number of packets, use **`-c` ,** and a number. This sets the desired amount of ping requests.  

*ps: as we may have noticed we used the `ip addr` in favor of the `ifconfig` command to view the network interface and IP address.*

`ip addr` and `ip a` do the same.

###   
**BONUS** 
**Pros and cons of ip and ipconfig**  
  
Since it employs `Netlink` sockets rather than `ioctl` system calls, the `ip` command is more flexible and technically effective than the `ifconfig`.   
We will talk about this more in another of our *posts*; so stay tuned.

Here is an example:

```
$ ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.93  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 xxxx::xxxx:xxxx:xx1x:xxax  prefixlen 64  scopeid 0x20<link>
        ether dc:a6:32:14:4e:a7  txqueuelen 1000  (Ethernet)
        RX packets 9713030  bytes 6030523854 (6.0 GB)
        RX errors 0  dropped 89  overruns 0  frame 0
        TX packets 8998304  bytes 6420042303 (6.4 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

...
..
.

```
  
  
Have you spotted it?

Using `ifconfig` command does not allow us to see whether or not our NIC is bound to multiple IP addresses.