CentOS7上为什么重启后bond的mac地址变了

CentOS7上为什么重启后bond的mac地址变了

我有两个接口以 LACP 模式 (mode=4 <=> 802.3ad) 绑定在一起bond0

bond0重启前的mac地址:

$ cat /sys/class/net/bond0/address
xx:xx:xx:xx:xx:bf

bond0重启后的mac地址:

$ cat /sys/class/net/bond0/address
xx:xx:xx:xx:xx:bd

以下是有关网络配置的一些信息:

$ ip -o l | grep state.UP
2: em1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000\    link/ether xx:xx:xx:xx:xx:bd brd ff:ff:ff:ff:ff:ff
3: em2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000\    link/ether xx:xx:xx:xx:xx:bd brd ff:ff:ff:ff:ff:ff
7: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000\    link/ether xx:xx:xx:xx:xx:bd brd ff:ff:ff:ff:ff:ff
$ grep BONDING_OPTS= /etc/sysconfig/network-scripts/ifcfg-bond0
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
$ egrep "(MASTER|SLAVE)=" /etc/sysconfig/network-scripts/ifcfg-em?
/etc/sysconfig/network-scripts/ifcfg-em1:MASTER=bond0
/etc/sysconfig/network-scripts/ifcfg-em1:SLAVE=yes
/etc/sysconfig/network-scripts/ifcfg-em2:MASTER=bond0
/etc/sysconfig/network-scripts/ifcfg-em2:SLAVE=yes
$ egrep -v "^$|^#" /etc/NetworkManager/NetworkManager.conf
[main]
[logging]

为什么mac地址bond0变了?

答案1

考虑到最后一个八位位组只有几个,很可能两个 NICem1em2位于同一张卡上,并且绑定已从另一个 NIC 获取 MAC。

绑定将从加入绑定的第一个 NIC 获取 MAC 地址。

然而,NIC 枚举的顺序不确定

一次启动,em1具有 MAC 结尾的NICbd可能会首先加入绑定,因此绑定会选择 MAC 结尾bd

再次启动时,em2具有 MAC 结尾的NICbf可能会首先加入绑定,因此绑定会选择 MAC 结尾bf

这就是硬件枚举的工作原理。

最近的 NetworkManager 有一个功能,它可以按特定顺序将子设备连接到父设备来解决这个确切的问题,因此请迁移到 RHEL9(您可以获取免费)或 Rocky/Alma 9(如果您喜欢的话)。


另一种可能的选择是,您强制 NIC 使用这些名称em1em2尽管这些名称是 systemd 期望能够使用的保留名称。如果您正在这样做,请不要这样做。这不起作用。

让 systemd 按照自己的意愿命名设备,或者使用内核和 systemd 不希望使用的手动名称。您可能会使用netX或类似的。

相关内容