NetworkManager配置网桥(bridge)虚拟网络(vlan) 笔记250711

NetworkManager配置网桥(bridge)虚拟网络(vlan) 笔记250711

使用 NetworkManager 配置网桥(Bridge)和虚拟局域网(VLAN)详解

NetworkManager 是现代 Linux 系统中管理网络连接的标准工具,支持通过命令行(nmcli)或图形界面配置复杂的网络拓扑。以下是配置网桥和 VLAN 的完整指南:

一、核心概念关系

graph TD A[物理接口 enp3s0] --> B[VLAN 接口 vlan10] B --> C[网桥 br0] C --> D[虚拟机/容器] style A fill:#f9f,stroke:#333 style B fill:#bbf,stroke:#333 style C fill:#f96,stroke:#333 style D fill:#9f9,stroke:#333
  • 物理接口:真实网络硬件(如 enp3s0)
  • VLAN 接口:基于物理接口的虚拟分区(如 vlan10)
  • 网桥:连接多个接口的虚拟交换机(如 br0)

二、配置前准备

1. 查看当前网络状态

bash 复制代码
nmcli device status
# 输出示例:
DEVICE   TYPE      STATE      CONNECTION 
enp3s0   ethernet  connected  enp3s0

2. 安装必要工具

bash 复制代码
sudo apt install network-manager vlan  # Debian/Ubuntu
sudo dnf install NetworkManager vlan  # Fedora/CentOS

三、完整配置流程

1. 创建 VLAN 接口

bash 复制代码
# 创建 VLAN10 接口
sudo nmcli con add type vlan con-name vlan10 dev enp3s0 id 10 ifname vlan10

# 验证创建
nmcli con show vlan10

2. 创建网桥接口

bash 复制代码
# 创建网桥 br0
sudo nmcli con add type bridge con-name br0 ifname br0

# 设置STP参数(可选)
sudo nmcli con modify br0 bridge.stp yes
sudo nmcli con modify br0 bridge.priority 4096

3. 将 VLAN 接口加入网桥

bash 复制代码
# 添加 VLAN10 作为网桥从属
sudo nmcli con add type bridge-slave con-name br-vlan10 ifname vlan10 master br0

# 验证绑定
bridge link show br0

4. 配置 IP 地址

bash 复制代码
# 静态IP配置
sudo nmcli con modify br0 ipv4.addresses '192.168.10.100/24'
sudo nmcli con modify br0 ipv4.gateway '192.168.10.1'
sudo nmcli con modify br0 ipv4.dns '8.8.8.8'
sudo nmcli con modify br0 ipv4.method manual

# 或DHCP配置
sudo nmcli con modify br0 ipv4.method auto

5. 激活所有连接

bash 复制代码
# 停用原物理接口
sudo nmcli con down "Wired connection 1"

# 激活配置
sudo nmcli con up vlan10
sudo nmcli con up br-vlan10
sudo nmcli con up br0

四、高级配置场景

场景 1:多 VLAN 网桥

bash 复制代码
# 创建 VLAN20
sudo nmcli con add type vlan con-name vlan20 dev enp3s0 id 20 ifname vlan20

# 添加 VLAN20 到网桥
sudo nmcli con add type bridge-slave con-name br-vlan20 ifname vlan20 master br0

# 激活新配置
sudo nmcli con up vlan20
sudo nmcli con up br-vlan20

场景 2:带绑定接口的网桥

bash 复制代码
# 创建绑定接口
sudo nmcli con add type bond con-name bond0 ifname bond0 mode 802.3ad

# 添加物理接口到绑定
sudo nmcli con add type bond-slave con-name bond-slave1 ifname enp3s0 master bond0
sudo nmcli con add type bond-slave con-name bond-slave2 ifname enp4s0 master bond0

# 创建 VLAN 基于绑定接口
sudo nmcli con add type vlan con-name vlan-bond10 dev bond0 id 10 ifname vlan-bond10

# 创建网桥并添加 VLAN
sudo nmcli con add type bridge con-name br-bond ifname br-bond
sudo nmcli con add type bridge-slave con-name br-vlan-bond ifname vlan-bond10 master br-bond

五、图形界面配置(GUI)

  1. 打开网络连接管理器:

    bash 复制代码
    nm-connection-editor
  2. 创建 VLAN

    • 点击 "+" 添加新连接
    • 选择 "VLAN"
    • 配置:
      • 设备:选择物理接口 (enp3s0)
      • VLAN ID:10
      • 连接名称:vlan10
  3. 创建网桥

    • 点击 "+" 添加新连接
    • 选择 "Bridge"
    • 配置:
      • 网桥名称:br0
      • STP:启用/禁用
  4. 添加 VLAN 到网桥

    • 在网桥配置中,切换到 "Bridge" 标签
    • 点击 "Add" 添加新接口
    • 选择 "VLAN" 类型
    • 选择已创建的 vlan10 接口
  5. 配置 IP

    • 切换到 "IPv4 Settings" 标签
    • 方法:手动或 DHCP
    • 添加 IP 地址/网关/DNS

六、验证与监控

1. 查看网桥状态

bash 复制代码
bridge -c link show br0
# 输出示例:
2: vlan10@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding

2. 检查 VLAN 配置

bash 复制代码
cat /proc/net/vlan/vlan10
# 输出示例:
vlan10  VID: 10  REORDER_HDR: 1  dev->priv_flags: 1

3. 测试网络连通性

bash 复制代码
ping -I br0 8.8.8.8 -c 4

4. 监控实时流量

bash 复制代码
sudo tcpdump -i br0 -nn -v

七、故障排除

1. VLAN 未激活

bash 复制代码
# 检查物理接口状态
ip link show enp3s0

# 验证VLAN模块加载
lsmod | grep 8021q

# 手动加载模块
sudo modprobe 8021q

2. 网桥未转发流量

bash 复制代码
# 检查STP阻塞状态
bridge stp show br0

# 禁用STP临时测试
sudo nmcli con modify br0 bridge.stp no
sudo nmcli con up br0

3. IP 地址未分配

bash 复制代码
# 手动获取IP
sudo dhclient -v br0

# 检查DHCP请求
journalctl -u NetworkManager | grep DHCP

4. 性能问题

bash 复制代码
# 增加网桥缓存
sudo sysctl -w net.core.netdev_max_backlog=10000

# 禁用防火墙检查
sudo sysctl -w net.bridge.bridge-nf-call-iptables=0

八、持久化与备份

1. 配置文件位置

bash 复制代码
/etc/NetworkManager/system-connections/
├── br0.nmconnection
├── br-vlan10.nmconnection
└── vlan10.nmconnection

2. 备份配置

bash 复制代码
sudo cp -r /etc/NetworkManager/system-connections/ ~/nm-backup

3. 恢复配置

bash 复制代码
sudo cp ~/nm-backup/* /etc/NetworkManager/system-connections/
sudo nmcli con reload

九、常用命令速查

命令 功能
nmcli con show 查看所有连接
nmcli con up <name> 激活连接
nmcli con down <name> 停用连接
nmcli con delete <name> 删除连接
nmcli dev disconnect <ifname> 断开设备
nmcli -f GENERAL,WIFI-PROPERTIES dev wifi 扫描WiFi

十、最佳实践

  1. 命名规范

    • VLAN 接口:vlan<id> (如 vlan10)
    • 网桥接口:br-<purpose> (如 br-mgmt)
    • 连接名称:<type>-<id> (如 vlan10, br-mgmt)
  2. 安全隔离

    bash 复制代码
    # 启用MAC过滤
    sudo nmcli con modify br0 bridge.mac-address 00:11:22:33:44:55
    sudo nmcli con modify br0 bridge.unicast-flood no
  3. 云环境适配

    bash 复制代码
    # AWS/Azure 特殊配置
    sudo nmcli con modify "Wired connection" ipv4.ignore-auto-routes true
    sudo nmcli con modify "Wired connection" ipv4.never-default yes
  4. 性能优化

    bash 复制代码
    # 禁用不需要的服务
    sudo nmcli con modify br0 ipv6.method disabled
    
    # 增加缓冲区
    sudo nmcli con modify br0 ethernet.mtu 9000

通过以上配置,您可以创建复杂的网络拓扑:

  1. 物理接口承载多个 VLAN
  2. VLAN 接口加入网桥
  3. 虚拟机/容器通过网桥接入特定 VLAN
  4. 实现网络隔离和流量控制

所有配置在系统重启后自动生效,可通过 nmcli 或图形界面轻松管理。







NetworkManager 配置网桥(Bridge)与虚拟局域网(VLAN)详解

NetworkManager 是 Linux 系统中广泛使用的网络管理工具,提供了命令行(nmcli)和图形界面两种方式来配置复杂的网络拓扑。下面我将详细介绍如何使用 NetworkManager 配置网桥和 VLAN。

一、核心概念

1. NetworkManager 对象模型

graph TD C[Connection] -->|controls| I[Interface] I -->|physical| P[Physical Device] I -->|virtual| V[Virtual Device] V --> B[Bridge] V --> VL[VLAN] V --> BOND[Bond]

2. 关键术语

  • 连接(Connection):配置文件的逻辑表示
  • 接口(Interface):物理或虚拟网络设备
  • 主连接(Master Connection):控制其他连接的连接(如网桥)
  • 从连接(Slave Connection):被主连接控制的连接(如网桥成员)

二、使用 nmcli 配置网桥和 VLAN

1. 创建基础网桥

bash 复制代码
# 创建网桥连接
nmcli connection add type bridge con-name br0 ifname br0

# 添加物理接口到网桥
nmcli connection add type bridge-slave con-name br0-eth0 ifname eth0 master br0

# 配置网桥IP(静态)
nmcli connection modify br0 ipv4.addresses 192.168.1.100/24
nmcli connection modify br0 ipv4.gateway 192.168.1.1
nmcli connection modify br0 ipv4.dns "8.8.8.8"
nmcli connection modify br0 ipv4.method manual

# 或者配置DHCP
nmcli connection modify br0 ipv4.method auto

# 启动连接
nmcli connection up br0

2. 创建带 VLAN 的网桥

bash 复制代码
# 在物理接口上创建VLAN
nmcli connection add type vlan con-name eth0.100 dev eth0 id 100

# 创建网桥
nmcli connection add type bridge con-name br-vlan100 ifname br-vlan100

# 将VLAN接口加入网桥
nmcli connection add type bridge-slave con-name br-vlan100-port ifname eth0.100 master br-vlan100

# 配置网桥IP
nmcli connection modify br-vlan100 ipv4.addresses 10.10.10.1/24
nmcli connection modify br-vlan100 ipv4.method manual

# 启动连接
nmcli connection up br-vlan100

3. 高级配置:绑定接口 + VLAN + 网桥

bash 复制代码
# 创建绑定接口
nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup

# 添加物理接口到绑定
nmcli connection add type bond-slave con-name bond0-eth1 ifname eth1 master bond0
nmcli connection add type bond-slave con-name bond0-eth2 ifname eth2 master bond0

# 在绑定接口上创建VLAN
nmcli connection add type vlan con-name bond0.100 dev bond0 id 100

# 创建网桥
nmcli connection add type bridge con-name br-bond-vlan ifname br-bond-vlan

# 将VLAN接口加入网桥
nmcli connection add type bridge-slave con-name br-bond-vlan-port ifname bond0.100 master br-bond-vlan

# 配置网桥IP
nmcli connection modify br-bond-vlan ipv4.addresses 172.16.100.1/24
nmcli connection modify br-bond-vlan ipv4.method manual

# 启动所有连接
nmcli connection up bond0
nmcli connection up bond0.100
nmcli connection up br-bond-vlan

三、使用图形界面配置(GNOME)

1. 创建网桥

  1. 打开"设置" → "网络"
  2. 点击右下角⚙️图标 → "添加配置文件" → 选择"网桥"
  3. 输入连接名称(如"Network Bridge")
  4. 在"网桥"选项卡:
    • 添加接口:点击"+"添加物理接口
    • 配置STP等高级选项
  5. 在"IPv4/IPv6"选项卡配置IP地址
  6. 点击"应用"

2. 创建VLAN

  1. 在"网络"设置中点击⚙️图标 → "添加配置文件" → 选择"VLAN"
  2. 配置:
    • 父设备:选择物理接口(如eth0)
    • VLAN ID:输入VLAN号(如100)
    • VLAN接口名:自动生成(如eth0.100)
  3. 配置IP地址(可选)
  4. 点击"应用"

3. 将VLAN加入网桥

  1. 编辑已创建的网桥连接
  2. 在"网桥"选项卡点击"添加"
  3. 选择"VLAN接口" → 选择创建的VLAN接口
  4. 保存配置

四、配置文件详解

NetworkManager 配置存储在 /etc/NetworkManager/system-connections/ 目录

1. 网桥配置文件示例 (br0.nmconnection)

ini 复制代码
[connection]
id=br0
type=bridge
interface-name=br0
permissions=

[bridge]
stp=true
priority=32768

[ipv4]
address1=192.168.1.100/24,192.168.1.1
dns=8.8.8.8;
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=auto

2. VLAN配置文件示例 (eth0.100.nmconnection)

ini 复制代码
[connection]
id=eth0.100
type=vlan
interface-name=eth0.100
master=br-vlan100  # 所属网桥
slave-type=bridge   # 从属类型为网桥

[vlan]
id=100
parent=eth0

3. 网桥成员配置文件 (br0-eth0.nmconnection)

ini 复制代码
[connection]
id=br0-eth0
type=ethernet
interface-name=eth0
master=br0         # 所属主连接
slave-type=bridge   # 从属类型

[ethernet]
mac-address=00:11:22:33:44:55

五、常用管理命令

1. 查看连接状态

bash 复制代码
nmcli connection show
nmcli connection show br0

2. 查看设备状态

bash 复制代码
nmcli device status
nmcli device show br0

3. 重新加载配置

bash 复制代码
nmcli connection reload

4. 重启连接

bash 复制代码
nmcli connection down br0 && nmcli connection up br0

5. 查看VLAN信息

bash 复制代码
nmcli -f general,vlan dev show eth0.100

六、高级配置技巧

1. 配置网桥参数

bash 复制代码
nmcli connection modify br0 bridge.stp no        # 禁用STP
nmcli connection modify br0 bridge.hello-time 2   # 设置hello时间
nmcli connection modify br0 bridge.priority 16384 # 设置网桥优先级

2. VLAN过滤

bash 复制代码
# 在网桥上启用VLAN过滤
nmcli connection modify br0 bridge.vlan-filtering yes

# 配置VLAN成员
nmcli connection modify br0-port1 bridge-port.vlans "10-20,30"  # 允许VLAN 10-20和30
nmcli connection modify br0-port2 bridge-port.pvid 100          # 设置默认VLAN

3. 持久化MAC地址

bash 复制代码
nmcli connection modify br0 ethernet.cloned-mac-address 00:11:22:33:44:55

4. 配置MTU

bash 复制代码
nmcli connection modify br0 ethernet.mtu 9000

七、常见问题解决

1. 网桥无法启动

  • 检查journalctl -u NetworkManager
  • 可能原因:物理接口被其他连接占用
  • 解决 :删除冲突连接 nmcli connection delete <name>

2. VLAN流量不通

  • 检查bridge vlan show

  • 解决

    bash 复制代码
    # 确保交换机端口配置为trunk模式
    # 检查VLAN过滤设置
    nmcli connection modify br0 bridge.vlan-filtering yes

3. 网桥成员接口不工作

  • 检查nmcli device show <interface>

  • 解决 :确保物理接口连接已激活

    bash 复制代码
    nmcli connection up br0-eth0

4. 网络重启后配置丢失

  • 原因:未正确保存配置

  • 解决

    bash 复制代码
    nmcli connection save
    systemctl restart NetworkManager

八、实际应用场景

1. KVM虚拟机网络

bash 复制代码
# 创建专用网桥
nmcli connection add type bridge con-name br-kvm ifname br-kvm
nmcli connection add type bridge-slave con-name br-kvm-eth0 ifname eth0 master br-kvm

# 配置静态IP
nmcli connection modify br-kvm ipv4.addresses 192.168.100.1/24
nmcli connection modify br-kvm ipv4.method manual

# 在KVM中使用该网桥
virt-install --network bridge=br-kvm ...

2. 容器网络隔离

bash 复制代码
# 创建带VLAN的网桥
nmcli connection add type vlan con-name eth0.200 dev eth0 id 200
nmcli connection add type bridge con-name br-container ifname br-container
nmcli connection add type bridge-slave con-name br-container-port ifname eth0.200 master br-container

# 配置容器使用该网桥
docker network create -d macvlan \
  --subnet=10.20.0.0/24 \
  --gateway=10.20.0.1 \
  -o parent=br-container \
  container-net

3. 企业级网络拓扑

graph TB E1[eth1] --> BOND[bond0] E2[eth2] --> BOND BOND --> VLAN100[vlan100] BOND --> VLAN200[vlan200] VLAN100 --> BR_MGMT[br-mgmt] VLAN200 --> BR_DATA[br-data] BR_MGMT --> MGMT[管理网络] BR_DATA --> DATA[数据网络]

九、重要注意事项

  1. 依赖关系

    • 先创建从属连接(物理接口、VLAN等)
    • 再创建主连接(网桥)
  2. 启动顺序

    bash 复制代码
    # 正确顺序
    nmcli connection up bond0
    nmcli connection up bond0.100
    nmcli connection up br-vlan100
  3. WiFi桥接限制

    • 标准WiFi不支持直接桥接
    • 需使用特殊模式(如WDS或4地址模式)
  4. 云环境

    • AWS/Azure等云平台需要特殊配置
    • 可能需要启用"允许转发"选项
  5. 防火墙

    bash 复制代码
    # 允许网桥流量
    firewall-cmd --zone=trusted --add-interface=br0 --permanent
    firewall-cmd --reload

通过NetworkManager,您可以高效地管理复杂的网络配置,所有设置都能在重启后保持持久化。对于生产环境,建议使用nmcli命令以便自动化部署。







以下是使用NetworkManager配置网桥(Bridge)和虚拟局域网(VLAN)的完整指南,涵盖基础配置、高级组合及故障处理方案。所有操作均基于nmcli命令实现持久化配置。


一、网桥(Bridge)配置

1. 基础网桥创建

将物理网卡(如enp1s0)桥接到br0,使虚拟机/容器直接接入物理网络:

bash 复制代码
# 创建网桥(无IP,纯二层转发)
sudo nmcli con add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled

# 添加物理网卡到网桥
sudo nmcli con add type bridge-slave ifname enp1s0 master br0 con-name br0-slave

# 启用网桥并禁用STP(避免网络延迟)
sudo nmcli con modify br0 bridge.stp no
sudo nmcli con up br0
2. 网桥IP配置
  • 静态IP

    bash 复制代码
    sudo nmcli con modify br0 ipv4.addresses 192.168.1.100/24 \
      ipv4.gateway 192.168.1.1 \
      ipv4.dns "8.8.8.8" \
      ipv4.method manual
  • DHCP

    bash 复制代码
    sudo nmcli con modify br0 ipv4.method auto
3. 验证网桥
bash 复制代码
bridge link show br0  # 查看桥接接口
ip addr show br0     # 检查IP分配

关键点

  • 物理网卡(enp1s0)必须释放IP(由网桥接管)。
  • 生产环境建议禁用STP(bridge.stp no)以降低延迟。

二、虚拟局域网(VLAN)配置

1. 基于物理接口创建VLAN

在物理网卡enp1s0上创建VLAN ID 10的子接口:

bash 复制代码
# 创建VLAN接口
sudo nmcli con add type vlan con-name vlan10 ifname vlan10 dev enp1s0 id 10

# 配置VLAN IP(静态示例)
sudo nmcli con modify vlan10 ipv4.addresses 10.10.10.2/24 ipv4.method manual
sudo nmcli con up vlan10
2. 基于网桥创建VLAN

将VLAN接口绑定到网桥br0,实现多虚拟机VLAN隔离:

bash 复制代码
# 创建VLAN并绑定到网桥
sudo nmcli con add type vlan slave-type bridge con-name br0-vlan10 ifname vlan10 \
  dev br0 id 10 master br0

# 激活配置
sudo nmcli con up br0-vlan10

应用场景

  • 物理接口VLAN:主机直接接入特定VLAN网络。
  • 网桥VLAN:虚拟机通过br0接入不同VLAN(如vlan10vlan20)。

三、高级组合配置

1. 绑定(Bonding)+ 网桥 + VLAN

实现高可用网络:双网卡绑定 → 网桥 → VLAN接口。

bash 复制代码
# 创建绑定接口(active-backup模式)
sudo nmcli con add type bond con-name bond0 ifname bond0 \
  bond.options "mode=active-backup,miimon=100"

# 添加物理网卡到绑定
sudo nmcli con add type bond-slave ifname enp1s0 master bond0 con-name bond0-slave1
sudo nmcli con add type bond-slave ifname enp2s0 master bond0 con-name bond0-slave2

# 创建网桥并绑定bond0
sudo nmcli con add type bridge con-name br-bond ifname br-bond
sudo nmcli con add type bridge-slave ifname bond0 master br-bond con-name br-bond-slave

# 在网桥上创建VLAN
sudo nmcli con add type vlan con-name br-bond-vlan20 ifname vlan20 \
  dev br-bond id 20 master br-bond
2. Open vSwitch (OVS) 网桥

适用于SDN环境(需安装NetworkManager-ovs):

bash 复制代码
# 创建OVS网桥及端口
sudo nmcli con add type ovs-bridge con-name ovs-bridge ifname ovs-bridge
sudo nmcli con add type ovs-port con-name ovs-port-eth master ovs-bridge
sudo nmcli con add type ethernet con-name ovs-eth ifname enp1s0 master ovs-port-eth

# 添加VLAN端口
sudo nmcli con add type ovs-port con-name ovs-port-vlan30 master ovs-bridge \
  ovs-port.tag 30
sudo nmcli con add type ovs-interface con-name ovs-vlan30 master ovs-port-vlan30

四、故障排除与优化

1. 常见问题
现象 解决方案 命令示例
网桥未激活 检查物理网卡是否释放IP ip addr show enp1s0
VLAN不通 验证交换机端口Trunk配置 nmcli con show vlan10
OVS服务未启动 重启服务并检查防火墙 systemctl restart openvswitch
2. 关键命令
bash 复制代码
nmcli con show --active       # 查看活跃连接
bridge vlan show              # 显示VLAN映射
ovs-vsctl show                # 检查OVS配置(若使用)
journalctl -u NetworkManager  # 查看网络管理日志
3. 安全优化
  • 禁用IPv6路由通告 (防中间人攻击):

    bash 复制代码
    sudo nmcli con modify br0 ipv6.accept-ra no
  • 防火墙规则 (仅允许SSH):

    bash 复制代码
    sudo nmcli con modify br0 firewall.0 "port=22 protocol=tcp action=accept"

五、配置模式对比

方案 适用场景 优点 限制
基础网桥 虚拟机直连物理网络 配置简单,延迟低 无冗余机制
Bonding+网桥 高可用服务器 链路冗余,支持故障切换 需多物理网卡
OVS网桥 SDN/云平台 支持VLAN隧道、流表高级功能 依赖额外软件包
物理接口VLAN 主机接入特定VLAN 无需网桥,直接隔离 虚拟机无法共享

操作前必读

1️⃣ 生产环境操作前备份配置:nmcli con export > nm_backup.txt

2️⃣ 远程主机务必通过控制台(IPMI/iDRAC)操作,避免网络中断失联。

3️⃣ 若网桥MAC地址变化导致DHCP问题,需在路由器更新静态租约。







在Linux系统中使用NetworkManager配置网桥(Bridge)、VLAN虚拟网络需要分步骤操作。以下是详细配置指南:


一、环境准备

  1. 确认NetworkManager版本(建议1.28+):

    bash 复制代码
    nmcli --version
  2. 查看物理网卡名称:

    bash 复制代码
    ip link show

二、配置网桥(Bridge)

1. 创建网桥
bash 复制代码
nmcli connection add type bridge con-name br0 ifname br0 \
  ipv4.method disabled ipv6.method disabled
2. 将物理网卡加入网桥
bash 复制代码
nmcli connection add type ethernet con-name br0-slave-1 ifname enp1s0 \
  master br0

三、配置VLAN子接口

1. 创建VLAN连接(以VLAN ID 10为例)
bash 复制代码
nmcli connection add type vlan con-name vlan10 ifname enp1s0.10 \
  dev enp1s0 id 10
2. 将VLAN接口加入网桥
bash 复制代码
nmcli connection modify vlan10 master br0

四、配置IP地址(可选)

1. 为网桥设置静态IP
bash 复制代码
nmcli connection modify br0 \
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns "8.8.8.8,8.8.4.4"
2. 或启用DHCP
bash 复制代码
nmcli connection modify br0 ipv4.method auto

五、激活配置

bash 复制代码
nmcli connection down br0-slave-1 && nmcli connection up br0

六、验证配置

bash 复制代码
ip -d link show br0        # 查看网桥状态
bridge vlan show           # 查看VLAN配置
nmcli connection show      # 检查连接关系

七、多VLAN场景示例

bash 复制代码
# 创建VLAN 20
nmcli connection add type vlan con-name vlan20 ifname enp1s0.20 dev enp1s0 id 20
nmcli connection modify vlan20 master br0

# 创建VLAN 30
nmcli connection add type vlan con-name vlan30 ifname enp1s0.30 dev enp1s0 id 30
nmcli connection modify vlan30 master br0

八、注意事项

  1. 物理网卡配置:加入网桥的物理网卡需禁用独立IP配置

  2. STP协议 :默认启用生成树协议,可通过以下命令关闭:

    bash 复制代码
    nmcli connection modify br0 bridge.stp no
  3. 持久化配置:NetworkManager默认自动保存配置

  4. 防火墙规则:需单独配置iptables/nftables规则处理VLAN流量


九、故障排查

  1. 检查服务状态:

    bash 复制代码
    systemctl status NetworkManager
  2. 查看日志:

    bash 复制代码
    journalctl -u NetworkManager -f
  3. 验证VLAN标签:

    bash 复制代码
    tcpdump -i enp1s0 -e -n -vv

通过以上步骤,您可以在NetworkManager管理下实现网桥与VLAN的协同工作,适用于虚拟化环境、容器网络隔离等场景。







在 Linux 系统中,通过 NetworkManager 配置 网桥(Bridge)虚拟网络(VLAN) 的步骤如下。以下是基于 nmcli(NetworkManager 命令行工具)的详细操作指南:


1. 安装 NetworkManager 工具

确保系统已安装 NetworkManagerbridge-utils(用于 VLAN 支持):

bash 复制代码
# Debian/Ubuntu
sudo apt install network-manager bridge-utils

# CentOS/RHEL
sudo yum install NetworkManager bridge-utils

2. 启动并启用 NetworkManager 服务

bash 复制代码
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager

3. 创建网桥(Bridge)

步骤 1:创建网桥连接
bash 复制代码
nmcli connection add type bridge con-name br0 ifname br0 autoconnect yes
  • con-name br0:网桥的名称。
  • ifname br0:网桥的接口名称。
步骤 2:关闭 STP(可选)
bash 复制代码
nmcli con modify br0 bridge.stp no
  • STP(生成树协议)默认启用,关闭后可减少网络延迟。
步骤 3:配置网桥的 IP 地址
bash 复制代码
nmcli con modify br0 ipv4.addresses 192.168.1.100/24
nmcli con modify br0 ipv4.gateway 192.168.1.1
nmcli con modify br0 ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con modify br0 ipv4.method manual
  • 设置静态 IP 地址、网关和 DNS。
步骤 4:激活网桥
bash 复制代码
nmcli con up br0

4. 将物理网卡加入网桥

假设物理网卡为 ens192,将其加入网桥 br0

bash 复制代码
nmcli connection add type bridge-slave con-name br0-ens192 ifname ens192 master br0
  • master br0:指定该接口的主网桥为 br0
  • 激活连接:
bash 复制代码
nmcli con up br0-ens192

5. 配置 VLAN(虚拟网络)

步骤 1:创建 VLAN 接口

假设物理网卡为 ens192,VLAN ID 为 100

bash 复制代码
nmcli connection add type vlan con-name ens192.100 ifname ens192.100 \
    dev ens192 id 100
  • dev ens192:物理网卡名称。
  • id 100:VLAN 标识符。
步骤 2:配置 VLAN 接口的 IP 地址
bash 复制代码
nmcli con modify ens192.100 ipv4.addresses 192.168.2.100/24
nmcli con modify ens192.100 ipv4.gateway 192.168.2.1
nmcli con modify ens192.100 ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con modify ens192.100 ipv4.method manual
步骤 3:激活 VLAN 接口
bash 复制代码
nmcli con up ens192.100

6. 验证配置

查看接口状态
bash 复制代码
ip a show

确认 br0ens192.100 接口已启用,并分配了正确的 IP 地址。

测试网络连通性
bash 复制代码
ping 8.8.8.8

7. 高级配置(可选)

启用负载均衡或故障转移

如果需要将多个物理网卡加入网桥以实现负载均衡或故障转移,可以添加多个 bridge-slave 连接:

bash 复制代码
nmcli connection add type bridge-slave con-name br0-ens193 ifname ens193 master br0
nmcli con up br0-ens193
配置巨型帧(Jumbo Frames)
bash 复制代码
nmcli con modify br0 ipv4.mtu 9000
nmcli con up br0

8. 保存并持久化配置

NetworkManager 的配置默认已持久化,重启后会自动应用。可以通过以下命令检查:

bash 复制代码
nmcli con show

常见问题排查

  1. 网桥未生效
    • 检查 nmcli con show 中的连接状态。
    • 确保物理网卡已正确加入网桥。
  2. VLAN 无法通信
    • 检查交换机端口是否启用了 VLAN 标记(802.1Q)。
    • 使用 tcpdumpwireshark 抓包分析流量。
  3. IP 地址冲突
    • 确保网桥和 VLAN 接口的 IP 地址在同一子网内,或配置正确的路由。

通过以上步骤,您可以使用 NetworkManager 配置网桥和 VLAN 虚拟网络。如果需要进一步优化或支持复杂拓扑,建议结合 ovs(Open vSwitch)或其他虚拟化工具。







在Linux系统中,NetworkManager是一个强大的网络配置工具,可用于创建网桥(Bridge)和虚拟网络(VLAN)。以下是使用NetworkManager配置这两种网络的详细步骤:

一、使用NetworkManager配置网桥(Bridge)

1. 创建网桥连接
bash 复制代码
# 创建名为br0的网桥连接
sudo nmcli connection add type bridge con-name br0 ifname br0

# 配置网桥IP地址(静态IP示例)
sudo nmcli connection modify br0 ipv4.addresses "192.168.1.10/24" \
    ipv4.gateway "192.168.1.1" \
    ipv4.dns "8.8.8.8,1.1.1.1" \
    ipv4.method manual \
    connection.autoconnect yes
2. 添加物理网卡到网桥
bash 复制代码
# 将eth0添加到br0(假设物理网卡为eth0)
sudo nmcli connection add type bridge-slave ifname eth0 master br0

# 禁用eth0的独立IP配置
sudo nmcli connection modify eth0 ipv4.method disabled
3. 激活连接
bash 复制代码
sudo nmcli connection up br0
sudo nmcli connection up bridge-slave-eth0
4. 验证配置
bash 复制代码
# 查看网桥信息
brctl show br0

# 检查IP地址
ip addr show br0

二、使用NetworkManager配置VLAN

1. 创建基于物理网卡的VLAN
bash 复制代码
# 在eth0上创建VLAN 10(VLAN ID为10)
sudo nmcli connection add type vlan con-name eth0.10 ifname eth0.10 dev eth0 id 10

# 配置VLAN的IP地址(静态IP示例)
sudo nmcli connection modify eth0.10 ipv4.addresses "192.168.10.10/24" \
    ipv4.gateway "192.168.10.1" \
    ipv4.dns "8.8.8.8" \
    ipv4.method manual \
    connection.autoconnect yes
2. 激活VLAN连接
bash 复制代码
sudo nmcli connection up eth0.10
3. 验证配置
bash 复制代码
# 查看VLAN信息
ip -d link show eth0.10

三、组合配置:网桥 + VLAN

场景:创建包含多个VLAN的网桥
bash 复制代码
# 1. 创建网桥
sudo nmcli connection add type bridge con-name br0 ifname br0

# 2. 创建基于eth0的VLAN 10和VLAN 20
sudo nmcli connection add type vlan con-name eth0.10 ifname eth0.10 dev eth0 id 10
sudo nmcli connection add type vlan con-name eth0.20 ifname eth0.20 dev eth0 id 20

# 3. 将VLAN添加到网桥
sudo nmcli connection add type bridge-slave ifname eth0.10 master br0
sudo nmcli connection add type bridge-slave ifname eth0.20 master br0

# 4. 配置网桥IP(可选,取决于网络需求)
sudo nmcli connection modify br0 ipv4.addresses "192.168.1.10/24" \
    ipv4.gateway "192.168.1.1" \
    ipv4.method manual

四、配置文件位置

NetworkManager的连接配置文件存储在:

bash 复制代码
/etc/NetworkManager/system-connections/

每个连接对应一个配置文件,例如:

  • 网桥:/etc/NetworkManager/system-connections/br0
  • VLAN:/etc/NetworkManager/system-connections/eth0.10

五、图形界面配置方法

  1. 打开网络连接设置

    • GNOME:设置 → 网络 → 齿轮图标 → 添加
    • KDE:系统设置 → 网络连接
  2. 创建网桥

    • 点击 添加 → 选择 网桥
    • 配置 IPv4设置(静态IP或DHCP)
    • 端口 选项卡中添加物理网卡
  3. 创建VLAN

    • 点击 添加 → 选择 VLAN
    • 指定父设备(如eth0)和VLAN ID
    • 配置IP地址

六、故障排查

  1. 查看连接状态

    bash 复制代码
    nmcli connection show
  2. 检查设备状态

    bash 复制代码
    nmcli device status
  3. 查看详细日志

    bash 复制代码
    journalctl -u NetworkManager -b
  4. 重新加载配置

    bash 复制代码
    sudo nmcli connection reload

七、注意事项

  1. STP(生成树协议)

    若存在环路风险,启用STP:

    bash 复制代码
    sudo nmcli connection modify br0 bridge.stp yes
  2. VLAN ID冲突

    确保网络中VLAN ID唯一,避免冲突。

  3. 服务依赖

    确保NetworkManager服务运行:

    bash 复制代码
    sudo systemctl status NetworkManager

通过NetworkManager,你可以灵活配置网桥和VLAN,满足虚拟化、网络隔离和多租户环境的需求。配置完成后,这些网络设置将在系统重启后自动生效。







以下是在 NetworkManager 中配置网桥和虚拟网络 VLAN 的操作:

配置网桥

  • 创建网桥
bash 复制代码
nmcli con add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled

这条命令创建了一个名为 br0 的网桥,初始状态下不配置 IP 地址。

  • 添加成员接口到网桥
bash 复制代码
nmcli con add type bridge-slave con-name br0-eth1 ifname eth1 master br0

将物理接口 eth1 添加到网桥 br0 中。若要添加多个物理接口,重复此命令即可。

  • 配置网桥的 IP 地址
bash 复制代码
nmcli con mod br0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8"

为网桥 br0 配置静态 IP 地址、子网掩码、网关和 DNS 服务器。

  • 开启 STP 功能
bash 复制代码
nmcli con mod br0 bridge.stp yes

开启网桥 br0 的生成树协议(STP),以防止网络环路。

  • 启动或停止网桥
bash 复制代码
nmcli con up br0
nmcli con down br0

分别用于启动和停止网桥 br0

  • 查看网桥的配置
bash 复制代码
nmcli con show | grep bridge

查看网桥的配置信息。

配置虚拟网络 VLAN

  • 创建 VLAN 接口
bash 复制代码
nmcli con add con-name vlan100 ifname vlan100 type vlan id 100 dev ens32 ipv4.method manual ipv4.address 192.168.100.100/24 ipv4.gateway 192.168.100.254 ipv4.dns 114.114.114.114

在物理网卡 ens32 上创建 VLAN ID 为 100 的 VLAN 接口 vlan100,并为其配置静态 IP 地址、子网掩码、网关和 DNS 服务器。

  • 将 VLAN 接口桥接到网桥
bash 复制代码
nmcli con mod br0 +bridge.port 100 +bridge.settings stp on

将 VLAN 接口 vlan100 桥接到网桥 br0 上。







使用 NetworkManager 配置网桥和 VLAN 的步骤

1. 创建 VLAN 接口

假设物理网卡为 eth0,需创建 VLAN ID 为 10 的虚拟接口:

bash 复制代码
nmcli connection add type vlan \
    con-name vlan10 \
    ifname vlan10 \
    dev eth0 \
    id 10
  • 说明
    dev eth0 指定物理网卡,id 10 为 VLAN ID,ifname vlan10 是虚拟接口名称。
2. 创建网桥接口

创建名为 br0 的网桥:

bash 复制代码
nmcli connection add type bridge \
    con-name br0 \
    ifname br0
3. 将 VLAN 接口加入网桥

将 VLAN 接口 vlan10 绑定为网桥 br0 的从属端口:

bash 复制代码
nmcli connection add type bridge-slave \
    con-name br0-port1 \
    ifname vlan10 \
    master br0
4. 配置 IP 地址(可选)

为网桥 br0 设置静态 IP(例如 192.168.10.1/24):

bash 复制代码
nmcli connection modify br0 \
    ipv4.addresses 192.168.10.1/24 \
    ipv4.method manual
5. 激活连接

按顺序激活所有配置:

bash 复制代码
nmcli connection up vlan10  # 激活 VLAN
nmcli connection up br0-port1  # 激活网桥从属端口
nmcli connection up br0       # 激活网桥
6. 验证配置
  • 检查接口状态:

    bash 复制代码
    ip addr show br0     # 查看网桥 IP
    bridge link show     # 查看网桥绑定端口
    cat /proc/net/vlan/vlan10  # 验证 VLAN 配置
  • 测试连通性:

    bash 复制代码
    ping -I br0 192.168.10.2  # 通过网桥测试通信

关键注意事项

  1. 依赖顺序
    VLAN 接口需在物理网卡激活后启动,网桥需在从属端口就绪后启动。
  2. 物理网卡配置
    物理网卡(如 eth0不能配置 IP 地址,否则会与网桥冲突。
  3. NetworkManager 服务
    确保服务运行:systemctl enable --now NetworkManager
  4. 防火墙
    若需跨 VLAN 通信,需配置防火墙规则(如 firewalldnftables)。

故障排查

  • 连接失败
    检查日志:journalctl -u NetworkManager -f

  • VLAN 未生效
    确认交换机端口已配置为 Trunk 模式并允许 VLAN 10 通过。

  • 网桥未转发流量
    验证内核转发已启用:

    bash 复制代码
    sysctl net.ipv4.ip_forward=1  # 临时生效
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf  # 永久生效

应用场景

此配置适用于:

  1. 虚拟机/容器网络
    将虚拟机(如 KVM)的虚拟网卡绑定到 br0,实现隔离通信。
  2. 多租户网络
    不同 VLAN 对应不同租户,网桥提供同一 VLAN 内的二层互通。
  3. 网络分段
    如将管理流量(VLAN 10)与业务流量(VLAN 20)通过不同网桥隔离。

相关问题

  1. 如何在 NetworkManager 中配置多个 VLAN 绑定到同一网桥?
  2. NetworkManager 与 netplansystemd-networkd 配置桥接+VLAN 有何区别?
  3. 如何为网桥接口配置 DHCP 客户端?
  4. NetworkManager 配置的 VLAN 接口是否支持 802.1Q-in-Q(嵌套 VLAN)?

: 引用自 Linux Bridge VLAN 功能文档,适用于虚拟化环境中的网络分段需求。







在 Linux 中,可以通过 NetworkManager 图形界面或命令行工具配置 网桥(Bridge)VLAN 虚拟网络。以下是详细步骤:


一、使用 NetworkManager 图形界面配置

1. 安装 NetworkManager 和相关工具
bash 复制代码
sudo apt install network-manager network-manager-gnome bridge-utils
# 或 CentOS/RHEL:
sudo yum install NetworkManager NetworkManager-gnome bridge-utils

2. 创建桥接接口(Bridge)
  1. 打开 NetworkManager 设置

    • 点击右上角的网络图标 → 选择 "网络设置" → 点击 "添加"

    • 或者在终端中运行:

      bash 复制代码
      nm-connection-editor
  2. 创建桥接连接

    • 在左侧选择 "桥接连接" → 点击 "添加"
    • 输入桥接名称(如 br0)。
  3. 配置桥接接口

    • 桥接接口 :保留默认名称(如 br0)。
    • 绑定物理网卡 :在 "桥接接口" 标签下,点击 "+" 添加物理网卡(如 eth0enp0s3)。
    • 网络设置
      • 勾选 "自动连接"
      • 配置 IP 地址(DHCP 或静态 IP)。
      • 如果物理网卡之前有网络配置,需关闭其 DHCP 并仅通过桥接接口管理网络。
  4. 保存并应用

    • 点击 "保存" → 关闭窗口 → 网络服务会自动重启。

3. 创建 VLAN 接口
  1. 打开 NetworkManager 连接编辑器

    bash 复制代码
    nm-connection-editor
  2. 创建 VLAN 连接

    • 在左侧选择 "VLAN 连接" → 点击 "添加"
    • 输入 VLAN 名称(如 vlan100)。
  3. 配置 VLAN 接口

    • VLAN 名称 :自定义名称(如 vlan100)。
    • 父接口 :选择物理网卡(如 eth0)或桥接接口(如 br0)。
    • VLAN ID :输入 VLAN 标识号(如 100)。
    • 网络设置:配置 IP 地址(DHCP 或静态 IP)。
  4. 保存并应用

    • 点击 "保存" → 关闭窗口 → 网络服务自动重启。

二、使用命令行配置

1. 创建桥接接口(Bridge)
bash 复制代码
# 创建桥接配置文件
sudo nmcli con add type bridge con-name br0 ifname br0

# 将物理网卡(如 eth0)绑定到桥接接口
sudo nmcli con add type bridge-slave ifname eth0 master br0

# 配置桥接接口的 IP 地址(DHCP 或静态)
# DHCP:
sudo nmcli con mod br0 ipv4.method auto
# 静态 IP:
sudo nmcli con mod br0 ipv4.addresses 192.168.1.100/24
sudo nmcli con mod br0 ipv4.gateway 192.168.1.1
sudo nmcli con mod br0 ipv4.dns "8.8.8.8"
sudo nmcli con mod br0 ipv4.method manual
2. 创建 VLAN 接口
bash 复制代码
# 创建 VLAN 配置文件(基于物理网卡 eth0,VLAN ID 100)
sudo nmcli con add type vlan con-name vlan100 ifname vlan100 dev eth0 id 100

# 配置 VLAN 接口的 IP 地址(DHCP 或静态)
# DHCP:
sudo nmcli con mod vlan100 ipv4.method auto
# 静态 IP:
sudo nmcli con mod vlan100 ipv4.addresses 192.168.2.100/24
sudo nmcli con mod vlan100 ipv4.gateway 192.168.2.1
sudo nmcli con mod vlan100 ipv4.dns "8.8.8.8"
sudo nmcli con mod vlan100 ipv4.method manual
3. 将 VLAN 接口加入桥接(可选)
bash 复制代码
# 将 VLAN 接口(如 vlan100)绑定到桥接接口(如 br0)
sudo nmcli con add type bridge-slave ifname vlan100 master br0

三、验证配置

  1. 查看网络接口

    bash 复制代码
    ip a
    # 应该看到 br0、vlan100 等接口
  2. 检查桥接状态

    bash 复制代码
    brctl show
    # 显示桥接接口及其绑定的物理或 VLAN 接口
  3. 测试网络连通性

    bash 复制代码
    ping -I br0 8.8.8.8      # 通过桥接接口 ping
    ping -I vlan100 192.168.2.1  # 通过 VLAN 接口 ping

四、注意事项

  1. 物理网卡配置

    • 如果物理网卡(如 eth0)之前有独立的网络配置(如 DHCP),需先禁用其网络管理:

      bash 复制代码
      sudo nmcli con down "Wired connection 1"    # 关闭默认有线连接
  2. 桥接与 VLAN 的组合

    • VLAN 接口可以作为桥接接口的成员,或者独立使用。
    • 如果 VLAN 接口加入桥接,需确保桥接的 IP 配置与 VLAN 的网络在同一网段。
  3. 重启服务

    bash 复制代码
    sudo nmcli con reload    # 重新加载配置
    sudo systemctl restart NetworkManager    # 重启 NetworkManager

五、典型场景示例

场景 1:桥接 + VLAN
bash 复制代码
# 创建桥接 br0,绑定物理网卡 eth0
sudo nmcli con add type bridge con-name br0 ifname br0
sudo nmcli con add type bridge-slave ifname eth0 master br0

# 创建 VLAN 100 基于 eth0
sudo nmcli con add type vlan con-name vlan100 ifname vlan100 dev eth0 id 100

# 将 VLAN 100 加入桥接 br0
sudo nmcli con add type bridge-slave ifname vlan100 master br0

# 配置桥接的静态 IP
sudo nmcli con mod br0 ipv4.addresses 192.168.1.100/24
sudo nmcli con mod br0 ipv4.gateway 192.168.1.1
sudo nmcli con mod br0 ipv4.dns "8.8.8.8"
sudo nmcli con mod br0 ipv4.method manual

通过以上步骤,你可以灵活配置桥接和 VLAN,满足虚拟化、容器网络或复杂网络隔离的需求。







以下是使用 NetworkManager 配置网桥(Bridge)和虚拟网络(VLAN)的详细步骤:


一、配置网桥(Bridge)

1. 创建网桥接口
bash 复制代码
# 创建名为 br0 的网桥
sudo nmcli con add type bridge ifname br0
2. 配置网桥参数(可选)
  • 禁用 STP(生成树协议) (适用于简单网络):

    bash 复制代码
    sudo nmcli con modify br0 bridge.stp no
  • 设置静态 IP

    bash 复制代码
    sudo nmcli con modify br0 ipv4.addresses 192.168.1.100/24
    sudo nmcli con modify br0 ipv4.gateway 192.168.1.1
    sudo nmcli con modify br0 ipv4.dns "8.8.8.8"
    sudo nmcli con modify br0 ipv4.method manual
  • 启用 DHCP

    bash 复制代码
    sudo nmcli con modify br0 ipv4.method auto
3. 激活网桥
bash 复制代码
sudo nmcli con up br0

二、绑定物理网卡到网桥

1. 将物理接口(如 eth0)加入网桥
bash 复制代码
sudo nmcli con add type bridge-slave ifname eth0 master br0
2. 移除物理接口原有 IP
bash 复制代码
sudo nmcli con down "原物理接口连接名"  # 如 "Wired connection 1"
sudo nmcli con modify eth0 ipv4.method none  # 清除 IP 配置
3. 重启网络服务
bash 复制代码
sudo systemctl restart NetworkManager

三、配置 VLAN 子接口

1. 创建 VLAN 子接口
bash 复制代码
# 创建 VLAN ID 为 100 的子接口 eth0.100
sudo nmcli con add type vlan con-name eth0.100 ifname eth0 id 100
2. 配置 VLAN 子接口 IP
  • 静态 IP

    bash 复制代码
    sudo nmcli con modify eth0.100 ipv4.addresses 192.168.100.10/24
    sudo nmcli con modify eth0.100 ipv4.gateway 192.168.100.1
    sudo nmcli con modify eth0.100 ipv4.method manual
  • DHCP

    bash 复制代码
    sudo nmcli con modify eth0.100 ipv4.method auto
3. 激活 VLAN 子接口
bash 复制代码
sudo nmcli con up eth0.100

四、验证配置

1. 查看网桥状态
bash 复制代码
bridge link show        # 查看桥接接口及绑定设备
ip addr show br0        # 查看网桥 IP 信息
2. 查看 VLAN 子接口
bash 复制代码
ip addr show eth0.100   # 验证 VLAN 子接口配置
3. 测试网络连通性
bash 复制代码
ping 192.168.1.1        # 测试网桥连通性
ping 192.168.100.1      # 测试 VLAN 子接口连通性

五、持久化配置

1. 通过 nmcli 保存配置
bash 复制代码
sudo nmcli con modify br0 connection.autoconnect yes  # 开机自动激活网桥
sudo nmcli con modify eth0.100 connection.autoconnect yes  # 开机激活 VLAN
2. 通过配置文件(可选)
  • 网桥配置文件/etc/sysconfig/network-scripts/ifcfg-br0
  • VLAN 配置文件/etc/sysconfig/network-scripts/ifcfg-eth0.100

注意事项

  1. 物理接口清理:绑定到桥接前需移除物理接口的 IP 配置。

  2. STP 设置:简单网络可禁用 STP 以提升性能。

  3. 防火墙规则:确保防火墙允许桥接和 VLAN 流量。

  4. 模块加载 :若使用 VLAN,需加载 8021q 内核模块:

    bash 复制代码
    sudo modprobe 8021q
    echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf

通过以上步骤,您可以使用 NetworkManager 高效配置网桥和 VLAN,适用于虚拟化(如 KVM)或网络分区场景。







以下是使用 NetworkManager 配置网桥(Bridge)和虚拟网络(VLAN)的完整指南,涵盖命令行工具 nmcli 和配置文件两种方法,适用于 RHEL/CentOS 8+FedoraRocky Linux 等现代 Linux 发行版。


🔧 一、配置网桥(Bridge)

1. 使用 nmcli 命令创建网桥
bash 复制代码
# 创建网桥设备(名称为 br0)
sudo nmcli connection add type bridge ifname br0 con-name br0

# 配置网桥 IP(DHCP 或静态)
sudo nmcli connection modify br0 ipv4.method auto         # DHCP
sudo nmcli connection modify br0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" ipv4.method manual  # 静态 IP

# 将物理网卡(如 eth0)绑定到网桥
sudo nmcli connection add type bridge-slave ifname eth0 master br0 con-name br0-slave-eth0

# 启用网桥及从属接口
sudo nmcli connection up br0
sudo nmcli connection up br0-slave-eth0

关键参数说明

  • type bridge:定义网桥类型。
  • bridge-slave:物理网卡作为网桥端口。
  • master br0:指定所属网桥名称。
2. 优化网桥性能
bash 复制代码
# 关闭 STP(小型网络避免延迟)
sudo nmcli connection modify br0 bridge.stp no
# 设置转发延迟为 0 秒
sudo nmcli connection modify br0 bridge.forward-delay 0
3. 验证网桥状态
bash 复制代码
ip addr show br0          # 检查 IP 分配
brctl show br0            # 查看绑定接口(需安装 bridge-utils)
nmcli device status       # 查看 NetworkManager 管理的设备

🌐 二、配置虚拟网络(VLAN)

1. 创建 VLAN 子接口
bash 复制代码
# 加载 802.1Q 内核模块(支持 VLAN 标签)
sudo modprobe 8021q
echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf  # 持久化加载

# 创建 VLAN 接口(例如 VLAN ID=100)
sudo nmcli connection add type vlan con-name eth0.100 ifname eth0.100 dev eth0 id 100

# 配置 VLAN IP 地址
sudo nmcli connection modify eth0.100 ipv4.addresses 192.168.100.10/24 ipv4.gateway 192.168.100.1 ipv4.method manual
sudo nmcli connection up eth0.100

关键参数

  • type vlan:指定为 VLAN 类型。
  • id 100:VLAN ID(范围 1-4094)。
  • dev eth0:父物理接口(需交换机配置为 Trunk 模式)。
2. 验证 VLAN 配置
bash 复制代码
ip -d link show eth0.100  # 查看 VLAN 标签(输出含 `vlan protocol 802.1Q`)
ping 192.168.100.1        # 测试网关连通性

⚙️ 三、高级场景:网桥 + VLAN 整合

1. 将 VLAN 接口绑定到网桥
yaml 复制代码
# 目标:让虚拟机通过网桥接入 VLAN 100
# 步骤1:创建 VLAN 接口 eth0.100
sudo nmcli connection add type vlan ifname eth0.100 dev eth0 id 100

# 步骤2:创建网桥 br-vlan100,并绑定 VLAN 接口
sudo nmcli connection add type bridge ifname br-vlan100 con-name br-vlan100
sudo nmcli connection add type bridge-slave ifname eth0.100 master br-vlan100 con-name br-vlan100-slave

# 步骤3:为网桥配置 IP
sudo nmcli connection modify br-vlan100 ipv4.addresses 192.168.100.2/24 ipv4.method manual
sudo nmcli connection up br-vlan100
2. 应用场景
  • 虚拟机网络隔离 :KVM 虚拟机连接到 br-vlan100,实现跨主机的 VLAN 通信。
  • 容器多网络平面:Docker/Podman 容器绑定到不同 VLAN 网桥,实现业务与管理流量分离。

⚠️ 四、注意事项与故障排查

  1. 物理接口释放 IP

    • 物理网卡(如 eth0)绑定到网桥或 VLAN 前,需移除其原有 IP 配置(通过 nmcli 或删除旧连接)。
    • 错误示例:物理接口和网桥同时配置 IP → 导致路由冲突。
  2. 交换机配合要求

    • VLAN 需交换机端口配置为 Trunk 模式,并允许对应 VLAN ID 通过。

    • 示例(Cisco 交换机):

      bash 复制代码
      interface GigabitEthernet0/1
         switchport mode trunk
         switchport trunk allowed vlan 100,200
  3. 服务依赖

    • 确保 NetworkManager 运行:

      bash 复制代码
      sudo systemctl enable --now NetworkManager
  4. 常见问题排查

    • 网桥未激活

      bash 复制代码
      sudo nmcli connection reload  # 重载配置
      sudo nmcli device reapply br0  # 重新应用设备配置
    • VLAN 接口无流量

      • 检查内核模块:lsmod | grep 8021q
      • 验证父接口状态:ip link show eth0(需 UP 状态)

💎 五、配置方法对比

方法 适用场景 优势
nmcli 命令 快速配置、临时调试 动态生效,无需重启服务
配置文件 生产环境持久化部署 支持版本控制,批量管理
图形界面 桌面环境(GNOME/KDE) 直观操作,适合初级用户

💡 运维建议

  • 生产环境优先使用 nmcli 或配置文件,并通过 systemd 确保服务自启。
  • 复杂网络建议结合 Ansible 自动化配置。

通过以上步骤,您可灵活构建基于网桥和 VLAN 的隔离网络架构,满足虚拟化、容器化及多租户网络需求。







以下是使用 NetworkManager 配置网桥(Bridge)和虚拟网络(VLAN)的完整指南,涵盖核心概念、操作步骤及故障排查,适用于 CentOS/RHEL 9+、Ubuntu 22.04+ 等主流发行版。


🌉 一、核心概念

组件 功能定位 关键依赖关系
网桥(Bridge) 二层交换设备,连接物理/虚拟接口(如虚拟机网卡)至同一广播域,实现直通物理网络 绑定 ethernets/bonds/vlans 接口
VLAN 在单物理链路上划分多个逻辑子网,隔离流量(如管理流量与业务流量) 依赖物理网卡或 Bond 接口作为 link 设备

🔧 二、网桥(Bridge)配置步骤

方法1:nmcli 命令行(推荐)
bash 复制代码
# 创建网桥并禁用 STP(减少延迟)
sudo nmcli con add type bridge ifname br0 con-name br0 bridge.stp no 

# 分配 IP(DHCP 或静态)
sudo nmcli con modify br0 ipv4.method auto  # DHCP
sudo nmcli con mod br0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.method manual  # 静态

# 绑定物理网卡(需先释放原 IP)
sudo nmcli con add type bridge-slave ifname eth0 master br0 con-name br0-slave 

# 启用配置
sudo nmcli con up br0
sudo nmcli con up br0-slave
方法2:Keyfile 配置文件(持久化)

创建 /etc/NetworkManager/system-connections/br0.nmconnection

ini 复制代码
[connection]
id=br0
type=bridge
interface-name=br0

[ipv4]
method=manual
address1=192.168.1.100/24,192.168.1.1
dns=8.8.8.8;

[bridge]
stp=false  # 关闭生成树协议

绑定物理网卡(创建 /etc/NetworkManager/system-connections/br0-slave-eth0.nmconnection):

ini 复制代码
[connection]
id=br0-slave-eth0
type=ethernet
interface-name=eth0
master=br0
slave-type=bridge  # 声明为网桥从属接口

⚠️ 关键规则 :物理网卡(如 eth0)必须无独立 IP,否则引发冲突。


📡 三、VLAN 配置步骤

1. 前置条件
  • 交换机配置:连接服务器的端口需设为 Trunk 模式,允许目标 VLAN(如 VLAN100)通过。

  • 内核支持 :加载 802.1Q 模块

    bash 复制代码
    sudo modprobe 8021q
    echo "8021q" | sudo tee /etc/modules-load.d/vlan.conf  # 持久化
2. 创建 VLAN 接口
bash 复制代码
# 在物理网卡 eth0 上创建 VLAN100 接口
sudo nmcli con add type vlan con-name eth0.100 ifname eth0.100 dev eth0 id 100 \
    ipv4.method manual ipv4.addresses 192.168.100.2/24 

# 启用 VLAN
sudo nmcli con up eth0.100
3. 验证 VLAN
bash 复制代码
ip -d link show eth0.100  # 检查 VLAN ID 标记
ping 192.168.100.1        # 测试与 VLAN 网关连通性

🌐 四、网桥 + VLAN 综合应用(虚拟机网络隔离)

场景:虚拟机通过网桥接入指定 VLAN(如 VLAN105)

bash 复制代码
# 创建 VLAN105 接口
sudo nmcli con add type vlan ifname bond0.105 con-name vlan105 dev bond0 id 105

# 创建网桥并绑定 VLAN105
sudo nmcli con add type bridge ifname br-vlan105 con-name br-vlan105
sudo nmcli con modify br-vlan105 connection.slave-type bridge  # 绑定 VLAN 到网桥
sudo nmcli con modify vlan105 master br-vlan105

# 启动配置
sudo nmcli con up vlan105
sudo nmcli con up br-vlan105

# 在 virt-manager 中将虚拟机网卡绑定至 br-vlan105

拓扑说明

物理网卡 → Bond 聚合 → VLAN 子接口 → 网桥 → 虚拟机网卡

实现多虚拟机隔离于不同 VLAN。


🛠️ 五、故障排查

| 问题 | 解决方法 |
|------------|-----------------------------------------------------------------------------|---------------------------------|
| 网桥无 IP 地址 | 检查物理网卡是否残留 IP:ip addr show eth0 → 用 ip addr flush dev eth0 清除 |
| 虚拟机无法联网 | 放行桥接流量:sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT |
| VLAN 接口未激活 | 确认交换机 Trunk 配置:show interface trunk(交换机侧) |
| 网桥未绑定物理网卡 | 查看绑定状态:`bridge link | grep br0nmcli con show br0` |


💎 六、最佳实践总结

  1. 性能优化
    • 关闭 STP(bridge.stp no)和转发延迟(forward-delay 0)减少虚拟机网络延迟。
  2. 高可用架构
    • 物理网卡 → Bond 聚合(mode=802.3ad) → VLAN → 网桥,提升链路容错。
  3. 权限管理
    • 将用户加入 libvirt 组:sudo usermod -aG libvirt $USER,避免虚拟机无权限访问网桥。

通过以上配置,可实现虚拟机直通物理网络、业务流量隔离等高阶网络场景。完整命令参考 networkmanager.dev/docs/api/la...







在Linux系统中使用NetworkManager配置网桥(Bridge)和虚拟局域网(VLAN)可以通过以下步骤完成。以下是详细的操作指南:


一、配置网桥(Bridge)

网桥用于将多个网络接口(物理或虚拟)连接成一个逻辑网络,常用于虚拟化环境。

1. 创建网桥接口

使用 nmcli 命令行工具创建网桥接口:

bash 复制代码
# 创建名为 br0 的网桥,并设置静态IP地址(可选)
sudo nmcli con add type bridge con-name br0 ifname br0 \
    ipv4.method manual \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns 8.8.8.8

或者使用动态IP(DHCP):

bash 复制代码
sudo nmcli con add type bridge con-name br0 ifname br0 \
    ipv4.method auto
2. 将物理接口添加到网桥

假设物理接口为 enp1s0(需替换为实际接口名):

bash 复制代码
# 将物理接口连接到网桥
sudo nmcli con add type bridge-slave con-name br0-slave ifname enp1s0 master br0
3. 启用并验证网桥
bash 复制代码
# 激活连接
sudo nmcli con up br0

# 查看网桥状态
bridge link show br0
# 或使用 ip 命令
ip addr show br0

注意:原物理接口的IP配置需移除(由网桥接管)。


二、配置VLAN虚拟网络

VLAN用于在同一物理接口上划分多个逻辑网络。

1. 创建VLAN接口

假设物理接口为 enp1s0,VLAN ID为 10

bash 复制代码
# 创建VLAN接口
sudo nmcli con add type vlan con-name vlan10 ifname vlan10 \
    dev enp1s0 id 10 \
    ipv4.method manual \
    ipv4.addresses 192.168.10.100/24 \
    ipv4.gateway 192.168.10.1

或使用动态IP:

bash 复制代码
sudo nmcli con add type vlan con-name vlan10 ifname vlan10 \
    dev enp1s0 id 10 \
    ipv4.method auto
2. 激活并验证VLAN
bash 复制代码
sudo nmcli con up vlan10

# 检查VLAN是否生效
ip -d link show vlan10

三、结合网桥与VLAN

若需在网桥上启用VLAN,例如让桥接流量支持VLAN划分:

示例:创建带VLAN的网桥
  1. 先创建VLAN接口(如 vlan10,方法同上)。
  2. 将VLAN接口加入网桥:
bash 复制代码
sudo nmcli con add type bridge-slave con-name br0-vlan10 ifname vlan10 master br0
  1. 激活网桥:
bash 复制代码
sudo nmcli con up br0

四、配置文件路径

NetworkManager的配置保存在 /etc/NetworkManager/system-connections/ 目录下,例如:

  • 网桥配置:br0.nmconnection
  • VLAN配置:vlan10.nmconnection

五、验证与排错

  1. 验证连接状态

    bash 复制代码
    nmcli con show
    nmcli dev status
  2. 检查IP地址和路由

    bash 复制代码
    ip addr
    ip route
  3. 查看VLAN标签

    bash 复制代码
    cat /proc/net/vlan/vlan10
  4. 测试网络连通性

    bash 复制代码
    ping 192.168.1.1  # 网桥网关
    ping 192.168.10.1 # VLAN网关

常见问题

  1. 物理接口未激活 :确保物理接口已启用(sudo nmcli dev connect enp1s0)。

  2. VLAN未生效:确认交换机端口配置了对应的VLAN ID和Trunk模式。

  3. NetworkManager服务未运行

    bash 复制代码
    sudo systemctl restart NetworkManager

通过上述步骤,您可以在Linux系统中使用NetworkManager灵活配置网桥和VLAN虚拟网络。根据具体需求调整IP地址和接口名称即可。







以下是使用 NetworkManager 配置网桥(Bridge)和 VLAN 的详细步骤,涵盖 nmcli 命令行和图形界面(GUI)两种方式。


一、配置网桥(Bridge)

方法 1:使用 nmcli 命令行
  1. 创建桥接接口

    bash 复制代码
    sudo nmcli connection add type bridge con-name br0 ifname br0
    • con-name br0:连接名称(自定义)。
    • ifname br0:接口名称(建议与连接名一致)。
  2. 配置桥接 IP(静态或 DHCP):

    bash 复制代码
    # 静态 IP
    sudo nmcli connection modify br0 ipv4.addresses 192.168.1.10/24
    sudo nmcli connection modify br0 ipv4.gateway 192.168.1.1
    sudo nmcli connection modify br0 ipv4.dns "8.8.8.8 8.8.4.4"
    sudo nmcli connection modify br0 ipv4.method manual
    
    # 动态 DHCP
    sudo nmcli connection modify br0 ipv4.method auto
  3. 将物理网卡加入桥接

    bash 复制代码
    sudo nmcli connection add type bridge-slave con-name br0-port1 ifname enp3s0 master br0
    • ifname enp3s0:物理网卡名称(通过 ip a 查看)。
    • master br0:绑定到桥接接口 br0
  4. 启动桥接

    bash 复制代码
    sudo nmcli connection up br0

方法 2:使用图形界面(GUI)
  1. 打开网络管理器

    bash 复制代码
    nm-connection-editor  # 或通过系统设置 → 网络
  2. 新建桥接连接

    • 点击 + → 选择 Bridge → 设置名称(如 br0)。
  3. 配置 IP

    • 切换到 IPv4 标签 → 选择手动或 DHCP。
  4. 添加物理网卡

    • Bridge 标签 → 点击 Add → 选择 Ethernet → 指定物理网卡(如 enp3s0)。
  5. 保存并启用连接


二、配置 VLAN

方法 1:使用 nmcli 命令行
  1. 在物理网卡上创建 VLAN

    bash 复制代码
    sudo nmcli connection add type vlan con-name vlan100 dev enp3s0 id 100
    • con-name vlan100:VLAN 连接名称。
    • dev enp3s0:物理网卡名称。
    • id 100:VLAN ID。
  2. 配置 VLAN IP(静态或 DHCP):

    bash 复制代码
    # 静态 IP
    sudo nmcli connection modify vlan100 ipv4.addresses 192.168.100.10/24
    sudo nmcli connection modify vlan100 ipv4.gateway 192.168.100.1
    sudo nmcli connection modify vlan100 ipv4.method manual
    
    # 动态 DHCP
    sudo nmcli connection modify vlan100 ipv4.method auto
  3. 启动 VLAN

    bash 复制代码
    sudo nmcli connection up vlan100

方法 2:使用图形界面(GUI)
  1. 打开网络管理器

    bash 复制代码
    nm-connection-editor
  2. 新建 VLAN 连接

    • 点击 + → 选择 VLAN → 设置名称(如 vlan100)。
  3. 配置参数

    • Parent Interface :选择物理网卡(如 enp3s0)。
    • VLAN ID :输入 VLAN ID(如 100)。
  4. 配置 IP

    • 切换到 IPv4 标签 → 选择手动或 DHCP。
  5. 保存并启用连接


三、桥接 + VLAN 组合配置

场景:在桥接接口上绑定 VLAN
  1. 在物理网卡上创建 VLAN

    bash 复制代码
    sudo nmcli connection add type vlan con-name vlan100 dev enp3s0 id 100
  2. 创建桥接并绑定 VLAN

    bash 复制代码
    # 创建桥接 br0
    sudo nmcli connection add type bridge con-name br0 ifname br0
    
    # 将 VLAN 接口加入桥接
    sudo nmcli connection add type bridge-slave con-name br0-vlan100 ifname vlan100 master br0
  3. 启动所有连接

    bash 复制代码
    sudo nmcli connection up br0
    sudo nmcli connection up vlan100

四、验证与调试

  1. 检查桥接和 VLAN 状态

    bash 复制代码
    bridge link        # 查看桥接关联的接口
    ip -d link show    # 显示所有接口详情(包括 VLAN 标签)
  2. 测试网络连通性

    bash 复制代码
    ping 8.8.8.8       # 测试外网访问(需配置正确 IP/DNS)
  3. 日志排查问题

    bash 复制代码
    journalctl -u NetworkManager  # 查看 NetworkManager 日志

五、持久化配置

所有通过 nmcli 或 GUI 的配置会自动保存到以下目录:

bash 复制代码
/etc/NetworkManager/system-connections/
  • 重启后配置自动生效,无需额外操作。

附:补充命令

命令 说明
nmcli connection show 列出所有连接配置
nmcli device status 查看设备状态
nmcli connection delete <name> 删除指定连接

通过以上步骤,您可以灵活组合 BridgeVLAN,实现复杂的网络拓扑(如虚拟机多租户隔离)。







NetworkManager 中 con-nameifnamedev 详解

在 NetworkManager 中,con-nameifnamedev 是三个核心概念,它们定义了网络连接的不同方面。理解它们的区别和关系对于正确配置网络至关重要。

一、概念对比表

参数 含义 作用域 是否必需 是否唯一 示例
con-name 连接配置名称 逻辑配置 "office-bridge"
ifname 网络接口名称 物理/虚拟设备 br0, vlan100
dev 父设备名称 物理设备 仅VLAN/绑定 enp3s0

二、详细解析

1. con-name (连接名称)

  • 本质:配置文件的逻辑标识符

  • 特点

    • 用户自定义的友好名称
    • /etc/NetworkManager/system-connections/ 中保存为文件
    • 用于管理连接(启动、停止、修改)
  • 示例

    bash 复制代码
    nmcli con add con-name "office-bridge" type bridge ifname br0
  • 重要规则

    • 必须在系统中唯一
    • 建议使用描述性名称(如 "server-bridge-vlan10")

2. ifname (接口名称)

  • 本质 :网络接口的实际设备名

  • 特点

    • 对应 ip link show 中的接口名
    • 必须是系统中存在的设备
    • 用于数据包传输
  • 示例

    bash 复制代码
    nmcli con add type bridge ifname br0 ...  # br0是实际接口
  • 重要规则

    • 必须遵守 Linux 设备命名规则(如 br0, eth0, wlan0)
    • 在系统中必须唯一

3. dev (父设备)

  • 本质虚拟接口依赖的物理设备

  • 特点

    • 仅用于创建依赖设备时(VLAN、绑定接口等)
    • 指向物理接口或聚合接口
  • 示例

    bash 复制代码
    nmcli con add type vlan dev enp3s0 id 10 ...  # enp3s0是父设备
  • 使用场景

    • 创建 VLAN 时指定物理接口
    • 创建绑定接口时指定成员接口
    • 创建网桥从属接口时指定物理接口

三、三者关系图解

graph LR A[物理设备 enp3s0] -->|dev| B[VLAN接口 vlan10] B -->|ifname| C[连接配置 vlan10-config] C -->|con-name| D["vlan10-office"] style A fill:#f9f,stroke:#333 style B fill:#bbf,stroke:#333 style C fill:#f96,stroke:#333 style D fill:#9f9,stroke:#333
  • 物理设备 (enp3s0):实际网卡
  • VLAN接口 (vlan10):基于物理设备的虚拟接口
  • 连接配置 (vlan10-config):管理接口的逻辑配置
  • 连接名称 ("vlan10-office"):配置文件的友好名称

四、典型配置示例

1. VLAN 配置

bash 复制代码
# 创建 VLAN 连接
sudo nmcli con add type vlan \
    con-name "office-vlan10" \    # 连接名称(逻辑配置)
    ifname vlan10 \               # 接口名称(虚拟设备)
    dev enp3s0 \                  # 父设备(物理网卡)
    id 10                         # VLAN ID

2. 网桥配置

bash 复制代码
# 创建网桥
sudo nmcli con add type bridge \
    con-name "server-bridge" \    # 连接名称
    ifname br0                    # 接口名称(实际网桥设备)

# 添加物理接口到网桥
sudo nmcli con add type bridge-slave \
    con-name "br-slave-enp3s0" \  # 连接名称
    ifname enp3s0 \               # 接口名称(物理设备)
    master br0                    # 所属网桥

3. 绑定接口 (Bond)

bash 复制代码
# 创建绑定接口
sudo nmcli con add type bond \
    con-name "bond0-config" \     # 连接名称
    ifname bond0 \                # 接口名称(绑定设备)
    mode 802.3ad                  # 绑定模式

# 添加物理接口到绑定
sudo nmcli con add type bond-slave \
    con-name "bond-slave1" \      # 连接名称
    ifname enp3s0 \               # 接口名称(物理设备)
    master bond0 \                # 所属绑定
    dev enp3s0                    # 父设备(同ifname)

五、常见错误及解决方案

错误 1: con-name 冲突

bash 复制代码
Error: Connection 'office-bridge' already exists

解决

bash 复制代码
# 删除现有连接
sudo nmcli con delete "office-bridge"

# 或使用不同名称
nmcli con add con-name "office-bridge-new" ...

错误 2: ifname 已在使用

bash 复制代码
Error: Device 'br0' not available

解决

bash 复制代码
# 释放接口
sudo nmcli dev disconnect br0

# 或使用不同接口名
nmcli con add ... ifname br1

错误 3: dev 指定错误

bash 复制代码
Error: invalid device 'enp5s0' specified

解决

bash 复制代码
# 检查可用设备
nmcli dev status

# 使用正确的设备名
nmcli con add ... dev enp3s0

六、查看和管理

1. 查看所有连接

bash 复制代码
nmcli con show
# 输出示例:
NAME                UUID                                  TYPE      DEVICE 
office-bridge       5d2a45a0-8452-4d82-a1b2-5b0d8d8e3f1b  bridge    br0
vlan10-office       c3a9b8d7-1e7f-4e8d-b5e6-9a0c1d2e3f4a  vlan      vlan10

2. 查看设备状态

bash 复制代码
nmcli dev status
# 输出示例:
DEVICE   TYPE      STATE      CONNECTION 
br0      bridge    connected  office-bridge
vlan10   vlan      connected  vlan10-office
enp3s0   ethernet  connected  br-slave-enp3s0

3. 查看连接详情

bash 复制代码
nmcli con show "office-bridge"

输出片段:

ini 复制代码
connection.id:                          office-bridge
connection.interface-name:              br0       # ifname
connection.type:                        bridge
bridge.stp:                             yes
ipv4.method:                            manual
ipv4.addresses:                         192.168.1.100/24

七、最佳实践

  1. 命名规范

    bash 复制代码
    # VLAN连接: vlan<ID>-<用途>
    con-name: vlan10-office
    
    # 网桥连接: bridge-<用途>
    con-name: bridge-servers
    
    # 物理接口: slave-<接口名>
    con-name: slave-enp3s0
  2. 关系管理

    • 当删除主连接(如网桥)时,从属连接不会自动删除

    • 需要手动管理依赖关系:

      bash 复制代码
      # 删除网桥及其从属
      sudo nmcli con delete "office-bridge"
      sudo nmcli con delete "slave-enp3s0"
  3. 配置持久化

    • 所有配置自动保存到 /etc/NetworkManager/system-connections/
    • 文件命名格式:<con-name>.nmconnection
  4. 接口命名技巧

    bash 复制代码
    # 使用前缀标识类型
    ifname: br-mgmt       # 管理网桥
    ifname: vlan20-data   # 数据VLAN
    ifname: bond0-trunk   # 骨干绑定

八、高级用法

1. 修改现有连接

bash 复制代码
# 更改连接名称
sudo nmcli con mod "old-name" con-name "new-name"

# 更改接口名称
sudo nmcli con mod "office-bridge" ifname br-new

# 更改父设备
sudo nmcli con mod "vlan10-office" dev enp4s0

2. 多层级配置

bash 复制代码
# 物理接口 → 绑定 → VLAN → 网桥
nmcli con add type bond con-name bond0 ifname bond0
nmcli con add type bond-slave con-name slave1 ifname enp3s0 master bond0 dev enp3s0
nmcli con add type vlan con-name vlan10-bond dev bond0 id 10 ifname vlan-bond10
nmcli con add type bridge con-name br-vlan ifname br-vlan
nmcli con add type bridge-slave con-name br-vlan-slave ifname vlan-bond10 master br-vlan

3. 临时覆盖配置

bash 复制代码
# 临时更改IP(不修改持久配置)
sudo nmcli con mod "office-bridge" ipv4.addresses 10.0.0.100/24
sudo nmcli con up "office-bridge"

总结

  • con-name:你的配置"身份证"(逻辑标识)
  • ifname:网络的"门牌号"(实际接口)
  • dev:虚拟设备的"根基"(物理依赖)

正确理解和使用这三个参数:

  1. 使用 con-name 管理配置逻辑
  2. 通过 ifname 操作实际网络接口
  3. 使用 dev 建立虚拟设备的物理依赖
  4. 遵循命名规范提高可维护性
  5. 定期检查连接状态确保配置生效

通过合理组合这些参数,您可以构建复杂的网络拓扑,同时保持配置的清晰和可管理性。







NetworkManager 中 con-name, ifname, dev 参数详解

在 NetworkManager 配置中,con-nameifnamedev 是三个关键参数,它们分别用于不同目的但相互关联。理解它们的区别和用法对于正确配置网络至关重要。

核心概念对比

参数 全称 作用 是否必需 示例
con-name Connection Name 连接的逻辑标识符(配置文件名称) con-name "Office-WiFi"
ifname Interface Name 网络接口的实际设备名称 通常必需 ifname wlp3s0
dev Device 指定父设备(用于从属连接) 视情况而定 dev eth0

详细解析

1. con-name (连接名称)

  • 本质:连接配置的逻辑标识符

  • 特点

    • 人类可读的名称,便于管理
    • 对应 /etc/NetworkManager/system-connections/ 中的文件名
    • nmcli connection show 中显示
  • 使用场景

    bash 复制代码
    # 创建连接时指定
    nmcli connection add type wifi con-name "Home-WiFi" ...
    
    # 管理连接时使用
    nmcli connection up "Home-WiFi"
    nmcli connection modify "Home-WiFi" ...
  • 注意事项

    • 名称可以包含空格(需用引号括起)
    • 同一系统上必须唯一
    • 如果省略,NetworkManager 会自动生成(如 "Wired connection 1")

2. ifname (接口名称)

  • 本质:物理或虚拟网络接口的实际设备名

  • 特点

    • 对应内核中的网络设备名
    • ip link shownmcli device status 中可见
    • 必须是系统中存在的有效设备名
  • 使用场景

    bash 复制代码
    # 绑定连接到特定接口
    nmcli connection add type ethernet ifname eth0 ...
    
    # 创建虚拟接口时指定名称
    nmcli connection add type bridge ifname br0 ...
  • 注意事项

    • 对于物理接口必须与实际设备名匹配
    • 对于虚拟接口(如网桥)可自定义名称
    • 如果省略,NetworkManager 会自动分配

3. dev (父设备)

  • 本质:指定从属连接依赖的父设备

  • 特点

    • 仅用于从属连接类型(如 VLAN、网桥成员等)
    • 指向已存在的设备(通过 ifname 或 con-name)
    • 建立设备间的层次关系
  • 使用场景

    bash 复制代码
    # 创建 VLAN 时指定父设备
    nmcli connection add type vlan dev eth0 id 100 ...
    
    # 创建网桥成员时指定父设备
    nmcli connection add type bridge-slave dev eth0 ...
  • 注意事项

    • 父设备必须已存在或同时创建
    • 可以指向接口名(ifname)或连接名(con-name)
    • 对于主连接类型(如普通以太网)不需要此参数

三者关系图解

graph TD C[con-name] -->|标识| I[连接配置] I -->|控制| D[ifname] D -->|对应| H[硬件接口] S[从属连接] -->|dev 指向| D

配置示例

示例 1:简单以太网连接

bash 复制代码
# con-name: 逻辑名称
# ifname: 物理设备名
nmcli connection add type ethernet \
  con-name "Main-Ethernet" \
  ifname eth0 \
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24

示例 2:带 VLAN 的网桥

bash 复制代码
# 1. 创建 VLAN 连接
# dev: 指定父设备 eth0
nmcli connection add type vlan \
  con-name "VLAN-100" \
  ifname eth0.100 \
  dev eth0 \
  id 100

# 2. 创建网桥
nmcli connection add type bridge \
  con-name "Server-Bridge" \
  ifname br0

# 3. 将 VLAN 加入网桥
# dev: 指定父设备 eth0.100
nmcli connection add type bridge-slave \
  con-name "br-VLAN100-Port" \
  dev eth0.100 \
  master br0

示例 3:使用 con-name 引用父设备

bash 复制代码
# 先创建父连接
nmcli connection add type ethernet \
  con-name "Uplink" \
  ifname eth0

# 创建 VLAN 时通过 con-name 引用
nmcli connection add type vlan \
  con-name "Uplink-VLAN200" \
  ifname vlan200 \
  dev "Uplink" \  # 使用 con-name 而非 ifname
  id 200

常见问题解决

问题 1:设备未找到

bash 复制代码
Error: Failed to add 'br0-eth0' connection: Device 'eth0' not found

解决方案

  1. 检查设备是否存在:ip link show

  2. 确保设备未被其他连接占用

  3. 明确指定 ifname:

    bash 复制代码
    nmcli connection add ... ifname eth0 ...

问题 2:连接名称冲突

bash 复制代码
Error: Failed to add 'br0' connection: name 'br0' already used

解决方案

  1. 使用唯一 con-name:

    bash 复制代码
    nmcli connection add type bridge con-name "Backup-Bridge" ...
  2. 删除冲突连接:

    bash 复制代码
    nmcli connection delete br0

问题 3:父设备指定错误

bash 复制代码
Error: Failed to add VLAN connection: parent device not found

解决方案

  1. 确保父设备存在且已激活

  2. 使用正确的引用方式:

    bash 复制代码
    # 使用 ifname
    nmcli connection add ... dev eth0 ...
    
    # 或使用 con-name
    nmcli connection add ... dev "Main-Uplink" ...

最佳实践

  1. 命名规范

    • 使用有意义的 con-name:Server-Bridge, Office-WiFi
    • 保持 ifname 标准化:eth0, br0, vlan100
  2. 引用优先级

    graph LR A[首选] --> B[通过 con-name 引用] C[次选] --> D[通过 ifname 引用]
  3. 配置顺序

    bash 复制代码
    # 1. 先创建父连接
    nmcli connection add ... con-name Parent ...
    
    # 2. 再创建从属连接
    nmcli connection add ... dev Parent ...
  4. 验证命令

    bash 复制代码
    # 查看连接配置
    nmcli connection show "My-Bridge"
    
    # 查看设备状态
    nmcli device show br0
    
    # 检查父设备引用
    nmcli -g connection.interface-name,connection.slave-type connection

高级用法

动态接口名称

当 ifname 不确定时(如多网卡环境):

bash 复制代码
# 使用通配符匹配接口
nmcli connection add type ethernet \
  con-name "Dynamic-Eth" \
  match.interface-name "enp*" \
  ipv4.method auto

连接名称模板

批量创建连接:

bash 复制代码
for i in {1..4}; do
  nmcli connection add type vlan \
    con-name "VLAN-10$i" \
    ifname "eth0.10$i" \
    dev eth0 \
    id "10$i"
done

配置文件示例

/etc/NetworkManager/system-connections/VLAN-100.nmconnection:

ini 复制代码
[connection]
id=VLAN-100
type=vlan
interface-name=eth0.100
master=br0  # 引用主连接的 con-name

[vlan]
parent=eth0  # 父设备的 ifname
id=100

理解 con-nameifnamedev 的区别与联系,可以帮助您构建更可靠、易维护的网络配置。con-name 是逻辑标识,ifname 是物理标识,dev 则用于建立设备间的层次关系。







在NetworkManager中配置VLAN时,ifnamedev参数具有明确的分工和区别,以下是详细说明:

1. ifname参数

  • 定义
    ifname(接口名称)用于指定新创建的网络接口的名称。在VLAN配置中,这通常是一个虚拟接口名称,格式为父接口名.VLAN_ID(如enp1s0.10,其中.10表示VLAN ID)。

  • 作用

    • 确保NetworkManager正确识别并配置生成的VLAN接口。
    • 例如,命令nmcli connection add type vlan con-name vlan10 ifname enp1s0.10 dev enp1s0 id 10中,ifname=enp1s0.10表示创建的VLAN接口名为enp1s0.10
  • 关键点

    • 名称必须符合Linux接口命名规范(如eth0.10enp1s0.20)。
    • 若名称格式错误(如缺少VLAN ID),配置将失败。

2. dev参数

  • 定义
    dev(设备)用于指定VLAN所基于的父物理接口。在上述命令中,dev=enp1s0表示VLAN接口enp1s0.10将基于物理接口enp1s0创建。

  • 作用

    • 确保NetworkManager知道在哪个物理接口上创建VLAN。
    • 父设备必须是已存在的物理接口,否则配置将失败。
  • 关键点

    • 参数值必须为已存在的物理接口名称(如enp1s0eth0)。
    • 若指定的设备不存在,NetworkManager会报错。

3. 核心区别

参数 功能 必要性 错误场景
ifname 定义新VLAN接口的名称 必需 名称格式错误(如enp1s0缺少VLAN ID)
dev 指定VLAN的父物理接口 必需 父设备不存在或名称拼写错误(如enp1s0误写为enp1s

4. 示例验证

  • 正确命令

    bash 复制代码
    nmcli connection add type vlan con-name vlan10 ifname enp1s0.10 dev enp1s0 id 10
    • 创建VLAN 10,接口名为enp1s0.10,基于物理接口enp1s0
  • 错误示例

    • 省略dev参数:

      bash 复制代码
      nmcli connection add type vlan con-name vlan10 ifname enp1s0.10 id 10
      • 错误:NetworkManager无法确定VLAN的父设备,配置失败。
    • ifname格式错误:

      bash 复制代码
      nmcli connection add type vlan con-name vlan10 ifname enp1s0 dev enp1s0 id 10
      • 错误:名称enp1s0缺少VLAN ID,配置失败。

5. 总结

  • ifname :定义VLAN虚拟接口的名称,格式为父接口名.VLAN_ID
  • dev:指定VLAN的父物理接口,必须为已存在的设备。
  • 两者需配合使用,确保VLAN正确创建并绑定到指定物理接口。






在 Linux 中使用 NetworkManager 配置网桥(Bridge)和 VLAN 的步骤如下:


1. 确认环境

  • 确保 NetworkManager 已安装(默认大多数发行版已包含)

  • 安装必要工具(部分系统需额外安装):

    bash 复制代码
    sudo apt install bridge-utils vlan  # Debian/Ubuntu
    sudo dnf install bridge-utils      # RHEL/CentOS/Fedora
  • 加载内核模块:

    bash 复制代码
    sudo modprobe bridge
    sudo modprobe 8021q

2. 配置物理接口连接 VLAN

假设物理接口为 eth0,需创建 VLAN ID 100

方法一:使用 nmcli 命令
bash 复制代码
# 创建 VLAN 接口
sudo nmcli con add type vlan con-name eth0.100 dev eth0 id 100

# 激活连接
sudo nmcli con up eth0.100
方法二:配置文件(/etc/NetworkManager/system-connections/

创建文件 eth0.100.nmconnection

ini 复制代码
[connection]
id=eth0.100
type=vlan
interface-name=eth0.100

[vlan]
id=100
parent=eth0

[ipv4]
method=disabled  # VLAN 本身不配置 IP,由网桥管理

[ipv6]
method=ignore

3. 创建网桥并绑定 VLAN 接口

创建网桥 br0 并添加 VLAN 接口 eth0.100

方法一:nmcli 命令
bash 复制代码
# 创建网桥
sudo nmcli con add type bridge con-name br0 ifname br0

# 将 VLAN 接口加入网桥
sudo nmcli con add type bridge-slave con-name br0-port1 ifname eth0.100 master br0

# 为网桥配置 IP(可选)
sudo nmcli con mod br0 ipv4.addresses 192.168.100.10/24
sudo nmcli con mod br0 ipv4.gateway 192.168.100.1
sudo nmcli con mod br0 ipv4.dns 8.8.8.8
sudo nmcli con mod br0 ipv4.method manual

# 激活所有连接
sudo nmcli con up br0
sudo nmcli con up br0-port1
方法二:配置文件

创建 br0.nmconnection

ini 复制代码
[connection]
id=br0
type=bridge
interface-name=br0

[ipv4]
address1=192.168.100.10/24,192.168.100.1
dns=8.8.8.8;
method=manual

[ipv6]
method=ignore

创建 br0-port1.nmconnection(绑定 VLAN 到网桥):

ini 复制代码
[connection]
id=br0-port1
type=bridge-slave
interface-name=eth0.100
master=br0

[bridge-slave]

4. 验证配置

bash 复制代码
# 检查网桥状态
bridge link show br0

# 查看 VLAN 接口
ip -d link show eth0.100

# 测试网络连通性
ping 192.168.100.1

5. 其他常见操作

添加更多接口到网桥
bash 复制代码
sudo nmcli con add type bridge-slave con-name br0-port2 ifname enp5s0 master br0
删除连接
bash 复制代码
sudo nmcli con delete eth0.100
sudo nmcli con delete br0
重启 NetworkManager
bash 复制代码
sudo systemctl restart NetworkManager

关键注意事项

  1. 物理接口状态 :物理接口(如 eth0)必须处于 未配置 IP 状态(由 VLAN 接管)。

  2. 依赖顺序:确保 VLAN 接口在网桥之前激活(NetworkManager 通常自动处理)。

  3. 防火墙 :若使用 firewalld,需将网桥加入信任区域:

    bash 复制代码
    sudo firewall-cmd --add-interface=br0 --zone=trusted --permanent
    sudo firewall-cmd --reload
  4. 虚拟化支持 :此配置适用于 KVM/QEMU 虚拟机,将虚拟机的网卡绑定到 br0 即可接入 VLAN 100。


通过以上步骤,您已成功创建了一个基于 VLAN 的网桥,实现了网络隔离与虚拟化支持。







使用 NetworkManager 配置网桥 (Bridge) 和 VLAN 的完整指南

在 Linux 中,NetworkManager 提供了强大的命令行工具 nmcli 来配置复杂的网络拓扑。以下是使用 NetworkManager 配置网桥和 VLAN 的详细方法:

基础概念

  • 网桥 (Bridge):二层网络设备,用于连接多个网络段
  • VLAN (Virtual LAN):在单个物理接口上创建多个逻辑网络
  • 连接类型
    • bridge:网桥连接
    • vlan:VLAN 连接
    • bridge-slave:网桥成员接口

配置网桥和 VLAN 的两种架构

架构 1:VLAN 在网桥之上(推荐)

graph TD A[物理接口] --> B[网桥] B --> C[VLAN 10] B --> D[VLAN 20]

架构 2:VLAN 在物理接口之上

graph TD A[物理接口] --> B[VLAN 10] A --> C[VLAN 20] B --> D[网桥] C --> E[网桥]

配置步骤(架构 1:VLAN 在网桥之上)

1. 创建网桥

bash 复制代码
# 创建网桥设备
sudo nmcli con add type bridge ifname br0 con-name br0

# 配置网桥IP(可选)
sudo nmcli con modify br0 ipv4.addresses 192.168.1.100/24
sudo nmcli con modify br0 ipv4.gateway 192.168.1.1
sudo nmcli con modify br0 ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli con modify br0 ipv4.method manual

# 禁用STP(小型网络)
sudo nmcli con modify br0 bridge.stp no

2. 添加物理接口到网桥

bash 复制代码
# 添加物理接口(如enp3s0)作为网桥从属
sudo nmcli con add type bridge-slave ifname enp3s0 master br0 con-name br0-slave

# 激活连接
sudo nmcli con up br0
sudo nmcli con up br0-slave

3. 在网桥上创建 VLAN

bash 复制代码
# 在br0上创建VLAN 10
sudo nmcli con add type vlan con-name br0.10 ifname br0.10 dev br0 id 10

# 配置VLAN 10的IP
sudo nmcli con modify br0.10 ipv4.addresses 10.10.10.1/24
sudo nmcli con modify br0.10 ipv4.method manual

# 创建并激活VLAN 20
sudo nmcli con add type vlan con-name br0.20 ifname br0.20 dev br0 id 20 ipv4.method disabled
sudo nmcli con up br0.10
sudo nmcli con up br0.20

配置步骤(架构 2:VLAN 在物理接口之上)

1. 在物理接口上创建 VLAN

bash 复制代码
# 创建VLAN 10
sudo nmcli con add type vlan con-name vlan10 ifname enp3s0.10 dev enp3s0 id 10

# 创建VLAN 20
sudo nmcli con add type vlan con-name vlan20 ifname enp3s0.20 dev enp3s0 id 20

# 激活VLAN
sudo nmcli con up vlan10
sudo nmcli con up vlan20

2. 为每个 VLAN 创建网桥

bash 复制代码
# 为VLAN 10创建网桥
sudo nmcli con add type bridge ifname br-vlan10 con-name br-vlan10
sudo nmcli con add type bridge-slave ifname enp3s0.10 master br-vlan10 con-name br-vlan10-slave
sudo nmcli con modify br-vlan10 ipv4.addresses 10.10.10.1/24 ipv4.method manual

# 为VLAN 20创建网桥
sudo nmcli con add type bridge ifname br-vlan20 con-name br-vlan20
sudo nmcli con add type bridge-slave ifname enp3s0.20 master br-vlan20 con-name br-vlan20-slave
sudo nmcli con modify br-vlan20 ipv4.addresses 10.20.20.1/24 ipv4.method manual

# 激活所有连接
sudo nmcli con up br-vlan10
sudo nmcli con up br-vlan10-slave
sudo nmcli con up br-vlan20
sudo nmcli con up br-vlan20-slave

高级配置选项

1. 配置网桥参数

bash 复制代码
# 设置转发延迟
sudo nmcli con modify br0 bridge.forward-delay 2

# 启用生成树协议
sudo nmcli con modify br0 bridge.stp yes

# 设置优先级
sudo nmcli con modify br0 bridge.priority 16384

2. VLAN 高级配置

bash 复制代码
# 设置VLAN标志(如重排、GVRP)
sudo nmcli con modify vlan10 vlan.flags reorder_hdr

# 配置QoS优先级
sudo nmcli con modify vlan10 vlan.ingress-qos-map "0:4 1:6"

3. 绑定多个物理接口到网桥

bash 复制代码
# 添加第二个接口
sudo nmcli con add type bridge-slave ifname enp4s0 master br0 con-name br0-slave2
sudo nmcli con up br0-slave2

验证配置

查看网桥状态

bash 复制代码
# 查看所有网桥
nmcli con show --active | grep bridge

# 查看网桥详细信息
nmcli -f bridge con show br0

# 查看网桥成员
bridge link show

查看 VLAN 状态

bash 复制代码
# 查看所有VLAN
nmcli con show --active | grep vlan

# 查看VLAN详细信息
ip -d link show enp3s0.10

# 查看VLAN配置
cat /proc/net/vlan/enp3s0.10

持久化与故障排除

配置持久化

NetworkManager 配置默认自动保存到以下位置:

bash 复制代码
/etc/NetworkManager/system-connections/
  ├── br0.nmconnection
  ├── br0-slave.nmconnection
  ├── br0.10.nmconnection
  └── vlan10.nmconnection

故障排除命令

bash 复制代码
# 检查服务状态
systemctl status NetworkManager

# 查看详细日志
journalctl -u NetworkManager -f

# 重新加载配置
nmcli con reload

# 测试连通性
ping -I br0.10 8.8.8.8

KVM 虚拟化集成

1. 将虚拟机连接到 VLAN 网桥

xml 复制代码
<!-- libvirt 虚拟机配置示例 -->
<interface type='bridge'>
  <source bridge='br0.10'/>  <!-- 使用VLAN接口 -->
  <model type='virtio'/>
</interface>

2. 将虚拟机连接到普通网桥

xml 复制代码
<interface type='bridge'>
  <source bridge='br0'/>
  <virtualport type='openvswitch'/>  <!-- 可选:使用OVS -->
  <vlan>
    <tag id='10'/>  <!-- 指定VLAN -->
  </vlan>
</interface>

删除配置

删除网桥

bash 复制代码
sudo nmcli con del br0
sudo nmcli con del br0-slave

删除 VLAN

bash 复制代码
sudo nmcli con del br0.10
sudo nmcli con del vlan10

最佳实践

  1. 命名规范

    • 网桥:br-<用途>(如 br-mgmt
    • VLAN:<接口>.<vlanid>vlan<id>
  2. 安全考虑

    bash 复制代码
    # 禁用MAC地址学习(增强安全)
    sudo nmcli con modify br0 bridge.disable-mac-learning yes
  3. 性能优化

    bash 复制代码
    # 禁用STP(小型网络)
    sudo nmcli con modify br0 bridge.stp no
    
    # 设置转发延迟为0
    sudo nmcli con modify br0 bridge.forward-delay 0
  4. 备份配置

    bash 复制代码
    # 备份所有连接配置
    sudo cp -r /etc/NetworkManager/system-connections/ ~/nm-backup

通过以上配置,您可以灵活地使用 NetworkManager 创建复杂的网络拓扑,满足服务器虚拟化、容器网络和网络隔离等各种需求。







NetworkManager 配置网桥(Bridge)与虚拟网络(VLAN)详解

NetworkManager 提供了完整的 CLI 和 GUI 工具来管理桥接和 VLAN 配置。以下是详细的操作指南:


一、基础概念关系

graph TD A[物理网卡] --> B(Bridge) A --> C(VLAN) B --> D[虚拟机/容器] C --> E[网络隔离] B --> F[VLAN接口] C --> G[Bridge]
  • Bridge:二层网络设备,连接多个物理/虚拟接口
  • VLAN:在物理接口/Bridge 上创建的虚拟子接口
  • 两者可独立使用,也可组合使用(如:在 Bridge 上创建 VLAN)

二、命令行配置(nmcli)

1. 创建网桥(Bridge)
bash 复制代码
# 创建桥接设备 br0
sudo nmcli con add type bridge con-name br0 ifname br0

# 添加物理网卡到桥接(以 enp3s0 为例)
sudo nmcli con add type bridge-slave con-name br0-port1 ifname enp3s0 master br0

# 配置IP(DHCP)
sudo nmcli con modify br0 ipv4.method auto

# 配置静态IP
sudo nmcli con modify br0 ipv4.addresses 192.168.1.100/24
sudo nmcli con modify br0 ipv4.gateway 192.168.1.1
sudo nmcli con modify br0 ipv4.dns "8.8.8.8"

# 激活配置
sudo nmcli con up br0
2. 创建 VLAN 接口
bash 复制代码
# 在物理接口上创建 VLAN(ID=100)
sudo nmcli con add type vlan con-name vlan100 dev enp3s0 id 100 ifname vlan100

# 在桥接接口上创建 VLAN(ID=200)
sudo nmcli con add type vlan con-name br0-vlan200 dev br0 id 200 ifname vlan200

# 配置VLAN IP
sudo nmcli con modify vlan100 ipv4.addresses 10.0.100.10/24
sudo nmcli con modify vlan100 ipv4.method manual

# 激活VLAN
sudo nmcli con up vlan100
3. 高级配置:桥接+VLAN组合
bash 复制代码
# 创建物理接口的VLAN
sudo nmcli con add type vlan con-name enp3s0-vlan300 dev enp3s0 id 300

# 创建桥接并绑定VLAN接口
sudo nmcli con add type bridge con-name br-vlan300 ifname br300
sudo nmcli con add type bridge-slave con-name br300-port ifname vlan300 master br300

# 激活配置
sudo nmcli con up enp3s0-vlan300
sudo nmcli con up br-vlan300

三、图形界面配置(GUI)

1. 创建网桥
  1. 打开 nm-connection-editor
  2. 点击 + 添加新连接
  3. 选择 Bridge 类型 → 命名连接
  4. Bridge 标签页:
    • 添加物理接口到 Slaves
    • 配置 STP/老化时间等参数
  5. IPv4/IPv6 标签页配置IP
2. 创建 VLAN
  1. 选择物理接口或桥接的连接
  2. 点击 齿轮图标 → 进入 VLAN 标签页
  3. 点击 + 添加新 VLAN:
    • 输入 VLAN ID
    • 命名接口(如 vlan100)
  4. 为新 VLAN 连接配置 IP
3. 桥接+VLAN组合
  1. 先在物理接口上创建 VLAN 连接
  2. 创建新 Bridge 连接
  3. 将 VLAN 接口(如 vlan100)添加为 Bridge Slave

四、配置文件位置

NetworkManager 配置存储在:

bash 复制代码
/etc/NetworkManager/system-connections/
  • 每个连接对应一个 .nmconnection 文件
  • 格式为 INI 风格,可直接编辑

示例:桥接配置文件

ini 复制代码
[connection]
id=br0
type=bridge
interface-name=br0

[bridge]
stp=false

[ipv4]
method=auto

[bridge-port]
interface-name=enp3s0

示例:VLAN配置文件

ini 复制代码
[connection]
id=vlan100
type=vlan
interface-name=vlan100

[vlan]
id=100
parent=enp3s0

[ipv4]
method=manual
address1=10.0.100.10/24

五、关键命令工具

功能 命令
列出连接 nmcli con show
设备状态 nmcli device status
重启连接 nmcli con reload && nmcli con up <name>
删除连接 nmcli con delete <name>
查看详情 nmcli -p con show <name>

六、高级配置技巧

1. 绑定多个物理接口到桥接
bash 复制代码
sudo nmcli con add type bridge-slave con-name br0-port2 ifname enp4s0 master br0
2. VLAN 过滤(仅允许特定 VLAN 通过桥接)
bash 复制代码
sudo nmcli con modify br0 bridge.vlan-filtering yes
sudo nmcli con modify bridge-slave-enp3s0 bridge-port.vlans "100-200"
3. 设置 MTU
bash 复制代码
# 为桥接设置MTU
sudo nmcli con modify br0 ethernet.mtu 9000

# 为VLAN设置MTU
sudo nmcli con modify vlan100 ethernet.mtu 9000
4. 持久化MAC地址
bash 复制代码
sudo nmcli con modify br0 ethernet.cloned-mac-address 52:54:00:xx:xx:xx

七、故障排除

1. 查看日志
bash 复制代码
journalctl -u NetworkManager -f
2. 检查桥接状态
bash 复制代码
# 查看桥接拓扑
bridge link

# 检查STP状态
bridge stp show
3. 验证VLAN配置
bash 复制代码
# 查看VLAN接口详情
ip -d link show vlan100

# 检查VLAN过滤
bridge vlan show
4. 常见问题解决
  • VLAN无法通信

    bash 复制代码
    # 确保交换机端口配置为Trunk模式
    # 启用混杂模式
    sudo nmcli con modify enp3s0 ethernet.accept-all-mac-addresses 1
  • 桥接性能差

    bash 复制代码
    # 关闭STP(小型网络)
    sudo nmcli con modify br0 bridge.stp no
  • 配置不生效

    bash 复制代码
    # 完全重启NetworkManager
    sudo systemctl restart NetworkManager

八、最佳实践

  1. 命名规范

    • 桥接:br-<用途> (如 br-mgmt)
    • VLAN:vlan<ID> (如 vlan100)
  2. 安全建议

    bash 复制代码
    # 禁用未使用的协议
    sudo nmcli con modify br0 ipv6.method disabled
    
    # 启用MAC地址过滤
    sudo nmcli con modify br0 bridge.mac-address-filtering 1
  3. 虚拟化集成

    • 在 virt-manager 中选择 NetworkManager 创建的桥接
    • 使用 br0br-vlan100 作为虚拟机网络源

通过 NetworkManager 可以灵活实现各种网络拓扑,从简单的家庭网络到复杂的多租户数据中心网络架构。







NetworkManager 中配置网桥(Bridge)和 VLAN 虚拟网络可以通过 nmcli 命令行工具或 nmtui 文本界面完成。以下是详细步骤和配置示例:


方法 1:使用 nmcli 命令行配置

1. 创建网桥(Bridge)

bash 复制代码
# 创建网桥(br0)
sudo nmcli connection add type bridge ifname br0 con-name br0

# 配置网桥的静态IP(可选)
sudo nmcli connection modify br0 ipv4.addresses 192.168.1.100/24
sudo nmcli connection modify br0 ipv4.gateway 192.168.1.1
sudo nmcli connection modify br0 ipv4.dns "8.8.8.8,1.1.1.1"
sudo nmcli connection modify br0 ipv4.method manual

# 启用STP(可选,防止环路)
sudo nmcli connection modify br0 bridge.stp yes

2. 将物理网卡(如 eth0)加入网桥

bash 复制代码
# 创建基于 eth0 的从属连接(slave)
sudo nmcli connection add type ethernet ifname eth0 master br0 con-name eth0-slave

# 禁用 eth0 的独立IP(因为流量现在走 br0)
sudo nmcli connection modify eth0-slave ipv4.method disabled

3. 创建 VLAN 接口并绑定到网桥

bash 复制代码
# 创建 VLAN 接口(vlan10,基于 br0)
sudo nmcli connection add type vlan ifname vlan10 dev br0 id 10 con-name vlan10

# 配置 VLAN 的静态IP
sudo nmcli connection modify vlan10 ipv4.addresses 10.0.0.10/24
sudo nmcli connection modify vlan10 ipv4.method manual

4. 启用所有连接

bash 复制代码
sudo nmcli connection up br0
sudo nmcli connection up eth0-slave
sudo nmcli connection up vlan10

方法 2:使用 nmtui 文本界面配置

  1. 运行 nmtui

    bash 复制代码
    sudo nmtui
  2. 选择 "Edit a connection""Add"

    • 选择 "Bridge" 类型,填写网桥名称(如 br0)。
    • "IPv4 Configuration" 中设置静态IP或DHCP。
    • 可选启用 "STP"(防止环路)。
  3. 将物理网卡(如 eth0)加入网桥:

    • 再次 "Add" → 选择 "Ethernet" 类型。
    • "Device" 选择 eth0,在 "Slave to" 选择 br0
    • 设置 "IPv4 Configuration""Disabled"(因为流量走 br0)。
  4. 创建 VLAN 接口:

    • 再次 "Add" → 选择 "VLAN" 类型。
    • 填写 "Interface name" (如 vlan10),"Parent" 选择 br0"VLAN ID"10
    • 配置 "IPv4 Configuration" (如静态IP 10.0.0.10/24)。
  5. 保存并退出,然后重启网络:

    bash 复制代码
    sudo systemctl restart NetworkManager

验证配置

1. 检查网桥状态

bash 复制代码
bridge link show  # 查看网桥成员
ip addr show br0 # 检查网桥IP

2. 检查 VLAN 接口

bash 复制代码
ip addr show vlan10  # 确认VLAN IP配置正确

3. 测试连通性

bash 复制代码
ping 8.8.8.8       # 测试外网
ping 10.0.0.1      # 测试同一VLAN内的设备

常见问题解决

  1. 物理网卡无法加入网桥

    • 确保物理网卡没有独立IP(ipv4.method disabled)。
    • 检查 NetworkManager 是否管理该网卡(nmcli device status)。
  2. VLAN 接口无法通信

    • 确认 br0 已正确配置并启用。
    • 检查 VLAN ID 是否与对端匹配(如交换机配置)。
  3. STP 导致网络延迟

    • 简单网络可关闭 STP(nmcli connection modify br0 bridge.stp no)。

总结

  • 网桥(Bridge):用于二层交换,可绑定物理网卡或 VLAN 接口。
  • VLAN:基于网桥或物理网卡创建虚拟子网,实现流量隔离。
  • NetworkManager :通过 nmclinmtui 灵活管理配置,适合桌面或服务器环境。

通过以上步骤,您可以轻松在 NetworkManager 下构建复杂的虚拟网络拓扑(如网桥+VLAN)。







在使用 NetworkManager 配置网桥(Bridge)和虚拟网络(VLAN)时,你可以通过命令行工具(如 nmcli)或配置文件(如 /etc/NetworkManager/system-connections/ 目录下的配置文件)来实现。以下是详细的配置方法和示例:

一、配置网桥(Bridge)

1. 使用 nmcli 命令创建网桥
bash 复制代码
# 创建网桥接口(br0)
sudo nmcli connection add type bridge con-name br0 ifname br0

# 添加物理网卡(eth0)到网桥
sudo nmcli connection add type bridge-slave con-name br0-port1 ifname eth0 master br0

# 设置网桥的IP地址(静态或DHCP)
# 方式1:DHCP(自动获取IP)
sudo nmcli connection modify br0 ipv4.method auto

# 方式2:静态IP
sudo nmcli connection modify br0 \
    ipv4.method manual \
    ipv4.addresses "192.168.1.100/24" \
    ipv4.gateway "192.168.1.1" \
    ipv4.dns "8.8.8.8,114.114.114.114"

# 激活配置
sudo nmcli connection up br0
2. 验证网桥配置
bash 复制代码
# 查看网桥状态
nmcli connection show br0

# 查看网络接口
ip addr show br0
brctl show  # 需安装 bridge-utils 包

二、配置 VLAN

1. 在网桥上创建 VLAN 子接口
bash 复制代码
# 在网桥(br0)上创建 VLAN 10 子接口
sudo nmcli connection add \
    type vlan con-name br0.10 \
    ifname br0.10 \
    dev br0 \
    id 10

# 配置 VLAN 子接口的 IP 地址
sudo nmcli connection modify br0.10 \
    ipv4.method manual \
    ipv4.addresses "192.168.10.10/24"

# 激活 VLAN 子接口
sudo nmcli connection up br0.10
2. 在物理网卡上创建 VLAN(不通过网桥)
bash 复制代码
# 在物理网卡(eth0)上创建 VLAN 20 子接口
sudo nmcli connection add \
    type vlan con-name eth0.20 \
    ifname eth0.20 \
    dev eth0 \
    id 20

# 配置 VLAN 子接口的 IP 地址
sudo nmcli connection modify eth0.20 \
    ipv4.method manual \
    ipv4.addresses "192.168.20.10/24"

# 激活 VLAN 子接口
sudo nmcli connection up eth0.20

三、配置文件方式(高级用法)

1. 网桥配置文件示例(/etc/NetworkManager/system-connections/br0
ini 复制代码
[connection]
id=br0
type=bridge
interface-name=br0

[bridge]
stp=true  # 启用生成树协议

[ipv4]
method=manual
addresses=192.168.1.100/24
gateway=192.168.1.1
dns=8.8.8.8;114.114.114.114;

[ipv6]
method=ignore
2. 网桥端口配置文件示例(/etc/NetworkManager/system-connections/br0-port1
ini 复制代码
[connection]
id=br0-port1
type=bridge-slave
interface-name=eth0
master=br0
slave-type=bridge
3. VLAN 配置文件示例(/etc/NetworkManager/system-connections/br0.10
ini 复制代码
[connection]
id=br0.10
type=vlan
interface-name=br0.10
vlan.parent=br0
vlan.id=10

[ipv4]
method=manual
addresses=192.168.10.10/24

[ipv6]
method=ignore

四、验证与故障排除

1. 查看 NetworkManager 连接状态
bash 复制代码
nmcli connection show
2. 检查网络接口配置
bash 复制代码
ip addr show  # 查看所有接口
ip link show  # 查看接口状态
3. 检查网桥和 VLAN
bash 复制代码
brctl show  # 显示网桥信息
bridge vlan show  # 显示网桥上的 VLAN 配置
4. 重启 NetworkManager 服务
bash 复制代码
sudo systemctl restart NetworkManager

五、注意事项

  1. 兼容性:确保 NetworkManager 版本支持所需功能(大多数现代 Linux 发行版已支持)。
  2. 配置冲突:避免同时使用 Netplan 和 NetworkManager 管理网络,可能导致配置冲突。
  3. VLAN 标签:确保交换机端口配置与 Linux VLAN 配置一致(访问端口/中继端口)。
  4. 防火墙 :配置防火墙(如 ufwfirewalld)允许 VLAN 流量通过。

通过上述配置,你可以使用 NetworkManager 灵活构建包含网桥和 VLAN 的复杂网络环境,满足虚拟化、多租户等场景的需求。







在 NetworkManager 的 nmcli 命令中,ifnamedev 都是用于指定网络接口的参数,但它们在使用场景和含义上有重要区别:

1. ifname (接口名称)

  • 含义:指定网络接口的实际名称

  • 使用场景

    • 创建新连接时指定接口名称
    • 修改现有连接的接口绑定
  • 特点

    • 对应物理/虚拟接口的实际名称(如 eth0, br0, vlan100
    • 在连接配置中持久化存储
    • 一个连接只能绑定一个 ifname
  • 示例

    bash 复制代码
    # 创建网桥并指定接口名称为 br0
    nmcli con add type bridge con-name br0 ifname br0

2. dev (设备)

  • 含义:指定命令操作的物理设备

  • 使用场景

    • 在创建 VLAN 等派生接口时指定父设备
    • 设备级操作(如查看设备状态)
    • 临时指定操作目标
  • 特点

    • 通常指向物理网络接口(如 eth0, enp3s0
    • 不持久化到连接配置中
    • 更常用于命令执行时的上下文指定
  • 示例

    bash 复制代码
    # 在 eth0 上创建 VLAN 100
    nmcli con add type vlan con-name vlan100 dev eth0 id 100

关键区别总结

特性 ifname dev
本质 连接绑定的接口名称 命令操作的物理设备
持久性 持久化存储在连接配置中 临时参数,不存储
使用场景 定义连接使用的接口 指定操作的父设备或目标设备
绑定关系 一个连接对应一个 ifname 一个命令可对应多个 dev 操作
典型用法 创建连接时指定接口名称 创建子接口时指定父设备

使用示例对比

创建 VLAN 接口:
bash 复制代码
# 使用 dev 指定父设备 (eth0)
# 使用 ifname 指定 VLAN 接口名称 (vlan100)
nmcli con add type vlan con-name myvlan ifname vlan100 dev eth0 id 100
  • dev eth0:指定 VLAN 的父物理设备
  • ifname vlan100:指定新建的 VLAN 接口名称
查看设备状态:
bash 复制代码
# dev 用于设备级操作
nmcli dev status          # 查看所有设备
nmcli dev show eth0       # 查看 eth0 详情
修改连接绑定的接口:
bash 复制代码
# 修改现有连接绑定的 ifname
nmcli con mod br0 ifname new-br0

使用注意事项

  1. 创建连接时必须指定

    • 创建物理接口连接时需要 ifname
    • 创建 VLAN 时需要同时指定 dev (父设备) 和 ifname (新接口名)
  2. 不能混用

    bash 复制代码
    # 错误:创建连接时缺少 ifname
    nmcli con add type ethernet con-name myeth # 缺少接口指定
    
    # 正确:
    nmcli con add type ethernet con-name myeth ifname eth0
  3. 特殊类型区别

    • 网桥连接:只需要 ifname (如 br0)

    • 网桥从接口:需要 ifname (物理接口) 和 master (网桥名)

      bash 复制代码
      nmcli con add type bridge-slave ifname eth0 master br0
  4. 重命名影响

    • 如果系统接口名称改变(如 eth0 → enp3s0),需要更新连接的 ifname
    • dev 参数不受接口重命名影响(因为它是临时参数)

最佳实践

  1. 创建新连接时始终指定 ifname
  2. 创建 VLAN/bond 等复合接口时:
    • dev 指定父设备
    • ifname 指定新接口名
  3. 设备级操作使用 nmcli dev ...
  4. 连接级操作使用 nmcli con ...

通过正确区分这两个参数,可以更精确地控制 NetworkManager 的配置行为,避免接口绑定错误和配置冲突。







在 NetworkManager 的 nmcli 命令中,ifnamedev 是两个关键参数,它们用于指定网络接口设备,但在不同上下文中有明确的区别:


核心区别

参数 全称 作用 使用场景
ifname Interface Name 指定新创建的虚拟接口名称 创建新连接时定义接口名
dev Device 指定已存在的物理/父接口 基于现有设备创建派生接口

详细解释与用法

1. ifname (接口名称)
  • 定义新接口的逻辑名称

  • 用于创建虚拟接口时命名

  • 示例场景:

    bash 复制代码
    # 创建名为 br0 的桥接
    sudo nmcli con add type bridge con-name my-bridge ifname br0
    
    # 创建名为 vlan100 的 VLAN 接口
    sudo nmcli con add type vlan con-name my-vlan ifname vlan100 dev enp3s0 id 100
  • 如果不指定,NetworkManager 会自动生成名称:

    • 桥接:bridgebridge-1
    • VLAN:vlan<ID> (如 vlan100)
2. dev (设备)
  • 指定依赖的物理/父接口

  • 用于标识基础硬件设备

  • 示例场景:

    bash 复制代码
    # 基于物理网卡 enp3s0 创建 VLAN
    sudo nmcli con add type vlan con-name vlan100 dev enp3s0 id 100
    
    # 基于现有桥接 br0 创建 VLAN
    sudo nmcli con add type vlan con-name br0-vlan200 dev br0 id 200
  • 必须指向已存在的接口(物理网卡、bond、桥接等)


组合使用场景

场景 1:创建桥接 + 添加物理接口
bash 复制代码
# 定义新桥接接口名称为 br0
sudo nmcli con add type bridge con-name my-bridge ifname br0

# 将物理网卡 enp3s0 添加到桥接(dev 指向物理设备)
sudo nmcli con add type bridge-slave con-name br0-port ifname slave-enp3s0 dev enp3s0 master br0
场景 2:在物理接口上创建 VLAN
bash 复制代码
# ifname: 定义新VLAN接口名称为 vlan100
# dev: 指定父设备为物理网卡 enp3s0
sudo nmcli con add type vlan con-name prod-vlan ifname vlan100 dev enp3s0 id 100
场景 3:在桥接上创建 VLAN
bash 复制代码
# ifname: 定义新VLAN接口名称为 mgmt-vlan
# dev: 指定父设备为已存在的桥接 br0
sudo nmcli con add type vlan con-name mgmt ifname mgmt-vlan dev br0 id 200

配置文件中对应关系

在 NetworkManager 配置文件(/etc/NetworkManager/system-connections/*.nmconnection)中:

ifname 对应:

ini 复制代码
[connection]
interface-name=br0  # ← ifname 的值

dev 对应:

  • VLAN 配置:

    ini 复制代码
    [vlan]
    parent=enp3s0  # ← dev 的值
  • Bridge-slave 配置:

    ini 复制代码
    [bridge-port]
    interface-name=enp3s0  # ← dev 的值

常见错误处理

错误 1:混淆 ifname 和 dev
bash 复制代码
# 错误:尝试用 ifname 指定父设备
sudo nmcli con add type vlan ifname enp3s0 id 100  # X

# 正确:用 dev 指定父设备
sudo nmcli con add type vlan ifname vlan100 dev enp3s0 id 100  # √
错误 2:重复接口名
bash 复制代码
# 错误:创建同名接口
sudo nmcli con add type bridge ifname br0  # 已存在br0时报错

# 解决方案1:删除冲突连接
sudo nmcli con delete br0

# 解决方案2:指定新名称
sudo nmcli con add type bridge ifname br-new

最佳实践

  1. 命名规范

    bash 复制代码
    # 桥接:br-<用途>
    nmcli con add type bridge ifname br-mgmt
    
    # VLAN:vlan<ID>-<用途>
    nmcli con add type vlan ifname vlan100-prod dev enp3s0 id 100
  2. 显式声明

    • 始终指定 ifname 避免自动命名混乱
    • 创建依赖关系时明确使用 dev
  3. 查看关系

    bash 复制代码
    # 显示接口依赖树
    nmcli -f NAME,DEVICE,TYPE con show
    
    # 示例输出
    NAME         DEVICE    TYPE
    br-mgmt      br-mgmt   bridge
    br-mgmt-port enp3s0    ethernet  # dev=enp3s0
    vlan100      vlan100   vlan      # dev=br-mgmt
  4. 修改配置

    bash 复制代码
    # 更改接口名称
    nmcli con modify my-vlan connection.interface-name vlan-new
    
    # 更改父设备
    nmcli con modify my-vlan vlan.parent br-new

总结

操作 关键参数
创建新虚拟接口 ifname (定义名称)
基于现有设备创建派生接口 dev (指定父设备)
添加到桥接 dev (物理设备) + master (桥接名)
创建 VLAN dev (父设备) + id (VLAN ID)

理解 ifnamedev 的区别是有效管理复杂网络拓扑的基础。ifname 定义"我是谁",dev 定义"我依赖谁",这种关系在配置桥接、VLAN、bonds 等虚拟化网络时至关重要。







NetworkManager 的 nmcli 命令中 ifnamedev 详解

在 NetworkManager 的 nmcli 命令中,ifnamedev 是两个关键参数,它们在配置网络接口时扮演不同但相关的角色。理解它们的区别对于正确配置复杂网络至关重要。

核心区别总结

参数 作用对象 主要功能 是否必需 配置层级
ifname 接口本身 指定操作系统识别的实际接口名称 总是必需 接口层
dev 父级设备 指定虚拟接口依赖的底层物理设备 仅对虚拟接口必需 依赖层
graph TB A[物理网卡 enp3s0] -->|dev 指定父设备| B[VLAN 接口 vlan10] B -->|ifname 标识自身| C[操作系统] D[绑定接口 bond0] -->|dev 指定父设备| E[网桥从接口 br-slave] E -->|ifname 标识自身| C

深度解析

1. ifname (Interface Name)

  • 本质:网络接口在操作系统中的唯一标识符

  • 功能

    • 定义实际数据收发的网络接口名称
    • 对应 ip link show 命令输出的接口名
    • /sys/class/net/ 目录中可见
  • 特点

    • 必须唯一:系统不能有两个同名接口
    • 持久性:重启后名称通常保持不变
    • 可自定义:用户可指定有意义的名称
  • 使用场景

    bash 复制代码
    # 创建 VLAN 接口并指定名称
    sudo nmcli con add type vlan ifname vlan-finance ...
    
    # 创建网桥并命名
    sudo nmcli con add type bridge ifname br-corporate ...

2. dev (Parent Device)

  • 本质:虚拟接口的底层依赖设备

  • 功能

    • 指定虚拟接口构建的基础物理设备
    • 定义网络功能的层级关系
    • 建立设备间的依赖链
  • 特点

    • 层级性:指向已存在的物理或虚拟设备
    • 选择性必需:仅虚拟接口需要此参数
    • 传递性:可指向其他虚拟设备
  • 使用场景

    bash 复制代码
    # 创建基于物理网卡的 VLAN
    sudo nmcli con add type vlan dev enp5s0 id 30 ...
    
    # 创建基于绑定接口的网桥从设备
    sudo nmcli con add type bridge-slave dev bond0 ...

实际配置示例分析

示例 1:VLAN 配置

bash 复制代码
sudo nmcli con add type vlan \
    con-name vlan-hr \      # 连接配置名称
    ifname vlan20 \         # VLAN 接口名称
    dev enp3s0 \            # 基于物理网卡 enp3s0
    id 20                   # VLAN ID
  • ifnamevlan20 (操作系统看到的接口名)
  • devenp3s0 (VLAN 的物理基础)

示例 2:网桥从设备配置

bash 复制代码
sudo nmcli con add type bridge-slave \
    con-name br-slave-eth1 \   # 连接配置名
    ifname eth1 \              # 接口名称
    dev eth1 \                 # 基于物理设备 eth1
    master br-office           # 所属网桥
  • ifnameeth1 (实际接口名)
  • deveth1 (物理设备自身作为父级)

示例 3:多层虚拟化

bash 复制代码
# 创建绑定接口
sudo nmcli con add type bond ifname bond0 mode active-backup

# 创建基于绑定的 VLAN
sudo nmcli con add type vlan ifname vlan-bond dev bond0 id 40

# 创建基于 VLAN 的网桥
sudo nmcli con add type bridge ifname br-vlan40 dev vlan-bond

依赖链

scss 复制代码
物理网卡 → bond0 (ifname) → vlan-bond (dev=bond0) → br-vlan40 (dev=vlan-bond)

特殊场景处理

1. 当 ifnamedev 相同

常见于物理设备直接配置:

bash 复制代码
# 物理网卡直接配置 IP
sudo nmcli con add type ethernet \
    ifname enp4s0 \    # 接口名
    dev enp4s0         # 基于自身

2. 省略 dev 的情况

对于独立接口(非虚拟)可省略:

bash 复制代码
# 物理网卡配置(有效)
sudo nmcli con add type ethernet ifname enp5s0

# 网桥配置(有效)
sudo nmcli con add type bridge ifname br-isolated

3. 必须使用 dev 的场景

所有依赖其他设备的虚拟接口:

bash 复制代码
# VLAN 必须指定 dev
sudo nmcli con add type vlan ifname vlan30 # 错误!缺少 dev

# 正确方式
sudo nmcli con add type vlan ifname vlan30 dev enp6s0

配置查看与验证

1. 查看连接配置

bash 复制代码
nmcli con show "vlan-hr" | grep -E "connection.interface|device"
# 输出:
# connection.interface: vlan20  (ifname)
# device: vlan20               (实际接口)

2. 查看设备关系

bash 复制代码
nmcli dev show vlan20 | grep -i parent
# 输出:
# VLAN.PARENT: enp3s0   (dev 指定的父设备)

3. 查看物理层级

bash 复制代码
ip -d link show vlan20
# 输出包含:
# vlan protocol 802.1Q id 20 <REORDER_HDR> 
# link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
# 父设备:enp3s0

常见错误与解决

错误 1:Error: Device not found

bash 复制代码
# 原因:dev 指定的设备不存在
sudo nmcli con add type vlan ifname vlan50 dev non_existent_eth

# 解决:确认设备存在
ip link show

错误 2:Error: Master connection not found

bash 复制代码
# 原因:master 参数依赖的连接未创建
sudo nmcli con add type bridge-slave master br-not-created

# 解决:先创建主连接
sudo nmcli con add type bridge ifname br-valid

错误 3:Error: Connection activation failed

bash 复制代码
# 原因:ifname 冲突
sudo nmcli con add type vlan ifname eth1 dev enp7s0

# 解决:使用唯一的 ifname
sudo nmcli con add type vlan ifname vlan60 dev enp7s0

最佳实践指南

  1. 命名一致性原则

    bash 复制代码
    # 连接名:描述性 (con-name)
    # ifname:技术标识 (vlanX, brX)
    sudo nmcli con add con-name "HR-VLAN" type vlan ifname vlan20 dev enp3s0
  2. 层级配置顺序

    bash 复制代码
    # 1. 先创建底层设备
    sudo nmcli con add type bond ifname bond0
    
    # 2. 再创建基于底层的虚拟设备
    sudo nmcli con add type vlan ifname vlan-bond dev bond0
  3. 参数规范表

    接口类型 ifname 规范 dev 规范
    物理以太网 系统检测名 (ethX) 可省略或同 ifname
    VLAN 接口 vlanX 或自定义 必需,指定父设备
    网桥 brX 或自定义 可省略
    网桥从设备 物理接口名 必需,同 ifname
    绑定接口 bondX 或自定义 可省略
  4. 配置备份与恢复

    bash 复制代码
    # 导出配置
    nmcli con export > nm_backup.txt
    
    # 恢复配置
    while read -r line; do nmcli con import <<< "$line"; done < nm_backup.txt

掌握 ifnamedev 的区别与配合,能够帮助您构建从简单到复杂的各种网络拓扑结构,实现灵活可靠的网络配置。







NetworkManager 的 nmcliifnamedev 详解

在 NetworkManager 的 nmcli 命令中,ifnamedev 是两个核心参数,它们在配置网络连接时扮演着不同但互补的角色。理解它们的区别对于正确配置复杂网络至关重要。

一、核心概念对比

特性 ifname dev
含义 网络接口名称 父设备名称
作用 指定要操作的物理/虚拟接口 指定虚拟接口的底层物理设备
必需性 大多数命令必需 仅用于 VLAN、绑定等特殊连接
持久性 保存在连接配置中 保存在连接配置中
可见性 系统可见的网络接口 配置中的逻辑引用
示例值 br0, vlan10, eth0 enp3s0, bond0

二、ifname 详解

1. 定义与作用

  • 接口标识符:系统中实际存在的网络设备名称
  • 数据平面:实际进行网络数据收发的实体
  • 系统可见 :通过 ip link shownmcli dev status 可查看

2. 使用场景

bash 复制代码
# 创建网桥
sudo nmcli con add type bridge ifname br0 con-name my-bridge

# 创建 VLAN 接口
sudo nmcli con add type vlan ifname vlan10 con-name my-vlan dev enp3s0 id 10

# 查看接口状态
nmcli dev show ifname br0

3. 关键特性

  • 必须唯一 :系统中不能有两个相同 ifname 的接口
  • 永久绑定:连接配置永久关联到特定接口
  • 命名规则:遵循 Linux 网络接口命名规范(如 br0, eth0)

三、dev 详解

1. 定义与作用

  • 父设备引用:指定虚拟接口依赖的底层物理设备
  • 配置属性:纯配置项,不直接对应系统接口
  • 逻辑关联:建立设备间的依赖关系

2. 使用场景

bash 复制代码
# 创建基于物理接口的 VLAN
sudo nmcli con add type vlan con-name vlan10 ifname vlan10 dev enp3s0 id 10

# 创建基于绑定接口的 VLAN
sudo nmcli con add type vlan con-name vlan20 ifname vlan20 dev bond0 id 20

3. 关键特性

  • 依赖关系:定义虚拟接口的物理基础
  • 非唯一性:多个虚拟接口可共享同一父设备
  • 动态解析 :实际指向 ifname 标识的设备

四、ifnamedev 的关系图解

graph TD A[物理接口 enp3s0] -->|dev| B[VLAN接口 vlan10] B -->|ifname| C[系统接口 vlan10] A -->|ifname| D[系统接口 enp3s0] style A fill:#f9f,stroke:#333 style B fill:#bbf,stroke:#333 style C fill:#9f9,stroke:#333 style D fill:#f96,stroke:#333
  • 物理接口ifname=enp3s0 (无 dev)
  • VLAN接口ifname=vlan10 + dev=enp3s0

五、典型配置示例

1. 物理接口配置

bash 复制代码
# 只需 ifname
sudo nmcli con add type ethernet con-name eth0 ifname enp3s0

2. VLAN 配置

bash 复制代码
# 需要 ifname 和 dev
sudo nmcli con add type vlan \
    con-name office-vlan \
    ifname vlan10 \      # 新接口名称
    dev enp3s0 \         # 父设备
    id 10                # VLAN ID

3. 绑定接口配置

bash 复制代码
# 绑定接口本身
sudo nmcli con add type bond \
    con-name my-bond \
    ifname bond0 \       # 绑定接口名称
    mode 802.3ad

# 绑定从属接口
sudo nmcli con add type bond-slave \
    con-name bond-slave1 \
    ifname enp3s0 \      # 物理接口名称
    dev enp3s0 \         # 同 ifname (物理设备)
    master bond0         # 所属绑定

4. 网桥配置

bash 复制代码
# 网桥本身
sudo nmcli con add type bridge \
    con-name server-bridge \
    ifname br0            # 网桥接口名称

# 网桥从属接口
sudo nmcli con add type bridge-slave \
    con-name br-slave \
    ifname enp3s0 \       # 物理接口名称
    dev enp3s0 \          # 同 ifname
    master br0            # 所属网桥

六、常见错误及解决方案

错误 1: 缺少 ifname

bash 复制代码
Error: Failed to add new connection: ifname is required

解决 :添加 ifname 参数指定接口名称

错误 2: dev 指定错误

bash 复制代码
Error: invalid device 'wrong-dev' specified

解决

bash 复制代码
# 查看可用设备
nmcli dev status

# 使用正确的设备名
sudo nmcli ... dev enp3s0

错误 3: ifname 冲突

bash 复制代码
Error: Device 'br0' not available

解决

bash 复制代码
# 释放接口
sudo nmcli dev disconnect br0

# 或使用不同名称
sudo nmcli ... ifname br-new

错误 4: 依赖关系错误

bash 复制代码
Error: Master connection not found

解决

bash 复制代码
# 先创建父连接
sudo nmcli con add type bond con-name my-bond ifname bond0

# 再创建依赖连接
sudo nmcli con add type vlan con-name my-vlan ifname vlan10 dev bond0 id 10

七、高级用法与技巧

1. 动态引用

bash 复制代码
# 使用现有连接作为 dev
sudo nmcli con add type vlan \
    con-name dynamic-vlan \
    ifname vlan20 \
    dev $(nmcli -g GENERAL.CONNECTION dev show enp3s0) \
    id 20

2. 多级依赖

bash 复制代码
# 物理 → 绑定 → VLAN → 网桥
sudo nmcli con add type bond con-name bond0 ifname bond0
sudo nmcli con add type bond-slave con-name slave1 ifname enp3s0 dev enp3s0 master bond0
sudo nmcli con add type vlan con-name vlan-bond ifname vlan-bond10 dev bond0 id 10
sudo nmcli con add type bridge con-name br-vlan ifname br-vlan
sudo nmcli con add type bridge-slave con-name br-slave ifname vlan-bond10 dev vlan-bond10 master br-vlan

3. 临时覆盖

bash 复制代码
# 临时更改 ifname (不持久)
sudo nmcli con mod "my-vlan" ifname vlan-temp
sudo nmcli con up "my-vlan"

# 恢复原始配置
sudo nmcli con mod "my-vlan" ifname vlan10

4. 批量操作

bash 复制代码
# 为多个接口创建 VLAN
for i in {10..20}; do
  sudo nmcli con add type vlan \
      con-name vlan$i \
      ifname vlan$i \
      dev enp3s0 \
      id $i
done

八、查看与验证

1. 查看连接配置

bash 复制代码
nmcli con show "office-vlan" | grep -E "ifname|dev"
# 输出示例:
connection.interface-name:              vlan10
vlan.parent:                            enp3s0  # dev 的存储位置

2. 查看设备关联

bash 复制代码
nmcli dev show vlan10
# 输出示例:
GENERAL.DEVICE:                         vlan10
GENERAL.TYPE:                           vlan
GENERAL.HWADDR:                         00:11:22:33:44:55
VLAN.VID:                               10
VLAN.PARENT:                            enp3s0  # dev 的实际映射

3. 验证依赖关系

bash 复制代码
# 查看 VLAN 的父设备
ip -d link show vlan10
# 输出片段:
vlan protocol 802.1Q id 10 <REORDER_HDR> 
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    parent enp3s0  # 实际依赖的父设备

九、最佳实践

  1. 命名一致性

    bash 复制代码
    # ifname 和 con-name 保持关联
    con-name: server-bridge
    ifname: br-server
    
    con-name: office-vlan10
    ifname: vlan10-office
  2. 显式依赖

    bash 复制代码
    # 创建 VLAN 时总是显式指定 dev
    sudo nmcli ... dev enp3s0
  3. 层级管理

    bash 复制代码
    # 先创建父设备连接
    nmcli con add type bond ... ifname bond0
    # 再创建子设备
    nmcli con add type vlan ... dev bond0
  4. 文档化配置

    bash 复制代码
    # 添加注释说明
    sudo nmcli con mod "office-vlan" \
        connection.autoconnect yes \
        connection.zone "office" \
        +connection.interface-name "VLAN for office network"
  5. 配置备份

    bash 复制代码
    # 备份所有连接
    nmcli con show > nmcli_backup.txt
    
    # 备份特定连接
    nmcli con show "office-vlan" > office-vlan.conf

十、总结

  • ifname :定义实际网络接口的名称(系统可见)
  • dev :定义虚拟接口的物理基础(配置依赖)

黄金法则

  1. 所有连接都需要 ifname
  2. 只有依赖物理设备的连接需要 dev (VLAN、绑定从属等)
  3. dev 值必须指向有效的现有接口 ifname
  4. 物理接口配置只需 ifname,无需 dev

通过正确使用这两个参数,您可以精确控制网络拓扑中的依赖关系,构建从简单到复杂的各种网络架构。



















相关推荐
傻啦嘿哟8 分钟前
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
爬虫·python·tcp/ip
liuyunluoxiao25 分钟前
基于生产者消费者模型的线程池【Linux操作系统】
linux
程序员黄老师1 小时前
Ubuntu 24.04上安装 Intelligent Pinyin 中文输入法
linux·运维·ubuntu
HONG_YANG2 小时前
ERPNext 介绍、安装和维护建议
linux
HONG_YANG2 小时前
ERPNext 搭建教程:Linux 一键部署与维护
linux
Enti7c2 小时前
什么是void,什么时候使用void类型?never和void的区别
linux·运维·ubuntu
IPdodo全球网络服务3 小时前
什么是IP关联?跨境卖家如何有效避免IP关联?
网络·网络协议·tcp/ip
scilwb3 小时前
基于Isaac Sim场景的Coverage Path Planning 项目部署完整指南
linux
知北游天4 小时前
Linux:多线程---同步&&生产者消费者模型
java·linux·网络
EasyCVR4 小时前
EasyCVR视频汇聚平台国标接入设备TCP主动播放失败排查指南
网络·tcp/ip·音视频