链路聚合,简单来说,就是将多个物理网口绑定成一个逻辑端口,既能有效提升网络带宽,也能实现链路故障自动切换。在 FreeBSD 系统中,lagg 模块完整支持 IEEE 802.3ad 标准,即我们常说的 LACP(链路聚合控制协议)。LACP 能够在节点与聚合组之间自动协商链路状态,无需手动配置主备关系。需要注意的是,同一个聚合组(LAG)内的所有网口,必须运行在相同速率且全双工模式下。流量会被尽可能均匀地分摊到各个成员网口上,总带宽等于所有成员带宽之和。一旦某条物理链路发生故障,聚合组会迅速自动调整配置,确保剩余链路继续稳定运行。
下面直接进入实操环节,分步骤演示如何在 FreeBSD 上配置 LACP,并使用 Cisco 2950 交换机进行验证。
一、加载 lagg 内核模块
这里提供两种方式,任选其一即可。
方式1:编译进内核(推荐使用)
在内核配置文件中加入以下内容:
device lagg
随后重新编译并加载内核。
方式2:以模块形式动态加载
首先确认 /boot/kernel/lagg.ko 文件存在,然后在 /boot/loader.conf 文件中添加:
if_lagg_load="YES"
二、在 rc.conf 中配置 lagg 接口
假设系统中有两张网卡:bge0 和 bge1。以下配置的作用是:先将两个物理网口激活,然后创建一个名为 lagg0 的虚拟接口,聚合协议选用 LACP,聚合端口分别指定为 bge0 和 bge1,最后为 lagg0 分配 IP 地址 192.168.10.21/24。
ifconfig_bge0="up"
ifconfig_bge1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto lacp laggport bge0 laggport bge1 192.168.10.21 netmask 255.255.255.0"
三、Cisco 2950 交换机端的配置
在交换机侧,需要将两个端口归入同一个 channel-group,并启用 LACP 协议。以下是 running-config 中的相关配置片段:
interface FastEthernet0/23
channel-group 6 mode active
channel-protocol lacp
!
interface FastEthernet0/24
channel-group 6 mode active
channel-protocol lacp
!
具体的配置命令执行过程如下:
enable
conf t
int fa0/24
channel-protocol lacp
channel-group 6 mode active
exit
int fa0/23
channel-protocol lacp
channel-group 6 mode active
exit
exit
write
需要特别留意的是,mode active 表示交换机会主动发送 LACPDU,而 FreeBSD 端默认也是 active 模式(laggproto lacp 默认即为主动协商),这样两端才能成功建立 LACP 会话。
四、重启 PC,验证聚合效果
重启完成后,两个网口已经作为负载均衡与故障转移的链路聚合组接入到交换机。接下来分别查看两端的状态。
A. FreeBSD 端状态检查
执行 ifconfig 命令,可以看到两个物理网口都已绑定到 lagg0 上,并且状态均为 ACTIVE、COLLECTING、DISTRIBUTING:
root@s2[~]# ifconfig
bge0: flags=8843 metric 0 mtu 1500
options=9b
ether 00:0f:20:32:5a:af
media: Ethernet autoselect (100baseTX )
status: active
lagg: laggdev lagg0
bge1: flags=8843 metric 0 mtu 1500
options=9b
ether 00:0f:20:32:5a:af
media: Ethernet autoselect (100baseTX )
status: active
lagg: laggdev lagg0
lo0: flags=8049 metric 0 mtu 16384
inet 127.0.0.1 netmask 0xff000000
lagg0: flags=8843 metric 0 mtu 1500
options=9b
ether 00:0f:20:32:5a:af
inet 192.168.10.21 netmask 0xffffff00 broadcast 192.168.10.255
media: Ethernet autoselect
status: active
laggproto lacp
laggport: bge1 flags=1c
laggport: bge0 flags=1c
B. 交换机端状态查看
首先查看邻居信息,确认 FreeBSD 端已正确完成 LACP 协商:
swicth#show lacp 6 neighbor
Flags: S - Device is requesting Slow LACPDUs
F - Device is requesting Fast LACPDUs
A - Device is in Active mode P - Device is in Passive mode
Channel group 6 neighbors
Partner's information:
LACP port Oper Port Port
Port Flags Priority Dev ID Age Key Number State
Fa0/23 SA 32768 000f.2032.5aaf 3s 0x86 0x1 0x3D
Fa0/24 SA 32768 000f.2032.5aaf 5s 0x86 0x2 0x3D
接着查看 LACP 计数器,流量已经平均分配到两个端口(发送和接收的 LACPDU 数量基本一致):
swicth#show lacp 6 counters
LACPDUs Marker Marker Response LACPDUs
Port Sent Recv Sent Recv Sent Recv Pkts Err
---------------------------------------------------------------------
Channel group: 6
Fa0/23 2816 2603 0 1 1 0 0 ## 这里可以看到流量是平均分担的
Fa0/24 2818 2605 0 3 3 0 0
至此,FreeBSD 双网口 LACP 链路聚合配置全部完成,负载均衡与故障转移功能均已正常运行。如果拔掉其中一根网线,流量会自动切换到另一条链路上,业务不会中断——这正是生产环境中高可用网络所必备的能力。
