Files

131 lines
3.9 KiB
ReStructuredText

.. _network-bonding:
Combine multiple interfaces with network bonding
################################################
This guide describes how to configure systemd to use the :command:`bonding`
driver.
Network bonding combines multiple network interfaces into a single logical
interface to provide redundancy and bandwidth aggregation.
|CL-ATTR| includes the Linux `Bonding driver`_ and `Team driver`_ .
The example demonstrates how to:
* Bond all four ports of a quad-port NIC in 802.3ad mode.
* Enable jumbo frames to optimize large data transfers on the local network.
Your NICs and network switch must support 802.3ad mode and jumbo frames. The
example explains how to configure your NICs for both features. Your switch may
require additional configuration. See your switch documentation for details.
.. note::
You must run all commands in this guide as root.
#. Log in and get root privileges.
.. code-block:: console
sudo -s
#. Create the :file:`/etc/systemd/network` directory.
.. code-block:: bash
mkdir -p /etc/systemd/network
The :file:`/etc/systemd/network` directory contains configuration files and
network settings for the virtual device and its underlying physical
interfaces.
#. Configure systemd to create a virtual network device called `bond1`. Use a
text editor to create a file named :file:`30-bond1.netdev`.
.. code-block:: console
[NetDev]
Name=bond1
Kind=bond
[Bond]
Mode=802.3ad
TransmitHashPolicy=layer3+4
MIIMonitorSec=1s
LACPTransmitRate=fast
Refer to the `systemd.netdev`_ manpage for :file:`30-bond1.netdev` file
syntax. This example is based on Example 9 on the manpage. Modify the
example for your configuration.
#. Configure the slave interfaces. Create a text file named
:file:`30-bond1-enp1s0.network`. Assign the slave interfaces to the virtual
`bond1` device and use the syntax shown in `systemd.network`_.
.. code-block:: console
[Match]
Name=enp1s0f*
[Network]
Bond=bond1
[Link]
MTUBytes=9000
The example bonds all four ports of a quad-port NIC as a slave of `bond1`.
The example uses a wildcard match because the NIC names are in the range
`enp1s0f0-enp1s0f3`. If your NIC names are not wildcard-compatible, create
a separate :file:`.network` file for each NIC.
For best results, do not assign addresses or DHCP support to the individual
NICs.
The `MTUBytes` setting enables jumbo frames of up to 9000 bytes. Your
switch may require additional configuration to support this setting.
#. Configure the bonded interface in a file named :file:`30-bond1.network`.
.. code-block:: console
[Match]
Name=bond1
[Network]
BindCarrier=enp1s0f0 enp1s0f1 enp1s0f2 enp1s0f3
Address=192.168.1.201/24
[Link]
MTUBytes=9000
`bond1` is a virtual interface with no physical link status.
`BindCarrier` indicates that the `bond1` link status is determined by the
status of the listed slave devices.
`Address` contains an IP address that you assign to the logical interface.
DHCP bonded interfaces are complex and outside the scope of this example.
`MTUBytes` must be set to 9000 on all slave interfaces and on the bonded
interface for successful jumbo frames operation. If `MTUBytes` is not the
same on all interfaces, then the lowest value is used.
#. Apply the new network configuration with the command:
.. code-block:: bash
systemctl restart systemd-networkd
The `MTUBytes` settings do not take effect until you reboot or manually
apply the settings with a utility such as ifconfig.
.. _Bonding driver: https://www.kernel.org/doc/Documentation/networking/bonding.txt
.. _Team driver: https://www.kernel.org/doc/Documentation/networking/team.txt
.. _systemd.netdev: https://www.freedesktop.org/software/systemd/man/systemd.netdev.html
.. _systemd.network: https://www.freedesktop.org/software/systemd/man/systemd.network.html