As we know Linux allows to assign almost unlimited number of IP addresses to its interfaces. Such additional IPs applied to the same NIC are known as secondary IP addresses or just secondaries. Some time ago i faced a problem on how to apply about 500 IP addresses to one Linux box and then ensure that all of them get online after Linux reboots. There are several ways to accomplish this taks so i would like to share them all.
Shell script with ifconfig commands
This is one of the most inefficient ways to get many IP addresses applied to one network interface. Anyways it allows to create as many aliases for the interface as you like so you should create shell script and execute it every time Linux boots.touch /path/to/script.sh chmod +x /path/to/script.sh vi /path/to/script.shNow you should add there shell lines which will apply IP addresses, e.g. the following one applies 60 IP addresses to eth0 interface:
for n in {3..63}; do ifconfig eth0:${n} 10.10.10.${n} netmask 255.255.255.0 up; doneIf you type ‘ifconfig’ now you will very long output like this one:
eth0:3 Link encap:Ethernet HWaddr 00:50:8D:D1:24:DB inet addr:10.10.10.3 Bcast:10.10.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x2000 eth0:4 Link encap:Ethernet HWaddr 00:50:8D:D1:24:DB inet addr:10.10.10.4 Bcast:10.10.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x2000 ... eth0:63 Link encap:Ethernet HWaddr 00:50:8D:D1:24:DB inet addr:10.10.10.63 Bcast:10.10.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x2000If you decide to delete those IPs you can run the following line as a remedy:
for n in {3..63}; do ifconfig eth0:${n} 0.0.0.0 &> /dev/null; doneOnce you finished editing /path/to/script.sh script you should add it to startup, so put the line /path/to/script.sh into /etc/rc.local file that Linux executes every time it boots. Please notice that in various distributions this file may be missing so consult with distro’s docs to get where it is stored.
Redhat/Centos/Fedora network scripts
Users of these Linux distributions can apply ranges of IP addresses using ifcfg-eth0-range0 files which are read during initialization of network interfaces during boot up process. The following example will make Linux to apply 200 IP addresses to eth1 during booting:[root ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth1-range0 IPADDR_START=192.168.1.1 IPADDR_END=192.168.1.200 CLONENUM_START=10CLONENUM_START value specifies starting identifier of alias that will be applied to eth1 interface, in above example the first 192.168.1.1 will be assigned to eth1:10 alias. The last IP of the range 192.168.1.200 will be applied to eth:210 sub-interface. This is totally easy approach.
Loopback interfaceDid you know that by one line presented below you assign 1022 virtual IP addresses to your Linux system? Here it is:
ifconfig lo:0 10.0.0.1/22Now you can make sure of this by pinging IPs from that range (10.0.0.1 – 10.0.3.254).
[root ~]#ping 10.0.0.1 -c 1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.063 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.063/0.063/0.063/0.000 ms ... [root ~]#[root@whitehorse /]# ping 10.0.3.254 -c 1 PING 10.0.0.1 (10.0.3.254) 56(84) bytes of data. 64 bytes from 10.0.3.254: icmp_seq=1 ttl=64 time=0.063 ms --- 10.0.3.254 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.063/0.063/0.063/0.000 msIf you still feel that the first suggested way meets your requirements better than the third one please read more about loopback interface at wikipedia — loopbacks are much more useful than aliases in most cases.
Hope it helps!