当前位置: 首页 > news >正文

Linux网络配置:聚合链路与网桥实战

Linux 网络配置:聚合链路 (Team) 与软件网桥 (Bridge)

一、 聚合链路 (Network Teaming)

概念

  • 定义: 网络组队(聚合链路)是一种将多个物理网络接口卡 (NIC) 逻辑绑定为一个单一逻辑接口 (teamX) 的技术。
  • 目的:
    • 故障转移 (Failover): 当主接口失效时,流量自动切换到备用接口,提高网络可用性。
    • 负载均衡 (Load Balancing): 在多条链路上分发网络流量,提高整体吞吐量。
  • 优势:
    • 相比传统的 bondingteaming 提供了更好的性能
    • 模块化设计使其可扩展性更强
  • NIC: Network Interface Controller (网络接口控制器)。

二、 Teamd 运行模式

teamd 守护进程支持多种运行模式 (runner):

  1. roundrobin轮询方式在所有活动端口上顺序发送数据包。
  2. activebackup 主备模式 (故障迁移)。一个端口处于活动状态处理流量,其余端口作为备份。活动端口故障时,自动切换到下一个备份端口。
  3. loadbalance 负载均衡模式。监控流量并使用哈希函数(基于源/目的 MAC、IP、端口等)选择发送端口,力求在所有活动端口上均衡分配流量。
  4. broadcast 广播容错模式。所有数据包都通过所有活动端口同时发送。主要用于极端容错场景,效率较低。

三、 配置聚合链路 (以 activebackup 模式为例) - Server1

  1. 创建组接口 (team0):

    nmcli connection add con-name team0 ifname team0 type team config '{"runner": {"name": "activebackup"}}'
    
    • con-name: 连接名称 (可自定义)。
    • ifname: 逻辑接口名称 (team0)。
    • type: 连接类型 (team)。
    • config: 指定运行模式为 activebackup
  2. 配置组接口 IP 地址 (静态):

    nmcli connection modify team0 \ipv4.addresses 192.168.0.1/24 \ipv4.method manual \connection.autoconnect yes
    
  3. 添加物理接口作为成员端口 (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
    
  • 将物理接口 ens38ens39 绑定到逻辑接口 team0
  1. 激活组接口:

    nmcli connection up team0
    
  2. 重启网络服务 (推荐):

    systemctl restart network
    

注意: 虽然激活 team0 后通常即可工作,但重启网络服务 (networkNetworkManager) 能确保所有配置完全加载,避免潜在的初始化问题。

  1. 查看组状态:
    teamdctl team0 state
    
    • 此命令输出详细的状态信息,包括当前活动端口 (active port)、成员端口状态等。

四、 配置聚合链路 - Server2

  • 在 Server2 上重复 步骤 1-5
  • 唯一区别:在 步骤 2 中,将 team0 的 IP 地址修改为同一网段的不同地址,例如:
    nmcli connection modify team0 ipv4.addresses 192.168.0.2/24 ...
    

五、 测试聚合链路 (故障转移)

  1. 在 Server1 上 ping Server2 的 team0 IP (192.168.0.2):

    ping 192.168.0.2
    
    • 应能 ping 通,表示基本连通性正常。
  2. (关键测试 - 故障转移):

    1. teamdctl team0 state 输出中找到当前活动的端口 (例如 ens38)。
    2. 物理断开活动端口 ens38 的网线 (或 ifdown ens38)。
    3. 观察 ping 命令输出。应该只有 短暂中断 (通常 1-3 个丢包),然后恢复连通。
    4. 立即运行 teamdctl team0 state。确认活动端口已自动切换到备份端口 (例如 ens39)。
    5. 重新连接 ens38 的网线 (或 ifup ens38)。teamdctl 状态应显示 ens38 恢复为备份状态 (或在某些配置下可能成为新的活动端口)。

六、 软件网桥 (Software Bridge)

概念

  • 定义: 一个工作在 数据链路层 (Layer 2) 的设备,基于 MAC 地址 在网络中转发流量。
  • 工作原理:
    1. MAC 地址学习: 网桥监听其每个端口接收到的数据帧的 源 MAC 地址,并记录该地址是从哪个端口学到的,构建一个 MAC 地址转发表 (CAM 表)。
    2. 报文转发决策:
      • 当收到一个数据帧时,检查其 目的 MAC 地址
      • MAC 地址转发表
        • 如果找到条目且目的端口与接收端口不同,则将该帧从对应端口转发出去。
        • 如果找到条目且目的端口与接收端口相同 (表示目标主机与发送主机在同一侧),则丢弃该帧 (过滤)。
        • 如果表中没有目的 MAC 地址条目,则进行 泛洪 (Flooding) - 将该帧从除接收端口之外的所有其他活动端口转发出去。
  • 主要应用:
    • 虚拟化: 最常见用途。允许多个虚拟机 (VM) 通过连接到同一个软件网桥来共享宿主机的单个或多个物理 NIC,使 VM 就像直接连接到物理网络一样。
    • 连接不同物理网络段 (在现代交换网络中使用硬件交换机更常见)。
    • 创建更复杂的网络拓扑。
  • 重要特性 (补充):
    • STP (Spanning Tree Protocol): 防止网络环路的关键协议。Linux 网桥默认支持 STP (brctl stp br0 on)。在涉及多个网桥或物理交换机的复杂拓扑中强烈建议启用

七、 配置软件网桥 (bridge0)

  1. 创建网桥接口 (bridge0):

    nmcli connection add con-name bridge0 ifname bridge0 type bridge
    
  2. 配置网桥接口 IP 地址 (可选,静态示例):

    nmcli connection modify bridge0 \ipv4.addresses 192.168.1.1/24 \ipv4.method manual \connection.autoconnect yes
    

说明: 如果网桥仅用于连接其他设备 (如 VM) 进行二层交换,不需要给网桥接口本身配置 IP。配置 IP 通常是为了让宿主机本身也能通过该网桥进行三层通信。

  1. 将物理/虚拟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
    
  • 将接口 ens40ens41 添加为网桥 bridge0 的端口。
  1. 激活网桥接口:

    nmcli connection up bridge0
    
  2. 重启网络服务 (推荐):

    systemctl restart network
    

    注意: 同聚合链路,重启服务确保配置完全生效。

八、 测试软件网桥

  1. 基本连通性 (如果配置了网桥 IP):

    • 尝试 ping 同一子网内的其他主机 IP。
  2. 二层连通性 & MAC 学习 (核心测试):

    1. 将至少两台设备 (可以是物理机、VM 或容器) 连接到 bridge0 的成员端口 (如 ens40, ens41 连接的物理网络上的设备,或连接到 bridge0 的虚拟接口的 VM)。
    2. 确保这些设备配置了同一 IP 子网的地址 (例如 192.168.1.10/24, 192.168.1.11/24)。
    3. 在其中一台设备 (A) 上 ping 另一台设备 (B) 的 IP。
    4. 在宿主机上查看网桥信息:
      # 查看网桥简要信息及端口状态
      brctl show
      # 查看网桥学习到的 MAC 地址表 (转发表)
      brctl showmacs bridge0
      
      • 应能在 showmacs 输出中看到设备 AB 的 MAC 地址,并关联到正确的网桥端口 (ens40ens41)。
    5. 在设备 A 上持续 ping 设备 B 的同时,在宿主机上抓取网桥端口流量 (例如抓 ens40):
      tcpdump -i ens40 -n -e
      
      • 初始阶段 (B 的 MAC 未知时) 可能会看到 ARP 请求广播。
      • 一旦 B 的 ARP 响应被 bridge0 学习到,后续的 ICMP (ping) 请求帧应只出现在连接 B 的那个端口上 (假设拓扑无环且 STP 稳定),而不会出现在其他端口 (如 ens41) 上。这验证了基于 MAC 表的单播转发。
  3. STP 测试 (可选,复杂拓扑): 构建包含多个网桥/交换机的环路拓扑,启用 STP,断开一条链路观察是否自动阻塞端口阻止环路,再恢复链路观察 STP 收敛过程。


九、 IP 转发 (路由功能)

  • 文档末尾的 sysctl 命令 (net.ipv4.ip_forward = 1) 与网桥本身无关
  • 作用: 启用 Linux 内核的 IP 转发 (路由) 功能。这允许系统像路由器一样,在不同网络接口/子网之间转发 IP 数据包。
  • 应用场景: 当宿主机上的软件网桥连接的设备 (192.168.1.0/24) 需要访问宿主机另一个物理接口 (eth0, 假设 IP 10.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  # 加载新配置
    
http://www.dtcms.com/a/333675.html

相关文章:

  • 开疆智能ModbusTCP转Ethernet网关连接FBOX串口服务器配置案例
  • MySQL多表查询案例
  • 360 集团20周年会:战略升级ALL IN Agent,抢占智能体时代先机
  • OSCP - Proving Grounds - CVE-2024-25180
  • 基于WSL搭建Ubuntu 22.04.x LTS开发环境
  • LLM - 使用 SGLang 部署 Qwen3-32B 与 Qwen2.5-VL-32B-Instruct
  • 《GUI-Actor: Coordinate-Free Visual Grounding for GUI Agents》论文精读笔记
  • 今日分享:C++模板(全详解)
  • 大数据系列之:设置CMS垃圾收集器
  • std::set_symmetric_difference
  • 第七十三章:AI的“黑箱”迷局:推理链路中的断点与Tensor调试——让模型“交代一切”!
  • CCS双轴相位偏移光源 让浅凹痕无处遁形
  • 【Redis】超详细基础入门学习
  • 硬件开发_基于STM32单片机的热水壶系统
  • GitHub的使用教程
  • Upload 上传 vue2前端 + 后端
  • 【DDIA】第二部分:分布式数据
  • 【大模型微调系列-02】 深度学习与大模型初识
  • Java Lambda表达式是什么,怎么用
  • C语言笔记6:C高级 part1
  • Go从入门到精通系列学习路线规划
  • 区块链技术原理(13)-以太坊燃料费Gas
  • ITM(仪器跟踪宏单元)是什么?
  • Elasticsearch赋能规章制度智能检索:从海量文档到秒级响应
  • PyInstaller打包Python应用操作备忘
  • 学习嵌入式之硬件——I2C
  • Redis7学习--管道
  • P4069 [SDOI2016] 游戏 Solution
  • “社保新规”9月施行,内容、影响与时代意义
  • Ansible 学习笔记:变量事实管理、任务控制与文件部署