centos7下配置网桥bridge

网桥(bridge)是一种网络设备,用于连接两个或多个网络段。它工作在OSI模型的第二层(数据链路层),通过MAC地址来转发数据包。网桥的主要功能是分割网络流量,减少网络拥堵,并扩展网络的覆盖范围。它不像路由器那样基于IP地址工作,而是更简单地基于物理地址进行操作。


1.brctl配置桥接

1.工具包
yum install -y bridge-utils

2.查看网桥
brctl show

3.添加/删除网桥
brctl addbr | delbr br0

4.添加和删除网桥中网卡
brctl addif | delif  br0  ethx

5.STP(生成树协议)防止环路
btctl stp br0 on

6.查看CAM表(mac:port映射关系)
brctl showmacs bro

注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口。

brctl help

Usage: brctl [commands]
commands:
    addbr     	<bridge>		add bridge
    delbr     	<bridge>		delete bridge
    addif     	<bridge> <device>	add interface to bridge
    delif     	<bridge> <device>	delete interface from bridge
    hairpin   	<bridge> <port> {on|off}	turn hairpin on/off
    setageing 	<bridge> <time>		set ageing time
    setbridgeprio	<bridge> <prio>		set bridge priority
    setfd     	<bridge> <time>		set bridge forward delay
    sethello  	<bridge> <time>		set hello time
    setmaxage 	<bridge> <time>		set max message age
    setpathcost	<bridge> <port> <cost>	set path cost
    setportprio	<bridge> <port> <prio>	set port priority
    show      	[ <bridge> ]		show a list of bridges
    showmacs  	<bridge>		show a list of mac addrs
    showstp   	<bridge>		show bridge stp info
    stp       	<bridge> {on|off}	turn stp on/off

配置过程

桥接的本质是将多个网络接口连接成一个逻辑上的二层网络(数据链路层),因此桥接本身并不强制要求IP地址属于不同网段。

  • 桥接的基本原理
    • **网桥(bridge)**工作在OSI模型的第二层(数据链路层),通过MAC地址转发数据帧,而不是基于IP地址(第三层)。
    • 当你将两个网卡(如eth0和eth1)加入br0时,它们会被视为同一个广播域,数据帧可以在这些接口之间自由转发。
    • IP地址(网段)是三层概念,桥接并不直接依赖于IP层配置。

桥接就像一个物理交换机,连接的所有设备都处于同一个子网,彼此通过ARP协议发现并通信。

对端网段是否需要不同?

  1. 可以是同一网段

    • 如果eth0和eth1连接的网络(或对端机器)使用相同的IP网段(例如都使用192.168.1.0/24),桥接仍然可以正常工作。
    • 在这种情况下,桥接就像一个物理交换机,连接的所有设备都处于同一个子网,彼此通过ARP协议发现并通信。
    • 例如:
      • a的eth0 IP: 192.168.1.101/24
      • c的eth0 IP: 192.168.1.102/24
      • b的br0 IP: 192.168.1.100/24,桥接eth0和eth1
      • a和c可以直接ping通,无需额外路由
  2. 可以是不同网段

    • 如果eth0和eth1连接的网络属于不同网段(例如eth0连接192.168.1.0/24,eth1连接192.168.56.0/24),桥接仍然会将它们连接成一个二层网络。
    • 但在这种情况下,a和c要想通信,需要:
      • 确保它们的IP配置允许跨网段通信(例如设置正确的网关或路由)。
      • 或者在b上启用IP转发,并配置路由规则(如同我上一个回答中的配置)。
    • 桥接本身不会自动处理三层(IP层)的路由问题。

1.A/C同一网段
3894d5a1b53d3eea8a9576f772a9951c.png

//A主机 nat网卡
ip addr add 192.168.100.100/24 dev eth0

//B主机 nat/hostonly网卡
新建br0桥接网卡
brctl addbr br0

添加网卡到br0
brctl addif br0 eth0
brctl addif br0 eth1

激活br0
ip link set br0 up

//C主机 hostonly网卡
ip addr add 192.168.100.200/24 dev eth0

//testing  ping
ping 192.168.100.200

⚠️:B主机的eth0/eth1网卡添加到br0后自身的ip等自动失效

A ping C
1c2cacabb76cfcd8ab7d6f7b9d6dc5ba.png

C ping A
df9d97f9337fdf5470042d328e70e437.png

在B上抓去icmp包
3f64c2ab8d946d164497b5386ac8921e.png

2.A/C跨网段
02d574b70400b28f96f76b34730c57fe.png

//A主机 nat网卡
ip addr add 172.20.20.10/24 dev eth0

添加路由
ip route add 192.168.3.0/24 via 172.20.20.20

//B主机 nat/hostonly网卡
新建br0桥接网卡
brctl addbr br0

添加网卡到br0
brctl addif br0 eth0
brctl addif br0 eth1

激活br0
ip link set br0 up

添加网卡ip
ip addr add 172.20.20.20/24 dev br0
ip addr add 192.168.3.20/24 dev br0

开启ip转发
sysctl -w net.ipv4.ip_forward=1

//C主机 hostonly网卡
ip addr add 192.168.3.10/24 dev eth0

添加路由
ip route add 172.20.20.0/24 via 192.168.3.20

//testing  ping
ping 192.168.3.10

a513257442d0258f3bc24a875204c8bd.png

c4bb35ef869b6b8f13854c7cb2b31024.png

nmcli形式创建bridge

1.创建软件网桥
nmcli con add con-name br1 type bridge con-name br1 ifname br1

根据情况是否选择给网桥添加IP
nmcli con modify br1 ipv4.addresses 192.168.0.100/24 ipv4.method manual

2.添加网卡到br1
nmcli con add con-name br1-eth0 type bridge-slave ifname eth0 master br1

nmcli con add con-name br1-eth1 type bridge-slave ifname eth1 master br1

3.启动br0
ip link set br1 up
systemctl restart network

2.查看配置文件
cat /etc/sysconfig/network-scripts/ifcfg-br1
cat /etc/sysconfig/network-scripts/ifcfg-br1-eth0
cat /etc/sysconfig/network-scripts/ifcfg-br1-eth1

ifconfig eth0 10.10.0.1
tcpdump -i eth0 icmp -nn

只有br1 up,桥接才成功

/etc/sysconfig/network-scripts/ifcfg-br1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
STP=yes
BRIDGING_OPTS=priority=32768
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br1
UUID=aaa8d3a3-464d-488f-b836-a69816be3b15
DEVICE=br1
ONBOOT=yes
IPADDR=192.168.0.100
PREFIX=24

/etc/sysconfig/network-scripts/ifcfg-br1-eth0

TYPE=Ethernet
NAME=br1-eth0
UUID=12f0d9ac-cf0c-4385-9365-fe77eea1020b
DEVICE=eth0
ONBOOT=yes
BRIDGE=br1

/etc/sysconfig/network-scripts/ifcfg-br1-eth1

TYPE=Ethernet
NAME=br1-eth1
UUID=8fd97037-0306-4c39-89ae-a335b6d86279
DEVICE=eth1
ONBOOT=yes
BRIDGE=br1