After installing Ubuntu 16.04 the following guide can be used to set up LACP. If you are still installing the server, select Do not configure the network at this time
after the auto-config failed and finish the installation.
Getting started:
In order for LACP to work, it also needs to be set up on the switch the server is connected to.
Because some files might not be accessible from your default user, it's easier to follow this tutorial while being root. You can easily become root by running: sudo -i
.
Step 1 - Finding the interfaces
Run the following command: ip link
You will see a list of interfaces, you can ignore the lo
interface, if that only leaves two interfaces, those interfaces have to be configured. If more than two interfaces remain LACP should usually be configured on the first two interfaces. You should take notice of which interfaces are up, as you will need them for the next step.
root@elias-demo:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 3c:a8:2a:54:f5:40 brd ff:ff:ff:ff:ff:ff
3: em2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 3c:a8:2a:54:f5:44 brd ff:ff:ff:ff:ff:ff
Step 2 - Installing ifenslave
By default, Ubuntu 16.04 does not come with the bonding module. This module is not installed by default on Ubuntu 16.04 and you will have to install this, to do this you will need internet access on your machine.
Conveniently our network will be configured in order to accept non-bonded connections as well in order to ease setup, this means you can just use your IP address on one of the connected interfaces during setup (this should not be done long-term as performance will be degraded).
You can quickly configure one of the state UP interfaces with your IP details in order to download this package, replace the information with the IP information for your server.
ip addr add 192.168.2.2/24 dev em1
ip route add default via 192.168.2.1
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
You can now install the ifenslave
package by running: apt install ifenslave -y
.
To make sure the bonding module loads on the next boot, edit the /etc/modules
file (nano /etc/modules
) and add a new line with bonding
on it.
You can now load the module for the current boot by running: modprobe bonding
, this is not neccesary was we are going to be rebooting the server to apply the configuration.
Step 3 - Configuring the bond
To configure the bond, we need to edit the interfaces configuration, you can find this in /etc/network/interfaces
.
Edit the file with your preferred editor (nano /etc/network/interfaces
) and create the configuration. Configuration example:
auto em1
iface em1 inet manual
bond-master bond0
auto em2
iface em2 inet manual
bond-master bond0
auto bond0
iface bond0 inet static
address 192.168.2.2
gateway 192.169.2.1
netmask 255.255.255.0
dns-nameservers 8.8.8.8 9.9.9.9
bond-slaves em1 em2
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
bond-xmit_hash_policy layer3+4
Save the configuration and proceed to the next step.
Step 4 - Applying the configuration
In order to erase the temporary configuration and apply the new configuration, it is recommended to reboot the server, you can do this by typing reboot
on the terminal.
Step 5 - Checking the configuration
After the reboot, you can take the following steps to ensure the configuration has been applied corretly, you can do the following:
- Run the
ip link
command (again). The output should show a new interface:bond0
should now also be there. If you replace link with address to getip address
you should also see the IP address you entered appear in the output of this command. Example:
root@elias-demo:~# ip address 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: em1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000 link/ether 72:d6:bf:a4:32:8a brd ff:ff:ff:ff:ff:ff 3: em2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000 link/ether 72:d6:bf:a4:32:8a brd ff:ff:ff:ff:ff:ff 4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 72:d6:bf:a4:32:8a brd ff:ff:ff:ff:ff:ff inet 192.168.2.2/24 brd 192.168.2.255 scope global bond0 valid_lft forever preferred_lft forever inet6 fe80::70d6:bfff:feb4:188c/64 scope link valid_lft forever preferred_lft forever
- Run
cat /proc/net/bonding/bond0
, this will show a lot of information about the bond0 interface. Here are some of the key lines and what they mean:
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
- Shows the bond is configured with 802.3ad (LACP), this way it negotiates with our switch.
Transmit Hash Policy: layer3+4 (1)
- Shows the bond hashing mode is set to layer3+4, this means it's configured properly in our case.
- You should also see a (system mac address) mac-address in the Slave interface sections at the details partner lacp pdu.
- run
ping 8.8.8.8
, or another IP which has a low chance of being offline. This will confirm internet connectivity, by default the firewall will allow this type of outbound traffic. If you notice missingicmp_seq
numbers, there may be packet loss, please contact our support about this.