Ubuntu 20.04 add network bridge (br0) with nmcli command

How do I configure my Ubuntu 20.4 LTS and add network bridge (br0) with the nmcli command? How can I create a Linux network bridge on Ubuntu Linux 20.04 LTS server for KVM (Kernel-based Virtual Machine)?

A network bridge is nothing but a device that joins two local networks into one network. It works at the data link layer (layer 2 of the OSI model). Network bridges often used with virtualization software. For example, popular software such as KVM, LXD, or Docker users can configure bridges instead of NAT-based networking. The nmcli command-line tool can create a persistent bridge configuration without editing any files. This page shows how to create a bridge interface using the Network Manager command-line tool called nmcli on an Ubuntu 20.04 LTS Linux server.
Tutorial requirements
Operating system/appUbuntu 18.04/20.04 LTS server
Root privileges required Yes
Difficulty Easy (rss)
Estimated completion time 5m
Table of contents

ADVERTISEMENTS

Ubuntu 20.04 add network bridge (br0) with nmcli

The procedure to create and add a bridge interface on Ubuntu version 20.04 is as follows when you want to use Network Manager:

  1. Open the Terminal app or log in using the ssh command
  2. Find out information about the current Ubuntu network connection:
    sudo nmcli con show
  3. Then, add a new bridge called br0:
    sudo nmcli con add ifname br0 type bridge con-name br0
  4. Create a slave interface for br0 using enp0s31f6 NIC:
    sudo nmcli con add type bridge-slave ifname enp0s31f6 master br0
  5. Turn on br0 interface to get an IP via DHCP:
    sudo nmcli con up br0
  6. Static IP settings are discussed below for the br0 interface

Let us see all examples and instructions in detail to create a network bridge in Ubuntu Linux version 20.04 LTS server.

Prerequisite for creating a Linux network bridge on Ubuntu 20.04

First thing, obtain information about the current Ubuntu Linux interface and IP address as we need this information later. Hence, type the following commands:
$ nmcli con show
$ nmcli connection show --active

Outputs:

NAME  UUID                                  TYPE      DEVICE 
ETH0  71a189f2-9cb9-49f0-8464-37a6801740e3  ethernet  enp0s31f6  

So my server has an “ETH0” which uses the enp0s31f6 Ethernet interface. I am going to set up a bridge interface named br0 and add (enslave) an interface to enp0s31f6.

Step 1 – Creating a network bridge named br0

The syntax is:
$ sudo nmcli con add ifname br0 type bridge con-name br0
$ sudo nmcli con add type bridge-slave ifname enp0s31f6 master br0
$ nmcli connection show

Ubuntu 20.04 add network bridge (br0) with nmcli command

Step 2 – Disable or enable STP for network bridge

The primary purpose of Spanning Tree Protocol (STP) is to ensure that you do not create loops when you have redundant paths in your network. We can disable STP or enable as follows for br0:
$ sudo nmcli con modify br0 bridge.stp no
## Ubuntu 20.04 Linux nmcli command to enable STP with br0 ##
$ sudo nmcli con modify br0 bridge.stp yes
## Verification ##
$ nmcli con show
$ nmcli -f bridge con show br0

Outputs:

bridge.mac-address:                     --
bridge.stp:                             yes
bridge.priority:                        32768
bridge.forward-delay:                   15
bridge.hello-time:                      2
bridge.max-age:                         20
bridge.ageing-time:                     300
bridge.group-forward-mask:              0
bridge.multicast-snooping:              yes
bridge.vlan-filtering:                  no
bridge.vlan-default-pvid:               1
bridge.vlans:                           --

Step 3 – Set up static or DHCP based IP for network bridge interface

We have not allocated any static IP address to our br0 interface. Hence, if the DHCP server is available, it should provide IP addresses and other settings. However, on servers, we typically set up a static IP address. In this example, I am converting existing enp0s31f6 IP network settings to br0 settings as follows:

IPv4 br0 settings

$ sudo nmcli connection modify br0 ipv4.addresses '192.168.2.25/24'
$ sudo nmcli connection modify br0 ipv4.gateway '192.168.2.254'
$ sudo nmcli connection modify br0 ipv4.dns '192.168.2.254'
$ sudo nmcli connection modify br0 ipv4.dns-search 'sweet.home'
$ sudo nmcli connection modify br0 ipv4.method manual

IPv6 br0 settings

$ sudo nmcli connection modify bridge0 ipv6.addresses 'Your-Static-IPv6-Address'
$ sudo nmcli connection modify br0 ipv6.gateway 'Your-Static-IPv6-Gateway-Address'
$ sudo nmcli connection modify br0 ipv6.dns 'Your-Static-IPv6-DNS'
$ sudo nmcli connection modify br0 ipv6.dns-search 'sweet.home'
$ sudo nmcli connection modify br0 ipv6.method manual

Step 4 – Enable br0 network bridge interface on Ubuntu Linux

So far, we configured required network settings. It is time to turn it on our br0:
$ sudo nmcli con up br0
$ nmcli con show

Wait for some time to activate settings.

Step 5 – Verification network bridge settings

Use the ip command to view the IP settings for br0 bridge on Ubuntu box:
$ ip a s
$ ip a s br0

You can remove enp0s31f6 as br0 got a static IP address itself as enp0s31f6 will be in forwarding state:
$ sudo nmcli connection delete enp0s31f6
## or ##
$ sudo nmcli connection delete ETH0

Here is how it looks using the ip command:
$ nmcli connection show
$ ip a show br0
$ nmcli device
## interface active and works with br0 ##
$ ip a show enp0s31f6
$ ip r
## Check Internet and local LAN connectivity using ping command ##
$ ping -c 4 www.cyberciti.biz
$ ping -c 4 192.168.2.25

Show the link status of Ethernet devices and bridge devices on Ubuntu Linux machine:
$ ip link show master br0
$ bridge link show
$ bridge link show dev enp0s31f6

Verify and Create a Network Bridge in Ubuntu 20.04 Linux LTS server

Conclusion

In this tutorial, you learned how to add and create a Linux Network Bridge on Ubuntu 20.04 LTS server. See nmcli docs online for more info.

🐧 If you liked this page, please support my work on Patreon or with a donation.
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
4 comments… add one
  • unixpro Aug 10, 2020 @ 0:33

    I think there’s a limitation with the standard Linux bridge when working with wireless adapters. Actually I think it’s a limitation with wireless link layer then authentication and trying to bridge Ethernet layer 2 over that authenticated stack if you get me.

  • perli Aug 31, 2020 @ 15:00

    Hi, i have trouble withe getting an ip from the DHCP server to the bridge while the vm does get an ip. i would appreciate if you explain how to activate the br to work with dhcp , not based on if my dhcp server works in general (I’m on wireless). Thanks

  • PavelN Oct 6, 2020 @ 12:25

    BTW: you have a typo in commands (missing con-name option) :
    > Then, add a new bridge called br0:
    sudo nmcli con add type bridge ifname br0

    later in the page there is a proper syntax including “con-name” :
    sudo nmcli con add ifname br0 type bridge con-name br0

    • 🐧 Vivek Gite Oct 26, 2020 @ 12:59

      Fixed it. Thanks for the tip and I appreciate your feedback.

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.