Files

133 lines
3.9 KiB
ReStructuredText

.. _network-bonding:
Combine multiple interfaces with network bonding
################################################
Network bonding combines multiple network interfaces into a single logical
interface to provide redundancy and bandwidth aggregation.
|CLOSIA| includes Linux bonding_ and team_ drivers. This guide describes how
to configure systemd to use the `bonding` 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:
https://www.kernel.org/doc/Documentation/networking/bonding.txt
.. _team:
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