Linux网络配置:聚合链路与网桥实战
Linux 网络配置:聚合链路 (Team) 与软件网桥 (Bridge)
一、 聚合链路 (Network Teaming)
概念
- 定义: 网络组队(聚合链路)是一种将多个物理网络接口卡 (NIC) 逻辑绑定为一个单一逻辑接口 (
teamX
) 的技术。 - 目的:
- 故障转移 (Failover): 当主接口失效时,流量自动切换到备用接口,提高网络可用性。
- 负载均衡 (Load Balancing): 在多条链路上分发网络流量,提高整体吞吐量。
- 优势:
- 相比传统的
bonding
,teaming
提供了更好的性能。 - 模块化设计使其可扩展性更强。
- 相比传统的
- NIC: Network Interface Controller (网络接口控制器)。
二、 Teamd 运行模式
teamd
守护进程支持多种运行模式 (runner
):
roundrobin
: 以轮询方式在所有活动端口上顺序发送数据包。activebackup
: 主备模式 (故障迁移)。一个端口处于活动状态处理流量,其余端口作为备份。活动端口故障时,自动切换到下一个备份端口。loadbalance
: 负载均衡模式。监控流量并使用哈希函数(基于源/目的 MAC、IP、端口等)选择发送端口,力求在所有活动端口上均衡分配流量。broadcast
: 广播容错模式。所有数据包都通过所有活动端口同时发送。主要用于极端容错场景,效率较低。
三、 配置聚合链路 (以 activebackup
模式为例) - Server1
-
创建组接口 (
team0
):nmcli connection add con-name team0 ifname team0 type team config '{"runner": {"name": "activebackup"}}'
con-name
: 连接名称 (可自定义)。ifname
: 逻辑接口名称 (team0
)。type
: 连接类型 (team
)。config
: 指定运行模式为activebackup
。
-
配置组接口 IP 地址 (静态):
nmcli connection modify team0 \ipv4.addresses 192.168.0.1/24 \ipv4.method manual \connection.autoconnect yes
-
添加物理接口作为成员端口 (
team-slave
):nmcli connection add con-name team0-ens36 ifname ens36 type team-slave master team0 nmcli connection add con-name team0-ens37 ifname ens37 type team-slave master team0
- 将物理接口
ens38
和ens39
绑定到逻辑接口team0
。
-
激活组接口:
nmcli connection up team0
-
重启网络服务 (推荐):
systemctl restart network
注意: 虽然激活
team0
后通常即可工作,但重启网络服务 (network
或NetworkManager
) 能确保所有配置完全加载,避免潜在的初始化问题。
- 查看组状态:
teamdctl team0 state
- 此命令输出详细的状态信息,包括当前活动端口 (
active port
)、成员端口状态等。
- 此命令输出详细的状态信息,包括当前活动端口 (
四、 配置聚合链路 - Server2
- 在 Server2 上重复 步骤 1-5。
- 唯一区别:在 步骤 2 中,将
team0
的 IP 地址修改为同一网段的不同地址,例如:nmcli connection modify team0 ipv4.addresses 192.168.0.2/24 ...
五、 测试聚合链路 (故障转移)
-
在 Server1 上 ping Server2 的 team0 IP (
192.168.0.2
):ping 192.168.0.2
- 应能
ping
通,表示基本连通性正常。
- 应能
-
(关键测试 - 故障转移):
- 在
teamdctl team0 state
输出中找到当前活动的端口 (例如ens38
)。 - 物理断开活动端口
ens38
的网线 (或ifdown ens38
)。 - 观察
ping
命令输出。应该只有 短暂中断 (通常 1-3 个丢包),然后恢复连通。 - 立即运行
teamdctl team0 state
。确认活动端口已自动切换到备份端口 (例如ens39
)。 - 重新连接
ens38
的网线 (或ifup ens38
)。teamdctl
状态应显示ens38
恢复为备份状态 (或在某些配置下可能成为新的活动端口)。
- 在
六、 软件网桥 (Software Bridge)
概念
- 定义: 一个工作在 数据链路层 (Layer 2) 的设备,基于 MAC 地址 在网络中转发流量。
- 工作原理:
- MAC 地址学习: 网桥监听其每个端口接收到的数据帧的 源 MAC 地址,并记录该地址是从哪个端口学到的,构建一个 MAC 地址转发表 (CAM 表)。
- 报文转发决策:
- 当收到一个数据帧时,检查其 目的 MAC 地址。
- 查 MAC 地址转发表:
- 如果找到条目且目的端口与接收端口不同,则仅将该帧从对应端口转发出去。
- 如果找到条目且目的端口与接收端口相同 (表示目标主机与发送主机在同一侧),则丢弃该帧 (过滤)。
- 如果表中没有目的 MAC 地址条目,则进行 泛洪 (Flooding) - 将该帧从除接收端口之外的所有其他活动端口转发出去。
- 主要应用:
- 虚拟化: 最常见用途。允许多个虚拟机 (VM) 通过连接到同一个软件网桥来共享宿主机的单个或多个物理 NIC,使 VM 就像直接连接到物理网络一样。
- 连接不同物理网络段 (在现代交换网络中使用硬件交换机更常见)。
- 创建更复杂的网络拓扑。
- 重要特性 (补充):
- STP (Spanning Tree Protocol): 防止网络环路的关键协议。Linux 网桥默认支持 STP (
brctl stp br0 on
)。在涉及多个网桥或物理交换机的复杂拓扑中强烈建议启用。
- STP (Spanning Tree Protocol): 防止网络环路的关键协议。Linux 网桥默认支持 STP (
七、 配置软件网桥 (bridge0
)
-
创建网桥接口 (
bridge0
):nmcli connection add con-name bridge0 ifname bridge0 type bridge
-
配置网桥接口 IP 地址 (可选,静态示例):
nmcli connection modify bridge0 \ipv4.addresses 192.168.1.1/24 \ipv4.method manual \connection.autoconnect yes
说明: 如果网桥仅用于连接其他设备 (如 VM) 进行二层交换,不需要给网桥接口本身配置 IP。配置 IP 通常是为了让宿主机本身也能通过该网桥进行三层通信。
-
将物理/虚拟ens40、ens41接口连接到网桥 (
bridge-slave
):nmcli connection add con-name bridge0-ens40 ifname ens40 type bridge-slave master bridge0 nmcli connection add con-name bridge0-ens41 ifname ens41 type bridge-slave master bridge0
- 将接口
ens40
和ens41
添加为网桥bridge0
的端口。
-
激活网桥接口:
nmcli connection up bridge0
-
重启网络服务 (推荐):
systemctl restart network
注意: 同聚合链路,重启服务确保配置完全生效。
八、 测试软件网桥
-
基本连通性 (如果配置了网桥 IP):
- 尝试
ping
同一子网内的其他主机 IP。
- 尝试
-
二层连通性 & MAC 学习 (核心测试):
- 将至少两台设备 (可以是物理机、VM 或容器) 连接到
bridge0
的成员端口 (如ens40
,ens41
连接的物理网络上的设备,或连接到bridge0
的虚拟接口的 VM)。 - 确保这些设备配置了同一 IP 子网的地址 (例如
192.168.1.10/24
,192.168.1.11/24
)。 - 在其中一台设备 (
A
) 上ping
另一台设备 (B
) 的 IP。 - 在宿主机上查看网桥信息:
# 查看网桥简要信息及端口状态 brctl show # 查看网桥学习到的 MAC 地址表 (转发表) brctl showmacs bridge0
- 应能在
showmacs
输出中看到设备A
和B
的 MAC 地址,并关联到正确的网桥端口 (ens40
或ens41
)。
- 应能在
- 在设备
A
上持续ping
设备B
的同时,在宿主机上抓取网桥端口流量 (例如抓ens40
):tcpdump -i ens40 -n -e
- 初始阶段 (
B
的 MAC 未知时) 可能会看到 ARP 请求广播。 - 一旦
B
的 ARP 响应被bridge0
学习到,后续的 ICMP (ping) 请求帧应只出现在连接B
的那个端口上 (假设拓扑无环且 STP 稳定),而不会出现在其他端口 (如ens41
) 上。这验证了基于 MAC 表的单播转发。
- 初始阶段 (
- 将至少两台设备 (可以是物理机、VM 或容器) 连接到
-
STP 测试 (可选,复杂拓扑): 构建包含多个网桥/交换机的环路拓扑,启用 STP,断开一条链路观察是否自动阻塞端口阻止环路,再恢复链路观察 STP 收敛过程。
九、 IP 转发 (路由功能)
- 文档末尾的
sysctl
命令 (net.ipv4.ip_forward = 1
) 与网桥本身无关。 - 作用: 启用 Linux 内核的 IP 转发 (路由) 功能。这允许系统像路由器一样,在不同网络接口/子网之间转发 IP 数据包。
- 应用场景: 当宿主机上的软件网桥连接的设备 (
192.168.1.0/24
) 需要访问宿主机另一个物理接口 (eth0
, 假设 IP10.0.0.100/24
) 所连接的外部网络 (10.0.0.0/24
或互联网) 时,宿主机需要启用 IP 转发并配置 NAT 或路由规则才能实现。 - 配置方法:
# 临时生效 sysctl -w net.ipv4.ip_forward=1 # 永久生效 (编辑 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf 文件) echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf # 加载新配置