Can a network card have multiple IPs assigned to it?
The answer is absolutely yes! Some times, for example when you run several servers on a machine or when you need IP-based Apache virtualhosts, it is useful to bind a server or a virtualhost on its own IP address. I am not going to get into much detail on the pros and cons of virtual IPs, it would be pointless anyway since I am no pro, but here is how it is done.
Assigning a virtual IP to a NIC is a very easy task either you use the system-config-network tool or just do some text file editing. The script ifconfig can also be used to create a virtual network interface, but this would not be permanent since the changes ifconfig makes do not survive a reboot. In this post I’ll stick with the “manual” way…
In Fedora, all information about the network interfaces is kept in the following directories:
I assume that the default NIC configuration script is:
/etc/sysconfig/network-scripts/ifcfg-eth0. Mine looks like this:
DEVICE=eth0 BOOTPROTO=static BROADCAST=192.168.0.255 HWADDR=00:00:00:00:00:00 IPADDR=192.168.0.1 NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes TYPE=Ethernet GATEWAY=192.168.0.254
BOOTPROTO: sets the protocol that is used when the device is initialized. Since we use static IPs we set it to static.
HWADDR: is the MAC address of your network card. Do not change it. If this is missing in your configuration file, then don’t add it.
The rest of the options used are self-explanatory.
Make a copy of this in the same directory naming the new file ifcfg-eth0:1
# cp ifcfg-eth0 ifcfg-eth0\:1
eth0:1 is an alias of the eth0 interface. Now, let’s assign a different IP address to eth0:1. Other NIC aliases could be named eth0:2, eth0:3 etc. Fire up your favourite text editor and edit ifcfg-eth0:1. The modifications are shown in bold:
DEVICE=eth0:1 BOOTPROTO=static BROADCAST=192.168.0.255 HWADDR=00:00:00:00:00:00 IPADDR=192.168.0.101 NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes TYPE=Ethernet GATEWAY=192.168.0.254
So, its IP address will be 192.168.0.101. Save the file and copy it to /etc/sysconfig/networking/devices/:
# cp ifcfg-eth0\:1 /etc/sysconfig/networking/devices/
Also, copy it to your default network profile or whichever profile you use:
# cp ifcfg-eth0\:1 /etc/sysconfig/networking/profiles/default/
Now, bring up the new interface using the ifup script:
# ifup eth0\:1
Running ifconfig, the new interface should be listed. You can also check it by pinging:
# ping 192.168.0.101
You can now assign a host name on this virtual interface, by updating your local DNS server’s zone files or by adding it to the /etc/hosts files on all your LAN computers.