Linux bond or team multiple network interfaces (NIC)into single interface

Finally today I had implemented NIC bounding (bind bothNIC so that it works as a single device). We have two Dell servers that needsetup with Intel Dual Gig NIC. My idea is to improve performance by pumping outmore data from both NIC without using any other method.

This box act as heavy duty ftp server. Each night I needto transfer over 200GB data from this box to another box. Therefore, thenetwork would be setup is two servers on a switch using dual network cards. Iam using Red Hat enterprise Linux version 4.0.

Linux allowsbinding multiple network interfaces into a single channel/NIC using specialkernel module called bonding. According to official bonding documentation, "The Linux bonding driverprovides a method for aggregating multiple network interfaces into a singlelogical "bonded" interface. The behavior of the bonded interfacesdepends upon the mode; generally speaking, modes provide either hot standby orload balancing services. Additionally, link integrity monitoring may beperformed."

Setting up bounding is easy with RHEL v4.0.

Step #1: Create a bond0 configuration file

Red Hat Linuxstores network configuration in /etc/sysconfig/network-scripts/ directory.

First, you needto create bond0 config file:
# vi/etc/sysconfig/network-scripts/ifcfg-bond0

Append followinglines to it:DEVICE=bond0
IPADDR=192.168.1.20
NETWORK=192.168.1.0
NETMASK=255.255.255.0
USERCTL=no
BOOTPROTO=none
ONBOOT=yes

Replace above IPaddress with your actual IP address. Save file and exit to shell prompt.

Step #2: Modify eth0 and eth1 config files:

Open bothconfiguration using vi text editor and make sure file read as follows for eth0interface

# vi/etc/sysconfig/network-scripts/ifcfg-eth0

Modify/appenddirective as follows:

DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

Open eth1configuration file using vi text editor:

# vi/etc/sysconfig/network-scripts/ifcfg-eth1

Make sure fileread as follows for eth1 interface:

DEVICE=eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

Save file andexit to shell prompt.

Step # 3: Load bond driver/module

Make surebonding module is loaded when the channel-bonding interface (bond0) is broughtup. You need to modify kernel modules configuration file:

# vi/etc/modprobe.conf

Append followingtwo lines:

aliasbond0 bonding
options bond0 mode=balance-alb miimon=100

Save file andexit to shell prompt. You can learn more about all bounding options in kernelsource documentation file (click here to read file online).

Step # 4: Test configuration

First, load thebonding module:

#modprobe bonding

Restartnetworking service in order to bring up bond0 interface:

#service network restart

Verifyeverything is working:

#less /proc/net/bonding/bond0

Output:

Bonding Mode: load balancing (round-robin)

MII Status: up

MII Polling Interval (ms): 0

Up Delay (ms): 0

Down Delay (ms): 0


Slave Interface: eth0

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:0c:29:c6:be:59


Slave Interface: eth1

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:0c:29:c6:be:63

List allinterfaces:#ifconfigOutput:

bond0     Link encap:Ethernet  HWaddr 00:0C:29:C6:BE:59

inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0

inet6 addr: fe80::200:ff:fe00:0/64Scope:Link

UP BROADCAST RUNNING MASTERMULTICAST  MTU:1500  Metric:1

RX packets:2804 errors:0 dropped:0overruns:0 frame:0

TX packets:1879 errors:0 dropped:0overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:250825 (244.9 KiB)  TX bytes:244683 (238.9 KiB)


eth0      Link encap:Ethernet  HWaddr 00:0C:29:C6:BE:59

inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0

inet6 addr:fe80::20c:29ff:fec6:be59/64 Scope:Link

UP BROADCAST RUNNING SLAVEMULTICAST  MTU:1500  Metric:1

RX packets:2809 errors:0 dropped:0overruns:0 frame:0

TX packets:1390 errors:0 dropped:0overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:251161 (245.2 KiB)  TX bytes:180289 (176.0 KiB)

Interrupt:11 Base address:0x1400


eth1      Link encap:Ethernet  HWaddr 00:0C:29:C6:BE:59

inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0

inet6 addr:fe80::20c:29ff:fec6:be59/64 Scope:Link

UP BROADCAST RUNNING SLAVEMULTICAST  MTU:1500  Metric:1

RX packets:4 errors:0 dropped:0overruns:0 frame:0

TX packets:502 errors:0 dropped:0overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:258 (258.0 b)  TX bytes:66516 (64.9 KiB)

Interrupt:10 Base address:0x1480

Now you have bond multiple network interfaces into asingle channel (NIC)