To assign an IP address to a Linux network bridge, you must move the existing IP configuration from the physical interface (like
eth0) to the bridge interface (
br0). The physical port and any virtual interfaces (such as
tap0) become members of the bridge without their own layer 3 addresses. This ensures that the bridge acts as a single logical entity for routing while maintaining connectivity for attached devices.
Prerequisites and Interface Preparation
Before configuring the bridge, ensure you have root privileges on your Linux system, whether it is a Raspberry Pi, Ubuntu server, or another distribution. You need to identify your physical network interface, typically named
eth0, and any virtual interfaces like
tun0 or
tap0 that will be bridged. It is critical to note that the bridge interface itself will consume the IP address currently assigned to the physical port. If you are connected remotely via SSH, this process may disconnect you if not handled carefully, so having console access is recommended.
You should first verify the current state of your interfaces using the
ip addr show command. Identify which interface holds the active IP address. In most standard setups, the physical Ethernet port
eth0 holds the IP. The goal is to detach this IP from
eth0 and attach it to
br0. Do not remove the IP from
eth0 until the bridge is configured and ready to accept it, to avoid losing network connectivity prematurely.
Configuring the Bridge Using Netplan
Modern Ubuntu systems often use Netplan for network configuration. To set up the bridge, you edit the YAML configuration file located in
/etc/netplan/. The exact filename usually ends with
.yaml. Open this file with a text editor such as
nano or
vim. You need to define a new bridge interface, typically named
br0, and specify the physical interface as a member.
The configuration structure requires defining the bridge under the
network section. Inside the bridge definition, you list the physical interface in the
interfaces array. Crucially, you move the
addresses block from the physical interface definition to the bridge definition. The physical interface should no longer have an IP address; it becomes a pure layer 2 port.
network:
version: 2
ethernets:
eth0:
dhcp4: no
dhcp6: no
bridges:
br0:
interfaces: [eth0, tap0]
addresses: [192.168.1.10/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
In this example,
eth0 and
tap0 are added to
br0. The static IP
192.168.1.10/24 is assigned to
br0. The gateway and DNS settings are also moved to the bridge level. Ensure that indentation is correct, as YAML is sensitive to whitespace. After saving the file, apply the changes using the command
sudo netplan apply. If the configuration is valid, the network will reconfigure with the bridge taking over the IP.
Alternative Configuration with NetworkManager
If your system uses NetworkManager instead of Netplan, the process differs slightly. You can create a bridge connection via the command line using
nmcli. First, add the bridge device:
nmcli con add type bridge ifname br0 con-name br0
Then, add the physical interface as a slave to the bridge:
nmcli con add type bridge-slave ifname eth0 master br0
And similarly for the virtual interface:
nmcli con add type bridge-slave ifname tap0 master br0
Finally, assign the IP address to the bridge connection using
nmcli con modify br0 ipv4.addresses 192.168.1.10/24 and set the gateway. Activate the connection with
nmcli con up br0. This method is dynamic and allows for easier management through GUI tools if available.
Verifying the Bridge Setup
Once the configuration is applied, verify that the bridge is operational. Use
ip link show br0 to confirm the interface exists and is in an UP state. Check the IP assignment with
ip addr show br0; the IP should now appear on
br0 rather than
eth0. Testing connectivity by pinging the gateway or an external host confirms that routing is working correctly.
For deeper inspection, you can use tools mentioned in our guide on
Finding Specific Data in Wireshark Capture to monitor traffic flowing through the bridge. This helps ensure that packets are being forwarded correctly between
eth0 and
tap0. If you encounter issues with NAT, refer to
IPTables: NAT Source Address Bridge Interface on Linux for troubleshooting source address translation problems.
Troubleshooting Common Issues
A common error is forgetting to disable DHCP on the physical interface before adding it to the bridge. If
eth0 still attempts to request an IP via DHCP, it may conflict with the bridge's static configuration. Ensure
dhcp4: no is set for the physical port in Netplan or disable DHCP in NetworkManager. Another issue arises if the bridge fails to start because the physical interface is busy. Restarting the network service or rebooting the system after correcting the configuration file usually resolves persistent states.
Frequently Asked Questions
Can I keep the IP on eth0 and just add it to the bridge?
No, a Linux bridge cannot share an IP address with its slave interfaces at the same time. The IP must reside solely on the bridge interface (
br0). The physical interface (
eth0) acts only as a layer 2 port and should not have a layer 3 address assigned to it when it is part of a bridge.
How do I check if my bridge is forwarding traffic correctly?
Use the
brctl show or
bridge link command to see which interfaces are members of the bridge. Additionally, ping an external IP from the machine and check the packet counters on the bridge using
cat /sys/class/net/br0/statistics/rx_bytes to verify traffic flow.
What happens to existing connections when I change the IP to the bridge?
Existing TCP connections, such as an SSH session, will likely drop because the source IP address changes. If you are configuring remotely, this will disconnect you. Always ensure you have local console access or use a tool like
screen or
tmux to survive the network interruption during reconfiguration.
Does the bridge support IPv6 out of the box?
Yes, Linux bridges operate at layer 2 and are transparent to both IPv4 and IPv6. You can assign an IPv6 address to the bridge interface just like you would with IPv4. However, you must configure the IPv6 address and routes specifically on the
br0 interface, not on the slave ports.
Why is my bridge not getting internet access?
This is often due to incorrect routing or NAT rules. Ensure the default gateway is set on the bridge interface. If you are using NAT for other devices behind the bridge, verify your iptables rules. Refer to resources on
Ubuntu 22.04 VM on KVM/virt-manager Not Connecting to Internet for similar connectivity troubleshooting steps.