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.sh
Now 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; done
If 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:0x2000
If 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; done
Once 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=10
CLONENUM_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 interface
Did 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/22
Now 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 ms
No comments:
Post a Comment