From Mark Furneaux's Wiki
Jump to: navigation, search

ifenslave is a Linux package for bonding (also known as trunking or teaming) multiple network interfaces. Bonding provides improved bandwidth and provides fault tolerance.


An example of /etc/network/interfaces is shown below.

 1 # First NIC
 2 auto eth0
 3 iface eth0 inet manual
 4         bond-master bond0
 5         pre-up /sbin/ip link set dev $IFACE mtu 9000
 6         post-up /sbin/ethtool -G $IFACE rx 4096
 7         post-up /sbin/ethtool -G $IFACE tx 4096
 9 # Second NIC
10 auto eth1
11 iface eth1 inet manual
12         bond-master bond0
13         pre-up /sbin/ip link set dev $IFACE mtu 9000
14         post-up /sbin/ethtool -G $IFACE rx 4096
15         post-up /sbin/ethtool -G $IFACE tx 4096
17 # Virtual NIC
18 auto bond0
19 iface bond0 inet dhcp
20 #       address
21 #       netmask
22 #       network
23 #       broadcast
24 #       gateway
25 # dns-* options are implemented by the resolvconf package, if installed
26 #       dns-nameservers
27 #       dns-search helene
28         bond-mode balance-rr
29         bond-miimon 2000
30         bond-slaves eth0 eth1
31         pre-up /sbin/ip link set dev $IFACE mtu 9000
32         pre-up /sbin/ip link set dev $IFACE address 00:1f:29:5f:db:6a

This config will bond 2 NICs together into a round-robin bond using DHCP. The interfaces are permitted to use 9000bit jumbo frames. The links are checked for upness every 2 seconds. The TX and RX buffers on the network cards are allowed to be used fully, 4096kB each, per card.


  • The MAC address of the bond is set on line 34 to keep it consistent through reboots. If not set, ifenslave will use the MAC of the first NIC to go up, which will cause MAC address filtering to not work.
  • The TX and RX buffers are set on lines 7, 8, 16, 17 to the maximum size available on the card. This value will depend on the NIC itself. This improves performance and reduces the likelihood of a buffer overrun. Doing this requires the installation of the ethtool package.