Linux 如何确定桥接设备的默认 MAC 地址?我知道它与 中的“bridge id”相同brctl show,但它是如何计算的?当网络接口添加到网桥时,MAC 地址是否应该自动更改?
根据内核版本,过去的行为可能会发生变化,但目前(此处:内核 5.17.x)似乎:
如果网桥尚未手动指定 MAC 地址,则
systl -w net.ipv4.conf.br0.ignore_routes_with_linkdown=1路由正在工作并且没有linkdown财产)。ignore_routes_with_linkdown=1将具有dead/linkdown特性)。如果网桥的 MAC 地址是手动设置的(如果在创建时未设置,则其值与其当前自动生成或继承的地址不同)
添加或删除网桥端口时,网桥的 MAC 地址不会改变
当管理设置为 UP 且从未添加过任何桥接端口时,operstate 并不是 UNKNOWN:它处于 DOWN 状态。
并遵循前面描述的关于其操作状态及其端口的操作状态的行为:当至少有一个操作状态为 UP 的桥接端口时为 UP,否则为 DOWN。
我找不到任何文档来解释与在 Linux 上的网桥上设置或未设置 MAC 地址相关的这些不同行为的原因。桥接 ID 的评估方式可能存在历史关系。
为避免出现任何意外,只需设置 MAC 地址即可。
名为 的桥的示例br0:
ip link set dev br0 address 12:34:56:78:9a:bc
Run Code Online (Sandbox Code Playgroud)
或在创建时:
ip link add name br0 address 12:34:56:78:9a:bc up type bridge
Run Code Online (Sandbox Code Playgroud)
人们仍然可以使用一些预先存在的(物理)接口的 MAC 地址来设置它,例如,以避免在不使用 DUID 的情况下在br0上请求 IP 地址时更改 DHCP 行为。它可能应该在奴役接口之前设置,因为在之后设置它可能实际上没有上面所写的效果(将桥接接口的 MAC 地址设置为其相同的当前值没有效果,并且不会切换到第二个行为)。
例如,eth0在创建时复制 的 MAC 地址br0以保持 DHCP 行为一致(eth0旨在从属于br0DHCP 服务器并在 DHCP 服务器一侧),借助 JSON 输出和命令jq:
ip link add name br0 address "$(ip -json link show dev eth0 | jq -r .[].address)" up type bridge
Run Code Online (Sandbox Code Playgroud)
然后才奴役接口:
ip link set dev eth0 up master br0
Run Code Online (Sandbox Code Playgroud)
人们只能希望现有的网络配置工具能够正确地做到这一点。
注意:就像Linux 上的ifconfig或一样,是一个过时的命令。它仍然使用旧的内核 API。它已被plus取代,plus使用更新的(rt) netlink API提供新功能(例如:hairpin),但可以说可能具有不太人类可读的输出。routebrctlip linkbridge
命令示例:
ip -details link show type bridge
bridge -details link show
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6810 次 |
| 最近记录: |