It’s amazing how quickly guides on the Internet go out of date. I suppose this one will be no exception. However as I’ve been looking around there doesn’t appear to be a good guide as to how to get bonded ethernet to work in Ubuntu using the network helper scripts. So I thought I’d scribble down what I know.
This guide is designed for the Intrepid Ibex version of Ubuntu (8.10) with a small addendum covering Hardy Heron (8.04.1).
The Debian/Ubuntu networking system is a bit opaque. It works via a default script in /etc/network/interfaces
and is described in interfaces(5). (run man interfaces
to read it).
This gives you all the standard entries, but it also points out that other packages can install scripts that extend the options the interfaces file understands. And that is how you configure Ethernet bonding.
Almost certainly you will have to activate LACP on the relevant ports on your switch to get automatic bonding to work. How you do this depends on your switch. (On my test HP 1800-8G switch I just use the web interface and check a couple of boxes).
apt-get install ifenslave
sudo -s
ifdown eth0
ifdown eth1
etc, etc...
/etc/network/interfaces
#auto eth0
#iface eth0 inet dhcp
/etc/network/interfaces
auto bond0
iface bond0 inet dhcp
slaves all
bond-mode 4
bond-miimon 100
sudo ifup bond0
This brings up a bonded interface using the 802.3ad Link Aggregation Control Protocol (LACP) which is by far the easiest way of configuring a resilient trunk if your switch supports it (and even quite small switches do these days).
There are other modes and options available in the bonding driver all of which can now be specified in the interfaces
file. Full gory details in the bonding.txt.gz
file in the current linux-doc
package.
Similarly you can specify which network interfaces you want to use as the slaves to the bonding driver e.g. slaves eth0 eth1
. Look at the documentation in /usr/share/doc/ifenslave-2.6/README.Debian
for more details.
Hardy’s ifenslave
scripts are a little more primitive than Intrepid. It doesn’t auto-load the bonding module the first time you try to use it and it doesn’t set the options automatically. You have to do that the old fashioned way.
bonding
in /etc/modprobe.d
with the following config in it.
alias bond0 bonding
options bond0 mode=4 miimon=100
sudo modprobe bond0
sudo ifdown bond0
sudo ifup bond0