跳转到内容
搜索 RHEL 文档

    浏览当前文档目录

    RHEL 10 bond/VLAN/bridge:nmcli 建得出来,但 slave 类型有坑

    nmcli con add type bond|vlan|bridge 都能建出配置,但“配置存在”和“接口 UP”是两件事:bond 要 slave 先 up,bridge 的 slave 类型不对会一直 NO-CARRIER。本页在 393 上用 veth/dummy 做可清理的实测。

    • 环境:PVE 393,RHEL 10.2;
    • 设备:veth0/veth1(bond)、dummy0(VLAN)、dummy1+veth2(bridge);
    • 测试后全部删除。

    E3 记录:plans/content-expansion/evidence/rhel/rhel-bond-vlan/run.json(6 步,含 bond/VLAN/bridge 输出 sha256)。

    • bond:先建 bond0,再把 slave up,bond0 才会 UP;
    • VLAN:type vlan dev dummy0 id 100,ip -d link 能看到 vlan protocol 802.1Q id 100;
    • bridge:dummy1 作为 bridge-slave 不会激活,br0 一直 NO-CARRIER;换 veth2 后正常 forwarding。
    Terminal window
    sudo ip link add veth0 type veth peer name veth1
    sudo nmcli con add type bond ifname bond0 con-name bond0 \
    mode active-backup ipv4.method manual ipv4.addresses 10.102.0.1/24
    sudo nmcli con add type bond-slave ifname veth0 master bond0
    sudo nmcli con add type bond-slave ifname veth1 master bond0
    sudo nmcli con up bond-slave-veth0
    sudo nmcli con up bond-slave-veth1
    sudo nmcli con up bond0
    $ ip -br a show bond0
    bond0 UP 10.102.0.1/24 ...
    $ sudo grep -E 'Bonding Mode|Active Slave|Slave Interface' /proc/net/bonding/bond0
    Bonding Mode: fault-tolerance (active-backup)
    Currently Active Slave: veth0
    Slave Interface: veth0
    Slave Interface: veth1

    只 con up bond0 而 slave 没 up,会看到 bond0 DOWN、Active Slave: None。

    Terminal window
    sudo nmcli con add type dummy ifname dummy0 con-name dummy0
    sudo nmcli con add type vlan ifname dummy0.100 con-name vlan100 \
    dev dummy0 id 100 ipv4.method manual ipv4.addresses 10.100.0.1/24
    sudo nmcli con up vlan100
    $ ip -d link show dummy0.100 | head -2
    10: dummy0.100@dummy0: <BROADCAST,NOARP,UP,LOWER_UP> ...
    vlan protocol 802.1Q id 100 <REORDER_HDR> ...

    VLAN 接口名 dummy0.100 只是命名习惯,真正生效的是 id 100。

    先建 bridge 和 dummy slave:

    Terminal window
    sudo nmcli con add type bridge ifname br0 con-name br0 \
    ipv4.method manual ipv4.addresses 10.101.0.1/24
    sudo nmcli con add type dummy ifname dummy1 con-name dummy1
    sudo nmcli con add type bridge-slave ifname dummy1 master br0
    sudo nmcli con up br0

    结果:

    $ ip -br a show br0
    br0 DOWN 10.101.0.1/24
    $ nmcli -f NAME,DEVICE,STATE con show | grep bridge-slave
    bridge-slave-dummy1 -- --

    bridge-slave-dummy1 没有 DEVICE/STATE,br0 一直 NO-CARRIER。换成 veth:

    Terminal window
    sudo ip link add veth2 type veth peer name veth3
    sudo ip link set veth2 up
    sudo ip link set veth3 up
    sudo nmcli con add type bridge-slave ifname veth2 master br0
    sudo nmcli con up bridge-slave-veth2
    sudo nmcli con up br0
    $ ip -br a show br0
    br0 UP 10.101.0.1/24 ...
    $ sudo bridge link show
    14: veth2@veth3: <...> mtu 1500 master br0 state forwarding priority 32 cost 100
    Terminal window
    sudo nmcli con delete bond0 bond-slave-veth0 bond-slave-veth1 \
    vlan100 dummy0 br0 bridge-slave-dummy1 bridge-slave-veth2 dummy1
    sudo ip link del veth0; sudo ip link del veth2
    sudo ip link del dummy0; sudo ip link del dummy1
    ip -br link | grep -E 'bond0|vlan100|br0|dummy|veth' || echo cleaned
    • bond slave 的 connection 先 up;
    • /proc/net/bonding/bond0 有 Active Slave;
    • VLAN 的 id 与 ip -d link 一致;
    • bridge slave 的 STATE 不是空;
    • bridge link show 有 forwarding;
    • 实验设备/连接全部清理。
    • 未在真实双网卡上测试 bond(本次 veth);
    • 未测试 LACP 802.3ad;
    • 未测试 bridge 的 STP/VLAN filtering;
    • 未测试 NetworkManager 重启后的持久化。