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协议发现并通信。
对端网段是否需要不同?
可以是同一网段:
- 如果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通,无需额外路由。
- a的eth0 IP:
- 如果eth0和eth1连接的网络(或对端机器)使用相同的IP网段(例如都使用
可以是不同网段:
- 如果eth0和eth1连接的网络属于不同网段(例如eth0连接
192.168.1.0/24
,eth1连接192.168.56.0/24
),桥接仍然会将它们连接成一个二层网络。 - 但在这种情况下,a和c要想通信,需要:
- 确保它们的IP配置允许跨网段通信(例如设置正确的网关或路由)。
- 或者在b上启用IP转发,并配置路由规则(如同我上一个回答中的配置)。
- 桥接本身不会自动处理三层(IP层)的路由问题。
- 如果eth0和eth1连接的网络属于不同网段(例如eth0连接
1.A/C同一网段
//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
C ping A
在B上抓去icmp包
2.A/C跨网段
//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
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 | STP=yes |
/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