How to Create NIC Teaming or Bonding in CentOS 8 / RHEL 8

NIC teaming is the aggregation or bonding of two or more network links into a single logical link to provide redundancy and high availability. The logical interface/link is known as a team interface. In the event that the active physical link goes down, one of the backup or reserved links automatically kicks and ensures an uninterrupted connection to the server.

Teaming Terminologies

Before we roll our sleeves, it’s crucial to familiarize yourself with the following terminologies:

  • Teamd – This is the nic teaming daemon that uses the libteam library to communicate with team devices via the Linux kernel.
  • Teamdctl– This is a utility that allows users to control an instance of teamd. You can check and change the port status, as well as switch between backup and active states.
  • Runner – These are units of code written in JSON and are used for the implementation of various NIC teaming concepts. Examples of runner modes include Round robbin, load balancing, broadcast, and active backup.

For this guide, we will configure NIC teaming using the active-backup mode. This is where one link remains active while the rest are on standby and reserved as backup links incase the active link goes down.

Without much further ado, let’s begin.

Step 1: Install the teamd Daemon in CentOS

Teamd is the daemon that is responsible for creating a network team that will act as the logical interface during runtime. By default, it comes installed with CentOS/RHEL 8. But if, for whatever reason, it’s not installed, execute the following dnf command to install it.

$ sudo dnf install teamd
Install Teamd in CentOS
Install Teamd in CentOS

Once installed verify that teamd is installed by running the rpm command:

$ rpm -qi teamd
Verify Teamd in CentOS
Verify Teamd in CentOS

Step 2: Configure NIC Teaming in CentOS

To configure NIC teaming we will use the handy nmcli tool that can be used for the management of NetworkManager service. In my system, I have 2 NIC cards that I’m going to bond or combine to create a logical team interface: enp0s3 and enp0s8. This may be different in your case.

To confirm the active network interfaces run:

$ nmcli device status
Check Active Network Interfaces
Check Active Network Interfaces

The output confirms the existence of 2 active network connections. To gather more information about the interfaces like UUID, run the command:

$ nmcli connection show
Check Active Network UUID
Check Active Network UUID

To create a network teaming link or interface, which will be our logical link, we are going to delete the existing network interfaces. Thereafter we will create slave interfaces using the deleted interfaces and then associate them with the teaming link.

Using their respective UUID’s execute the commands below to delete the links:

$ nmcli connection delete e3cec54d-e791-4436-8c5f-4a48c134ad29
$ nmcli connection delete dee76b4c-9alb-4f24-a9f0-2c9574747807
Delete Active Network Interfaces
Delete Active Network Interfaces

This time when you check the interfaces, you’ll notice that they are disconnected and provide no connection to the server. Basically, your server will be isolated from the rest of the network.

$ nmcli device status
Check Network Interfaces
Check Network Interfaces

Next, we are going to create a team interface called team0 in active-backup runner mode. As earlier stated, the active backup runner mode uses one active interface and reserves the others for redundancy in case the active link goes down.

$ nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'
Create Team Network Interface
Create Team Network Interface

To view the attributes assigned to the team0 interface run the command:

$ nmcli connection show team0
Check Team Network Attributes
Check Team Network Attributes

Perfect! At this point, we only have one interface up, which is the team0 interface as shown.

$ nmcli connection show
Check Team Network Interface
Check Team Network Interface

Next, configure IP address for the team0 interface as shown using the nmcli command. Be sure to assign the IP’s according to your network’s subnet & IP addressing scheme.

$ nmcli con mod team0 ipv4.addresses 192.168.2.100/24
$ nmcli con mod team0 ipv4.gateway 192.168.2.1
$ nmcli con mod team0 ipv4.dns 8.8.8.8
$ nmcli con mod team0 ipv4.method manual
$ nmcli con mod team0 connection.autoconnect yes
Configure Team Network Interface
Configure Team Network Interface

Thereafter, create slave links and associate the slaves to the team link:

$ nmcli con add type team-slave con-name team0-slave0 ifname enp0s3 master team0
$ nmcli con add type team-slave con-name team0-slave1 ifname enp0s8 master team0
Configure Slave Network Interface
Configure Slave Network Interface

Check the status of the links again, and you’ll notice that the slave links are now active.

$ nmcli connection show
Check Team Network Interfaces
Check Team Network Interfaces

Next, deactivate and activate the team link. This activates the connection between the slave links and the team link.

$ nmcli connection down team0 && nmcli connection up team0
Active Team Network Interfaces
Active Team Network Interfaces

Next, verify the state of the team link connection as shown.

$ ip addr show dev team0
Verify Team Network Status
Verify Team Network Status

We can see that the link is up with the correct IP addressing that we configured earlier.

To retrieve additional details about the team link, run the command:

$ sudo teamdctl team0 state
Check Team Network Info
Check Team Network Info

From the output, we can see that both links (enp0s3 and enp0s8) are up and that the active link is enp0s8.

Step 3: Testing Network Teaming Redundancy

To test our active-backup teaming mode, we will disconnect the currently active link – enp0s3 – and check whether the other link kicks in.

$ nmcli device disconnect enp0s3
$ sudo teamdctl team0 state
Testing Network Teaming
Testing Network Teaming

When you check the status of the teaming interface, you’ll find that the link enp0s8 has kicked in and serving connections to the server. This confirms that our setup is working!

Step 4: Deleting a Network Teaming Interface

If you wish to delete the teaming interface/link and revert to default network settings, first bring down the teaming link:

$ nmcli connection down team0

Next, delete the slaves.

$ nmcli connection delete team0-slave0 team0-slave1

Finally, delete the teaming interface.

$ nmcli connection delete team0
Delete Team Network Interfaces
Delete Team Network Interfaces

At this point, all the interfaces are down and your server is not reachable. To activate your network interfaces and regain connectivity, run the commands:

$ sudo ifconfig enp0s3 up
$ sudo ifconfig enp0s8 up
$ sudo systemctl restart NetworkManager
Conclusion

NIC teaming offers an excellent solution for network redundancy. With 2 or more network interfaces, you can configure a teaming interface in any runner mode to ensure high availability in the event one link goes down accidentally. We do hope that you found this guide helpful. Hit us up and let us know how your experience was.

If you liked this article, then do subscribe to email alerts for Linux tutorials. If you have any questions or doubts? do ask for help in the comments section.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

29 thoughts on “How to Create NIC Teaming or Bonding in CentOS 8 / RHEL 8”

  1. Hi,

    To create bonding, Follow below steps.

    1. create a file ifcfg-bondX and add below lines.

    DEVICE=bond0
    IPADDR=192.168.0.1
    NETMASK=255.255.255.0
    ONBOOT=yes
    HOTPLUG=no
    BOOTPROTO=none
    USERCTL=no
    BONDING_OPTS=”bonding parameters separated by spaces” # Such as BONDING_OPTS=”miimon=100 mode=1″
    NM_CONTROLLED=no

    2. After creating bonding interface, its time to configure slave interface.

    3. Edit interface files and add below lines.

    DEVICE=ethX
    BOOTPROTO=none
    ONBOOT=yes
    HOTPLUG=no
    MASTER=bond0
    SLAVE=yes
    USERCTL=no
    NM_CONTROLLED=no

    4. Restart the network service to load the newly added configuration.
    #service network restart

    This is explained a bit further at below link.
    https://www.kernel.org/doc/Documentation/networking/bonding.txt

    Reply
  2. We trying to configure em2 and em3 two bonds in Redhat 6.7 but not success ,
    Bond0 and bond1 configured W/O any issue but due to some oracle dB limitation we em2 and em3 two bonds
    Please suggest

    Reply
  3. Hello and thanks for this page. Only a quick question. Please can you tell me if another IP address is needed in addition to the existing IP from the network interfaces?. In other words, if I have got eth0 and eth1 with its respectives IP, is another IP required for bonding?
    Thanks a lot.

    Reply
  4. Nice post, thank you.

    Small typo in eth1 editing , kindly change
    For eth1
    # vi /etc/sysconfig/network-scripts/ifcfg-eth0

    Reply
  5. Hi Expert,

    My network bonding works perfectly after do this setting but I’ve an other issue after i done all this configuration given here my “network connection icon got red “x””.
    It’s this normal after do the bonding?

    I’m using Rhel 6.5

    Please advise.

    Thank you.

    Reply

Leave a Reply to Javier Cancel reply

Have a question or suggestion? Please leave a comment to start the discussion. Please keep in mind that all comments are moderated and your email address will NOT be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.