NetworkManager配置网桥(bridge)虚拟网络(vlan) 笔记250711
NetworkManager配置网桥(bridge)虚拟网络(vlan) 笔记250711
使用 NetworkManager 配置网桥(Bridge)和虚拟局域网(VLAN)详解
NetworkManager 是现代 Linux 系统中管理网络连接的标准工具,支持通过命令行(nmcli
)或图形界面配置复杂的网络拓扑。以下是配置网桥和 VLAN 的完整指南:
一、核心概念关系
- 物理接口:真实网络硬件(如 enp3s0)
- VLAN 接口:基于物理接口的虚拟分区(如 vlan10)
- 网桥:连接多个接口的虚拟交换机(如 br0)
二、配置前准备
1. 查看当前网络状态
nmcli device status
# 输出示例:
DEVICE TYPE STATE CONNECTION
enp3s0 ethernet connected enp3s0
2. 安装必要工具
sudo apt install network-manager vlan # Debian/Ubuntu
sudo dnf install NetworkManager vlan # Fedora/CentOS
三、完整配置流程
1. 创建 VLAN 接口
# 创建 VLAN10 接口
sudo nmcli con add type vlan con-name vlan10 dev enp3s0 id 10 ifname vlan10# 验证创建
nmcli con show vlan10
2. 创建网桥接口
# 创建网桥 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 接口加入网桥
# 添加 VLAN10 作为网桥从属
sudo nmcli con add type bridge-slave con-name br-vlan10 ifname vlan10 master br0# 验证绑定
bridge link show br0
4. 配置 IP 地址
# 静态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. 激活所有连接
# 停用原物理接口
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 网桥
# 创建 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:带绑定接口的网桥
# 创建绑定接口
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)
-
打开网络连接管理器:
nm-connection-editor
-
创建 VLAN:
- 点击 “+” 添加新连接
- 选择 “VLAN”
- 配置:
- 设备:选择物理接口 (enp3s0)
- VLAN ID:10
- 连接名称:vlan10
-
创建网桥:
- 点击 “+” 添加新连接
- 选择 “Bridge”
- 配置:
- 网桥名称:br0
- STP:启用/禁用
-
添加 VLAN 到网桥:
- 在网桥配置中,切换到 “Bridge” 标签
- 点击 “Add” 添加新接口
- 选择 “VLAN” 类型
- 选择已创建的 vlan10 接口
-
配置 IP:
- 切换到 “IPv4 Settings” 标签
- 方法:手动或 DHCP
- 添加 IP 地址/网关/DNS
六、验证与监控
1. 查看网桥状态
bridge -c link show br0
# 输出示例:
2: vlan10@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding
2. 检查 VLAN 配置
cat /proc/net/vlan/vlan10
# 输出示例:
vlan10 VID: 10 REORDER_HDR: 1 dev->priv_flags: 1
3. 测试网络连通性
ping -I br0 8.8.8.8 -c 4
4. 监控实时流量
sudo tcpdump -i br0 -nn -v
七、故障排除
1. VLAN 未激活
# 检查物理接口状态
ip link show enp3s0# 验证VLAN模块加载
lsmod | grep 8021q# 手动加载模块
sudo modprobe 8021q
2. 网桥未转发流量
# 检查STP阻塞状态
bridge stp show br0# 禁用STP临时测试
sudo nmcli con modify br0 bridge.stp no
sudo nmcli con up br0
3. IP 地址未分配
# 手动获取IP
sudo dhclient -v br0# 检查DHCP请求
journalctl -u NetworkManager | grep DHCP
4. 性能问题
# 增加网桥缓存
sudo sysctl -w net.core.netdev_max_backlog=10000# 禁用防火墙检查
sudo sysctl -w net.bridge.bridge-nf-call-iptables=0
八、持久化与备份
1. 配置文件位置
/etc/NetworkManager/system-connections/
├── br0.nmconnection
├── br-vlan10.nmconnection
└── vlan10.nmconnection
2. 备份配置
sudo cp -r /etc/NetworkManager/system-connections/ ~/nm-backup
3. 恢复配置
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 |
十、最佳实践
-
命名规范:
- VLAN 接口:
vlan<id>
(如 vlan10) - 网桥接口:
br-<purpose>
(如 br-mgmt) - 连接名称:
<type>-<id>
(如 vlan10, br-mgmt)
- VLAN 接口:
-
安全隔离:
# 启用MAC过滤 sudo nmcli con modify br0 bridge.mac-address 00:11:22:33:44:55 sudo nmcli con modify br0 bridge.unicast-flood no
-
云环境适配:
# AWS/Azure 特殊配置 sudo nmcli con modify "Wired connection" ipv4.ignore-auto-routes true sudo nmcli con modify "Wired connection" ipv4.never-default yes
-
性能优化:
# 禁用不需要的服务 sudo nmcli con modify br0 ipv6.method disabled# 增加缓冲区 sudo nmcli con modify br0 ethernet.mtu 9000
通过以上配置,您可以创建复杂的网络拓扑:
- 物理接口承载多个 VLAN
- VLAN 接口加入网桥
- 虚拟机/容器通过网桥接入特定 VLAN
- 实现网络隔离和流量控制
所有配置在系统重启后自动生效,可通过 nmcli
或图形界面轻松管理。
NetworkManager 配置网桥(Bridge)与虚拟局域网(VLAN)详解
NetworkManager 是 Linux 系统中广泛使用的网络管理工具,提供了命令行(nmcli)和图形界面两种方式来配置复杂的网络拓扑。下面我将详细介绍如何使用 NetworkManager 配置网桥和 VLAN。
一、核心概念
1. NetworkManager 对象模型
2. 关键术语
- 连接(Connection):配置文件的逻辑表示
- 接口(Interface):物理或虚拟网络设备
- 主连接(Master Connection):控制其他连接的连接(如网桥)
- 从连接(Slave Connection):被主连接控制的连接(如网桥成员)
二、使用 nmcli 配置网桥和 VLAN
1. 创建基础网桥
# 创建网桥连接
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 的网桥
# 在物理接口上创建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 + 网桥
# 创建绑定接口
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. 创建网桥
- 打开"设置" → “网络”
- 点击右下角⚙️图标 → “添加配置文件” → 选择"网桥"
- 输入连接名称(如"Network Bridge")
- 在"网桥"选项卡:
- 添加接口:点击"+"添加物理接口
- 配置STP等高级选项
- 在"IPv4/IPv6"选项卡配置IP地址
- 点击"应用"
2. 创建VLAN
- 在"网络"设置中点击⚙️图标 → “添加配置文件” → 选择"VLAN"
- 配置:
- 父设备:选择物理接口(如eth0)
- VLAN ID:输入VLAN号(如100)
- VLAN接口名:自动生成(如eth0.100)
- 配置IP地址(可选)
- 点击"应用"
3. 将VLAN加入网桥
- 编辑已创建的网桥连接
- 在"网桥"选项卡点击"添加"
- 选择"VLAN接口" → 选择创建的VLAN接口
- 保存配置
四、配置文件详解
NetworkManager 配置存储在 /etc/NetworkManager/system-connections/
目录
1. 网桥配置文件示例 (br0.nmconnection)
[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)
[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)
[connection]
id=br0-eth0
type=ethernet
interface-name=eth0
master=br0 # 所属主连接
slave-type=bridge # 从属类型[ethernet]
mac-address=00:11:22:33:44:55
五、常用管理命令
1. 查看连接状态
nmcli connection show
nmcli connection show br0
2. 查看设备状态
nmcli device status
nmcli device show br0
3. 重新加载配置
nmcli connection reload
4. 重启连接
nmcli connection down br0 && nmcli connection up br0
5. 查看VLAN信息
nmcli -f general,vlan dev show eth0.100
六、高级配置技巧
1. 配置网桥参数
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过滤
# 在网桥上启用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地址
nmcli connection modify br0 ethernet.cloned-mac-address 00:11:22:33:44:55
4. 配置MTU
nmcli connection modify br0 ethernet.mtu 9000
七、常见问题解决
1. 网桥无法启动
- 检查:
journalctl -u NetworkManager
- 可能原因:物理接口被其他连接占用
- 解决:删除冲突连接
nmcli connection delete <name>
2. VLAN流量不通
- 检查:
bridge vlan show
- 解决:
# 确保交换机端口配置为trunk模式 # 检查VLAN过滤设置 nmcli connection modify br0 bridge.vlan-filtering yes
3. 网桥成员接口不工作
- 检查:
nmcli device show <interface>
- 解决:确保物理接口连接已激活
nmcli connection up br0-eth0
4. 网络重启后配置丢失
- 原因:未正确保存配置
- 解决:
nmcli connection save systemctl restart NetworkManager
八、实际应用场景
1. KVM虚拟机网络
# 创建专用网桥
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. 容器网络隔离
# 创建带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. 企业级网络拓扑
九、重要注意事项
-
依赖关系:
- 先创建从属连接(物理接口、VLAN等)
- 再创建主连接(网桥)
-
启动顺序:
# 正确顺序 nmcli connection up bond0 nmcli connection up bond0.100 nmcli connection up br-vlan100
-
WiFi桥接限制:
- 标准WiFi不支持直接桥接
- 需使用特殊模式(如WDS或4地址模式)
-
云环境:
- AWS/Azure等云平台需要特殊配置
- 可能需要启用"允许转发"选项
-
防火墙:
# 允许网桥流量 firewall-cmd --zone=trusted --add-interface=br0 --permanent firewall-cmd --reload
通过NetworkManager,您可以高效地管理复杂的网络配置,所有设置都能在重启后保持持久化。对于生产环境,建议使用nmcli命令以便自动化部署。
以下是使用NetworkManager配置网桥(Bridge)和虚拟局域网(VLAN)的完整指南,涵盖基础配置、高级组合及故障处理方案。所有操作均基于nmcli
命令实现持久化配置。
一、网桥(Bridge)配置
1. 基础网桥创建
将物理网卡(如enp1s0
)桥接到br0
,使虚拟机/容器直接接入物理网络:
# 创建网桥(无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:
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:
sudo nmcli con modify br0 ipv4.method auto
3. 验证网桥
bridge link show br0 # 查看桥接接口
ip addr show br0 # 检查IP分配
关键点:
- 物理网卡(
enp1s0
)必须释放IP(由网桥接管)。- 生产环境建议禁用STP(
bridge.stp no
)以降低延迟。
二、虚拟局域网(VLAN)配置
1. 基于物理接口创建VLAN
在物理网卡enp1s0
上创建VLAN ID 10的子接口:
# 创建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隔离:
# 创建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(如vlan10
、vlan20
)。
三、高级组合配置
1. 绑定(Bonding)+ 网桥 + VLAN
实现高可用网络:双网卡绑定 → 网桥 → VLAN接口。
# 创建绑定接口(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
):
# 创建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. 关键命令
nmcli con show --active # 查看活跃连接
bridge vlan show # 显示VLAN映射
ovs-vsctl show # 检查OVS配置(若使用)
journalctl -u NetworkManager # 查看网络管理日志
3. 安全优化
- 禁用IPv6路由通告(防中间人攻击):
sudo nmcli con modify br0 ipv6.accept-ra no
- 防火墙规则(仅允许SSH):
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虚拟网络需要分步骤操作。以下是详细配置指南:
一、环境准备
- 确认NetworkManager版本(建议1.28+):
nmcli --version
- 查看物理网卡名称:
ip link show
二、配置网桥(Bridge)
1. 创建网桥
nmcli connection add type bridge con-name br0 ifname br0 \ipv4.method disabled ipv6.method disabled
2. 将物理网卡加入网桥
nmcli connection add type ethernet con-name br0-slave-1 ifname enp1s0 \master br0
三、配置VLAN子接口
1. 创建VLAN连接(以VLAN ID 10为例)
nmcli connection add type vlan con-name vlan10 ifname enp1s0.10 \dev enp1s0 id 10
2. 将VLAN接口加入网桥
nmcli connection modify vlan10 master br0
四、配置IP地址(可选)
1. 为网桥设置静态IP
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
nmcli connection modify br0 ipv4.method auto
五、激活配置
nmcli connection down br0-slave-1 && nmcli connection up br0
六、验证配置
ip -d link show br0 # 查看网桥状态
bridge vlan show # 查看VLAN配置
nmcli connection show # 检查连接关系
七、多VLAN场景示例
# 创建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
八、注意事项
- 物理网卡配置:加入网桥的物理网卡需禁用独立IP配置
- STP协议:默认启用生成树协议,可通过以下命令关闭:
nmcli connection modify br0 bridge.stp no
- 持久化配置:NetworkManager默认自动保存配置
- 防火墙规则:需单独配置iptables/nftables规则处理VLAN流量
九、故障排查
- 检查服务状态:
systemctl status NetworkManager
- 查看日志:
journalctl -u NetworkManager -f
- 验证VLAN标签:
tcpdump -i enp1s0 -e -n -vv
通过以上步骤,您可以在NetworkManager管理下实现网桥与VLAN的协同工作,适用于虚拟化环境、容器网络隔离等场景。
在 Linux 系统中,通过 NetworkManager 配置 网桥(Bridge) 和 虚拟网络(VLAN) 的步骤如下。以下是基于 nmcli
(NetworkManager 命令行工具)的详细操作指南:
1. 安装 NetworkManager 工具
确保系统已安装 NetworkManager
和 bridge-utils
(用于 VLAN 支持):
# Debian/Ubuntu
sudo apt install network-manager bridge-utils# CentOS/RHEL
sudo yum install NetworkManager bridge-utils
2. 启动并启用 NetworkManager 服务
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager
3. 创建网桥(Bridge)
步骤 1:创建网桥连接
nmcli connection add type bridge con-name br0 ifname br0 autoconnect yes
con-name br0
:网桥的名称。ifname br0
:网桥的接口名称。
步骤 2:关闭 STP(可选)
nmcli con modify br0 bridge.stp no
- STP(生成树协议)默认启用,关闭后可减少网络延迟。
步骤 3:配置网桥的 IP 地址
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:激活网桥
nmcli con up br0
4. 将物理网卡加入网桥
假设物理网卡为 ens192
,将其加入网桥 br0
:
nmcli connection add type bridge-slave con-name br0-ens192 ifname ens192 master br0
master br0
:指定该接口的主网桥为br0
。- 激活连接:
nmcli con up br0-ens192
5. 配置 VLAN(虚拟网络)
步骤 1:创建 VLAN 接口
假设物理网卡为 ens192
,VLAN ID 为 100
:
nmcli connection add type vlan con-name ens192.100 ifname ens192.100 \dev ens192 id 100
dev ens192
:物理网卡名称。id 100
:VLAN 标识符。
步骤 2:配置 VLAN 接口的 IP 地址
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 接口
nmcli con up ens192.100
6. 验证配置
查看接口状态
ip a show
确认 br0
和 ens192.100
接口已启用,并分配了正确的 IP 地址。
测试网络连通性
ping 8.8.8.8
7. 高级配置(可选)
启用负载均衡或故障转移
如果需要将多个物理网卡加入网桥以实现负载均衡或故障转移,可以添加多个 bridge-slave
连接:
nmcli connection add type bridge-slave con-name br0-ens193 ifname ens193 master br0
nmcli con up br0-ens193
配置巨型帧(Jumbo Frames)
nmcli con modify br0 ipv4.mtu 9000
nmcli con up br0
8. 保存并持久化配置
NetworkManager 的配置默认已持久化,重启后会自动应用。可以通过以下命令检查:
nmcli con show
常见问题排查
- 网桥未生效:
- 检查
nmcli con show
中的连接状态。 - 确保物理网卡已正确加入网桥。
- 检查
- VLAN 无法通信:
- 检查交换机端口是否启用了 VLAN 标记(802.1Q)。
- 使用
tcpdump
或wireshark
抓包分析流量。
- IP 地址冲突:
- 确保网桥和 VLAN 接口的 IP 地址在同一子网内,或配置正确的路由。
通过以上步骤,您可以使用 NetworkManager 配置网桥和 VLAN 虚拟网络。如果需要进一步优化或支持复杂拓扑,建议结合 ovs
(Open vSwitch)或其他虚拟化工具。
在Linux系统中,NetworkManager是一个强大的网络配置工具,可用于创建网桥(Bridge)和虚拟网络(VLAN)。以下是使用NetworkManager配置这两种网络的详细步骤:
一、使用NetworkManager配置网桥(Bridge)
1. 创建网桥连接
# 创建名为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. 添加物理网卡到网桥
# 将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. 激活连接
sudo nmcli connection up br0
sudo nmcli connection up bridge-slave-eth0
4. 验证配置
# 查看网桥信息
brctl show br0# 检查IP地址
ip addr show br0
二、使用NetworkManager配置VLAN
1. 创建基于物理网卡的VLAN
# 在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连接
sudo nmcli connection up eth0.10
3. 验证配置
# 查看VLAN信息
ip -d link show eth0.10
三、组合配置:网桥 + VLAN
场景:创建包含多个VLAN的网桥
# 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的连接配置文件存储在:
/etc/NetworkManager/system-connections/
每个连接对应一个配置文件,例如:
- 网桥:
/etc/NetworkManager/system-connections/br0
- VLAN:
/etc/NetworkManager/system-connections/eth0.10
五、图形界面配置方法
-
打开网络连接设置
- GNOME:设置 → 网络 → 齿轮图标 → 添加
- KDE:系统设置 → 网络连接
-
创建网桥
- 点击 添加 → 选择 网桥
- 配置 IPv4设置(静态IP或DHCP)
- 在 端口 选项卡中添加物理网卡
-
创建VLAN
- 点击 添加 → 选择 VLAN
- 指定父设备(如eth0)和VLAN ID
- 配置IP地址
六、故障排查
-
查看连接状态
nmcli connection show
-
检查设备状态
nmcli device status
-
查看详细日志
journalctl -u NetworkManager -b
-
重新加载配置
sudo nmcli connection reload
七、注意事项
-
STP(生成树协议)
若存在环路风险,启用STP:sudo nmcli connection modify br0 bridge.stp yes
-
VLAN ID冲突
确保网络中VLAN ID唯一,避免冲突。 -
服务依赖
确保NetworkManager服务运行:sudo systemctl status NetworkManager
通过NetworkManager,你可以灵活配置网桥和VLAN,满足虚拟化、网络隔离和多租户环境的需求。配置完成后,这些网络设置将在系统重启后自动生效。
以下是在 NetworkManager 中配置网桥和虚拟网络 VLAN 的操作:
配置网桥
- 创建网桥
nmcli con add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
这条命令创建了一个名为 br0
的网桥,初始状态下不配置 IP 地址。
- 添加成员接口到网桥
nmcli con add type bridge-slave con-name br0-eth1 ifname eth1 master br0
将物理接口 eth1
添加到网桥 br0
中。若要添加多个物理接口,重复此命令即可。
- 配置网桥的 IP 地址
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 功能
nmcli con mod br0 bridge.stp yes
开启网桥 br0
的生成树协议(STP),以防止网络环路。
- 启动或停止网桥
nmcli con up br0
nmcli con down br0
分别用于启动和停止网桥 br0
。
- 查看网桥的配置
nmcli con show | grep bridge
查看网桥的配置信息。
配置虚拟网络 VLAN
- 创建 VLAN 接口
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 接口桥接到网桥
nmcli con mod br0 +bridge.port 100 +bridge.settings stp on
将 VLAN 接口 vlan100
桥接到网桥 br0
上。
使用 NetworkManager 配置网桥和 VLAN 的步骤
1. 创建 VLAN 接口
假设物理网卡为 eth0
,需创建 VLAN ID 为 10
的虚拟接口:
nmcli connection add type vlan \con-name vlan10 \ifname vlan10 \dev eth0 \id 10
- 说明:
dev eth0
指定物理网卡,id 10
为 VLAN ID,ifname vlan10
是虚拟接口名称。
2. 创建网桥接口
创建名为 br0
的网桥:
nmcli connection add type bridge \con-name br0 \ifname br0
3. 将 VLAN 接口加入网桥
将 VLAN 接口 vlan10
绑定为网桥 br0
的从属端口:
nmcli connection add type bridge-slave \con-name br0-port1 \ifname vlan10 \master br0
4. 配置 IP 地址(可选)
为网桥 br0
设置静态 IP(例如 192.168.10.1/24
):
nmcli connection modify br0 \ipv4.addresses 192.168.10.1/24 \ipv4.method manual
5. 激活连接
按顺序激活所有配置:
nmcli connection up vlan10 # 激活 VLAN
nmcli connection up br0-port1 # 激活网桥从属端口
nmcli connection up br0 # 激活网桥
6. 验证配置
- 检查接口状态:
ip addr show br0 # 查看网桥 IP bridge link show # 查看网桥绑定端口 cat /proc/net/vlan/vlan10 # 验证 VLAN 配置
- 测试连通性:
ping -I br0 192.168.10.2 # 通过网桥测试通信
关键注意事项
- 依赖顺序:
VLAN 接口需在物理网卡激活后启动,网桥需在从属端口就绪后启动。 - 物理网卡配置:
物理网卡(如eth0
)不能配置 IP 地址,否则会与网桥冲突。 - NetworkManager 服务:
确保服务运行:systemctl enable --now NetworkManager
。 - 防火墙:
若需跨 VLAN 通信,需配置防火墙规则(如firewalld
或nftables
)。
故障排查
- 连接失败:
检查日志:journalctl -u NetworkManager -f
。 - VLAN 未生效:
确认交换机端口已配置为Trunk
模式并允许 VLAN 10 通过。 - 网桥未转发流量:
验证内核转发已启用:sysctl net.ipv4.ip_forward=1 # 临时生效 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf # 永久生效
应用场景
此配置适用于:
- 虚拟机/容器网络:
将虚拟机(如 KVM)的虚拟网卡绑定到br0
,实现隔离通信。 - 多租户网络:
不同 VLAN 对应不同租户,网桥提供同一 VLAN 内的二层互通。 - 网络分段:
如将管理流量(VLAN 10)与业务流量(VLAN 20)通过不同网桥隔离。
相关问题
- 如何在 NetworkManager 中配置多个 VLAN 绑定到同一网桥?
- NetworkManager 与
netplan
或systemd-networkd
配置桥接+VLAN 有何区别? - 如何为网桥接口配置 DHCP 客户端?
- NetworkManager 配置的 VLAN 接口是否支持 802.1Q-in-Q(嵌套 VLAN)?
: 引用自 Linux Bridge VLAN 功能文档,适用于虚拟化环境中的网络分段需求。
在 Linux 中,可以通过 NetworkManager 图形界面或命令行工具配置 网桥(Bridge) 和 VLAN 虚拟网络。以下是详细步骤:
一、使用 NetworkManager 图形界面配置
1. 安装 NetworkManager 和相关工具
sudo apt install network-manager network-manager-gnome bridge-utils
# 或 CentOS/RHEL:
sudo yum install NetworkManager NetworkManager-gnome bridge-utils
2. 创建桥接接口(Bridge)
-
打开 NetworkManager 设置:
- 点击右上角的网络图标 → 选择 “网络设置” → 点击 “添加”。
- 或者在终端中运行:
nm-connection-editor
-
创建桥接连接:
- 在左侧选择 “桥接连接” → 点击 “添加”。
- 输入桥接名称(如
br0
)。
-
配置桥接接口:
- 桥接接口:保留默认名称(如
br0
)。 - 绑定物理网卡:在 “桥接接口” 标签下,点击 “+” 添加物理网卡(如
eth0
或enp0s3
)。 - 网络设置:
- 勾选 “自动连接”。
- 配置 IP 地址(DHCP 或静态 IP)。
- 如果物理网卡之前有网络配置,需关闭其 DHCP 并仅通过桥接接口管理网络。
- 桥接接口:保留默认名称(如
-
保存并应用:
- 点击 “保存” → 关闭窗口 → 网络服务会自动重启。
3. 创建 VLAN 接口
-
打开 NetworkManager 连接编辑器:
nm-connection-editor
-
创建 VLAN 连接:
- 在左侧选择 “VLAN 连接” → 点击 “添加”。
- 输入 VLAN 名称(如
vlan100
)。
-
配置 VLAN 接口:
- VLAN 名称:自定义名称(如
vlan100
)。 - 父接口:选择物理网卡(如
eth0
)或桥接接口(如br0
)。 - VLAN ID:输入 VLAN 标识号(如
100
)。 - 网络设置:配置 IP 地址(DHCP 或静态 IP)。
- VLAN 名称:自定义名称(如
-
保存并应用:
- 点击 “保存” → 关闭窗口 → 网络服务自动重启。
二、使用命令行配置
1. 创建桥接接口(Bridge)
# 创建桥接配置文件
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 接口
# 创建 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 接口加入桥接(可选)
# 将 VLAN 接口(如 vlan100)绑定到桥接接口(如 br0)
sudo nmcli con add type bridge-slave ifname vlan100 master br0
三、验证配置
-
查看网络接口:
ip a # 应该看到 br0、vlan100 等接口
-
检查桥接状态:
brctl show # 显示桥接接口及其绑定的物理或 VLAN 接口
-
测试网络连通性:
ping -I br0 8.8.8.8 # 通过桥接接口 ping ping -I vlan100 192.168.2.1 # 通过 VLAN 接口 ping
四、注意事项
-
物理网卡配置:
- 如果物理网卡(如
eth0
)之前有独立的网络配置(如 DHCP),需先禁用其网络管理:sudo nmcli con down "Wired connection 1" # 关闭默认有线连接
- 如果物理网卡(如
-
桥接与 VLAN 的组合:
- VLAN 接口可以作为桥接接口的成员,或者独立使用。
- 如果 VLAN 接口加入桥接,需确保桥接的 IP 配置与 VLAN 的网络在同一网段。
-
重启服务:
sudo nmcli con reload # 重新加载配置 sudo systemctl restart NetworkManager # 重启 NetworkManager
五、典型场景示例
场景 1:桥接 + VLAN
# 创建桥接 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. 创建网桥接口
# 创建名为 br0 的网桥
sudo nmcli con add type bridge ifname br0
2. 配置网桥参数(可选)
- 禁用 STP(生成树协议)(适用于简单网络):
sudo nmcli con modify br0 bridge.stp no
- 设置静态 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 modify br0 ipv4.method manual
- 启用 DHCP:
sudo nmcli con modify br0 ipv4.method auto
3. 激活网桥
sudo nmcli con up br0
二、绑定物理网卡到网桥
1. 将物理接口(如 eth0)加入网桥
sudo nmcli con add type bridge-slave ifname eth0 master br0
2. 移除物理接口原有 IP
sudo nmcli con down "原物理接口连接名" # 如 "Wired connection 1"
sudo nmcli con modify eth0 ipv4.method none # 清除 IP 配置
3. 重启网络服务
sudo systemctl restart NetworkManager
三、配置 VLAN 子接口
1. 创建 VLAN 子接口
# 创建 VLAN ID 为 100 的子接口 eth0.100
sudo nmcli con add type vlan con-name eth0.100 ifname eth0 id 100
2. 配置 VLAN 子接口 IP
- 静态 IP:
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:
sudo nmcli con modify eth0.100 ipv4.method auto
3. 激活 VLAN 子接口
sudo nmcli con up eth0.100
四、验证配置
1. 查看网桥状态
bridge link show # 查看桥接接口及绑定设备
ip addr show br0 # 查看网桥 IP 信息
2. 查看 VLAN 子接口
ip addr show eth0.100 # 验证 VLAN 子接口配置
3. 测试网络连通性
ping 192.168.1.1 # 测试网桥连通性
ping 192.168.100.1 # 测试 VLAN 子接口连通性
五、持久化配置
1. 通过 nmcli
保存配置
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
注意事项
- 物理接口清理:绑定到桥接前需移除物理接口的 IP 配置。
- STP 设置:简单网络可禁用 STP 以提升性能。
- 防火墙规则:确保防火墙允许桥接和 VLAN 流量。
- 模块加载:若使用 VLAN,需加载
8021q
内核模块:sudo modprobe 8021q echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf
通过以上步骤,您可以使用 NetworkManager 高效配置网桥和 VLAN,适用于虚拟化(如 KVM)或网络分区场景。
以下是使用 NetworkManager 配置网桥(Bridge)和虚拟网络(VLAN)的完整指南,涵盖命令行工具 nmcli
和配置文件两种方法,适用于 RHEL/CentOS 8+、Fedora 及 Rocky Linux 等现代 Linux 发行版。
🔧 一、配置网桥(Bridge)
1. 使用 nmcli
命令创建网桥
# 创建网桥设备(名称为 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. 优化网桥性能
# 关闭 STP(小型网络避免延迟)
sudo nmcli connection modify br0 bridge.stp no
# 设置转发延迟为 0 秒
sudo nmcli connection modify br0 bridge.forward-delay 0
3. 验证网桥状态
ip addr show br0 # 检查 IP 分配
brctl show br0 # 查看绑定接口(需安装 bridge-utils)
nmcli device status # 查看 NetworkManager 管理的设备
🌐 二、配置虚拟网络(VLAN)
1. 创建 VLAN 子接口
# 加载 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 配置
ip -d link show eth0.100 # 查看 VLAN 标签(输出含 `vlan protocol 802.1Q`)
ping 192.168.100.1 # 测试网关连通性
⚙️ 三、高级场景:网桥 + VLAN 整合
1. 将 VLAN 接口绑定到网桥
# 目标:让虚拟机通过网桥接入 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 网桥,实现业务与管理流量分离。
⚠️ 四、注意事项与故障排查
-
物理接口释放 IP
- 物理网卡(如
eth0
)绑定到网桥或 VLAN 前,需移除其原有 IP 配置(通过nmcli
或删除旧连接)。 - 错误示例:物理接口和网桥同时配置 IP → 导致路由冲突。
- 物理网卡(如
-
交换机配合要求
- VLAN 需交换机端口配置为 Trunk 模式,并允许对应 VLAN ID 通过。
- 示例(Cisco 交换机):
interface GigabitEthernet0/1switchport mode trunkswitchport trunk allowed vlan 100,200
-
服务依赖
- 确保 NetworkManager 运行:
sudo systemctl enable --now NetworkManager
- 确保 NetworkManager 运行:
-
常见问题排查
- 网桥未激活:
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 命令行(推荐)
# 创建网桥并禁用 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
:
[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
):
[connection]
id=br0-slave-eth0
type=ethernet
interface-name=eth0
master=br0
slave-type=bridge # 声明为网桥从属接口
⚠️ 关键规则:物理网卡(如
eth0
)必须无独立 IP,否则引发冲突。
📡 三、VLAN 配置步骤
1. 前置条件
- 交换机配置:连接服务器的端口需设为 Trunk 模式,允许目标 VLAN(如 VLAN100)通过。
- 内核支持:加载 802.1Q 模块
sudo modprobe 8021q echo "8021q" | sudo tee /etc/modules-load.d/vlan.conf # 持久化
2. 创建 VLAN 接口
# 在物理网卡 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
ip -d link show eth0.100 # 检查 VLAN ID 标记
ping 192.168.100.1 # 测试与 VLAN 网关连通性
🌐 四、网桥 + VLAN 综合应用(虚拟机网络隔离)
场景:虚拟机通过网桥接入指定 VLAN(如 VLAN105)
# 创建 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 |
💎 六、最佳实践总结
- 性能优化:
- 关闭 STP(
bridge.stp no
)和转发延迟(forward-delay 0
)减少虚拟机网络延迟。
- 关闭 STP(
- 高可用架构:
- 物理网卡 → Bond 聚合(
mode=802.3ad
) → VLAN → 网桥,提升链路容错。
- 物理网卡 → Bond 聚合(
- 权限管理:
- 将用户加入
libvirt
组:sudo usermod -aG libvirt $USER
,避免虚拟机无权限访问网桥。
- 将用户加入
通过以上配置,可实现虚拟机直通物理网络、业务流量隔离等高阶网络场景。完整命令参考 https://networkmanager.dev/docs/api/latest/。
在Linux系统中使用NetworkManager配置网桥(Bridge)和虚拟局域网(VLAN)可以通过以下步骤完成。以下是详细的操作指南:
一、配置网桥(Bridge)
网桥用于将多个网络接口(物理或虚拟)连接成一个逻辑网络,常用于虚拟化环境。
1. 创建网桥接口
使用 nmcli
命令行工具创建网桥接口:
# 创建名为 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):
sudo nmcli con add type bridge con-name br0 ifname br0 \ipv4.method auto
2. 将物理接口添加到网桥
假设物理接口为 enp1s0
(需替换为实际接口名):
# 将物理接口连接到网桥
sudo nmcli con add type bridge-slave con-name br0-slave ifname enp1s0 master br0
3. 启用并验证网桥
# 激活连接
sudo nmcli con up br0# 查看网桥状态
bridge link show br0
# 或使用 ip 命令
ip addr show br0
注意:原物理接口的IP配置需移除(由网桥接管)。
二、配置VLAN虚拟网络
VLAN用于在同一物理接口上划分多个逻辑网络。
1. 创建VLAN接口
假设物理接口为 enp1s0
,VLAN ID为 10
:
# 创建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:
sudo nmcli con add type vlan con-name vlan10 ifname vlan10 \dev enp1s0 id 10 \ipv4.method auto
2. 激活并验证VLAN
sudo nmcli con up vlan10# 检查VLAN是否生效
ip -d link show vlan10
三、结合网桥与VLAN
若需在网桥上启用VLAN,例如让桥接流量支持VLAN划分:
示例:创建带VLAN的网桥
- 先创建VLAN接口(如
vlan10
,方法同上)。 - 将VLAN接口加入网桥:
sudo nmcli con add type bridge-slave con-name br0-vlan10 ifname vlan10 master br0
- 激活网桥:
sudo nmcli con up br0
四、配置文件路径
NetworkManager的配置保存在 /etc/NetworkManager/system-connections/
目录下,例如:
- 网桥配置:
br0.nmconnection
- VLAN配置:
vlan10.nmconnection
五、验证与排错
-
验证连接状态:
nmcli con show nmcli dev status
-
检查IP地址和路由:
ip addr ip route
-
查看VLAN标签:
cat /proc/net/vlan/vlan10
-
测试网络连通性:
ping 192.168.1.1 # 网桥网关 ping 192.168.10.1 # VLAN网关
常见问题
- 物理接口未激活:确保物理接口已启用(
sudo nmcli dev connect enp1s0
)。 - VLAN未生效:确认交换机端口配置了对应的VLAN ID和Trunk模式。
- NetworkManager服务未运行:
sudo systemctl restart NetworkManager
通过上述步骤,您可以在Linux系统中使用NetworkManager灵活配置网桥和VLAN虚拟网络。根据具体需求调整IP地址和接口名称即可。
以下是使用 NetworkManager 配置网桥(Bridge)和 VLAN 的详细步骤,涵盖 nmcli
命令行和图形界面(GUI)两种方式。
一、配置网桥(Bridge)
方法 1:使用 nmcli
命令行
-
创建桥接接口:
sudo nmcli connection add type bridge con-name br0 ifname br0
con-name br0
:连接名称(自定义)。ifname br0
:接口名称(建议与连接名一致)。
-
配置桥接 IP(静态或 DHCP):
# 静态 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
-
将物理网卡加入桥接:
sudo nmcli connection add type bridge-slave con-name br0-port1 ifname enp3s0 master br0
ifname enp3s0
:物理网卡名称(通过ip a
查看)。master br0
:绑定到桥接接口br0
。
-
启动桥接:
sudo nmcli connection up br0
方法 2:使用图形界面(GUI)
- 打开网络管理器:
nm-connection-editor # 或通过系统设置 → 网络
- 新建桥接连接:
- 点击 + → 选择 Bridge → 设置名称(如
br0
)。
- 点击 + → 选择 Bridge → 设置名称(如
- 配置 IP:
- 切换到 IPv4 标签 → 选择手动或 DHCP。
- 添加物理网卡:
- 在 Bridge 标签 → 点击 Add → 选择 Ethernet → 指定物理网卡(如
enp3s0
)。
- 在 Bridge 标签 → 点击 Add → 选择 Ethernet → 指定物理网卡(如
- 保存并启用连接。
二、配置 VLAN
方法 1:使用 nmcli
命令行
-
在物理网卡上创建 VLAN:
sudo nmcli connection add type vlan con-name vlan100 dev enp3s0 id 100
con-name vlan100
:VLAN 连接名称。dev enp3s0
:物理网卡名称。id 100
:VLAN ID。
-
配置 VLAN IP(静态或 DHCP):
# 静态 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
-
启动 VLAN:
sudo nmcli connection up vlan100
方法 2:使用图形界面(GUI)
- 打开网络管理器:
nm-connection-editor
- 新建 VLAN 连接:
- 点击 + → 选择 VLAN → 设置名称(如
vlan100
)。
- 点击 + → 选择 VLAN → 设置名称(如
- 配置参数:
- Parent Interface:选择物理网卡(如
enp3s0
)。 - VLAN ID:输入 VLAN ID(如
100
)。
- Parent Interface:选择物理网卡(如
- 配置 IP:
- 切换到 IPv4 标签 → 选择手动或 DHCP。
- 保存并启用连接。
三、桥接 + VLAN 组合配置
场景:在桥接接口上绑定 VLAN
-
在物理网卡上创建 VLAN:
sudo nmcli connection add type vlan con-name vlan100 dev enp3s0 id 100
-
创建桥接并绑定 VLAN:
# 创建桥接 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
-
启动所有连接:
sudo nmcli connection up br0 sudo nmcli connection up vlan100
四、验证与调试
-
检查桥接和 VLAN 状态:
bridge link # 查看桥接关联的接口 ip -d link show # 显示所有接口详情(包括 VLAN 标签)
-
测试网络连通性:
ping 8.8.8.8 # 测试外网访问(需配置正确 IP/DNS)
-
日志排查问题:
journalctl -u NetworkManager # 查看 NetworkManager 日志
五、持久化配置
所有通过 nmcli
或 GUI 的配置会自动保存到以下目录:
/etc/NetworkManager/system-connections/
- 重启后配置自动生效,无需额外操作。
附:补充命令
命令 | 说明 |
---|---|
nmcli connection show | 列出所有连接配置 |
nmcli device status | 查看设备状态 |
nmcli connection delete <name> | 删除指定连接 |
通过以上步骤,您可以灵活组合 Bridge 和 VLAN,实现复杂的网络拓扑(如虚拟机多租户隔离)。
NetworkManager 中 con-name
、ifname
、dev
详解
在 NetworkManager 中,con-name
、ifname
和 dev
是三个核心概念,它们定义了网络连接的不同方面。理解它们的区别和关系对于正确配置网络至关重要。
一、概念对比表
参数 | 含义 | 作用域 | 是否必需 | 是否唯一 | 示例 |
---|---|---|---|---|---|
con-name | 连接配置名称 | 逻辑配置 | 是 | 是 | “office-bridge” |
ifname | 网络接口名称 | 物理/虚拟设备 | 是 | 是 | br0, vlan100 |
dev | 父设备名称 | 物理设备 | 仅VLAN/绑定 | 否 | enp3s0 |
二、详细解析
1. con-name
(连接名称)
- 本质:配置文件的逻辑标识符
- 特点:
- 用户自定义的友好名称
- 在
/etc/NetworkManager/system-connections/
中保存为文件 - 用于管理连接(启动、停止、修改)
- 示例:
nmcli con add con-name "office-bridge" type bridge ifname br0
- 重要规则:
- 必须在系统中唯一
- 建议使用描述性名称(如 “server-bridge-vlan10”)
2. ifname
(接口名称)
- 本质:网络接口的实际设备名
- 特点:
- 对应
ip link show
中的接口名 - 必须是系统中存在的设备
- 用于数据包传输
- 对应
- 示例:
nmcli con add type bridge ifname br0 ... # br0是实际接口
- 重要规则:
- 必须遵守 Linux 设备命名规则(如 br0, eth0, wlan0)
- 在系统中必须唯一
3. dev
(父设备)
- 本质:虚拟接口依赖的物理设备
- 特点:
- 仅用于创建依赖设备时(VLAN、绑定接口等)
- 指向物理接口或聚合接口
- 示例:
nmcli con add type vlan dev enp3s0 id 10 ... # enp3s0是父设备
- 使用场景:
- 创建 VLAN 时指定物理接口
- 创建绑定接口时指定成员接口
- 创建网桥从属接口时指定物理接口
三、三者关系图解
graph LRA[物理设备 enp3s0] -->|dev| B[VLAN接口 vlan10]B -->|ifname| C[连接配置 vlan10-config]C -->|con-name| D[“vlan10-office”]style A fill:#f9f,stroke:#333style B fill:#bbf,stroke:#333style C fill:#f96,stroke:#333style D fill:#9f9,stroke:#333
- 物理设备 (enp3s0):实际网卡
- VLAN接口 (vlan10):基于物理设备的虚拟接口
- 连接配置 (vlan10-config):管理接口的逻辑配置
- 连接名称 (“vlan10-office”):配置文件的友好名称
四、典型配置示例
1. VLAN 配置
# 创建 VLAN 连接
sudo nmcli con add type vlan \con-name "office-vlan10" \ # 连接名称(逻辑配置)ifname vlan10 \ # 接口名称(虚拟设备)dev enp3s0 \ # 父设备(物理网卡)id 10 # VLAN ID
2. 网桥配置
# 创建网桥
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)
# 创建绑定接口
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
冲突
Error: Connection 'office-bridge' already exists
解决:
# 删除现有连接
sudo nmcli con delete "office-bridge"# 或使用不同名称
nmcli con add con-name "office-bridge-new" ...
错误 2: ifname
已在使用
Error: Device 'br0' not available
解决:
# 释放接口
sudo nmcli dev disconnect br0# 或使用不同接口名
nmcli con add ... ifname br1
错误 3: dev
指定错误
Error: invalid device 'enp5s0' specified
解决:
# 检查可用设备
nmcli dev status# 使用正确的设备名
nmcli con add ... dev enp3s0
六、查看和管理
1. 查看所有连接
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. 查看设备状态
nmcli dev status
# 输出示例:
DEVICE TYPE STATE CONNECTION
br0 bridge connected office-bridge
vlan10 vlan connected vlan10-office
enp3s0 ethernet connected br-slave-enp3s0
3. 查看连接详情
nmcli con show "office-bridge"
输出片段:
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
七、最佳实践
-
命名规范:
# VLAN连接: vlan<ID>-<用途> con-name: vlan10-office# 网桥连接: bridge-<用途> con-name: bridge-servers# 物理接口: slave-<接口名> con-name: slave-enp3s0
-
关系管理:
- 当删除主连接(如网桥)时,从属连接不会自动删除
- 需要手动管理依赖关系:
# 删除网桥及其从属 sudo nmcli con delete "office-bridge" sudo nmcli con delete "slave-enp3s0"
-
配置持久化:
- 所有配置自动保存到
/etc/NetworkManager/system-connections/
- 文件命名格式:
<con-name>.nmconnection
- 所有配置自动保存到
-
接口命名技巧:
# 使用前缀标识类型 ifname: br-mgmt # 管理网桥 ifname: vlan20-data # 数据VLAN ifname: bond0-trunk # 骨干绑定
八、高级用法
1. 修改现有连接
# 更改连接名称
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. 多层级配置
# 物理接口 → 绑定 → 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. 临时覆盖配置
# 临时更改IP(不修改持久配置)
sudo nmcli con mod "office-bridge" ipv4.addresses 10.0.0.100/24
sudo nmcli con up "office-bridge"
总结
con-name
:你的配置"身份证"(逻辑标识)ifname
:网络的"门牌号"(实际接口)dev
:虚拟设备的"根基"(物理依赖)
正确理解和使用这三个参数:
- 使用
con-name
管理配置逻辑 - 通过
ifname
操作实际网络接口 - 使用
dev
建立虚拟设备的物理依赖 - 遵循命名规范提高可维护性
- 定期检查连接状态确保配置生效
通过合理组合这些参数,您可以构建复杂的网络拓扑,同时保持配置的清晰和可管理性。
NetworkManager 中 con-name, ifname, dev 参数详解
在 NetworkManager 配置中,con-name
、ifname
和 dev
是三个关键参数,它们分别用于不同目的但相互关联。理解它们的区别和用法对于正确配置网络至关重要。
核心概念对比
参数 | 全称 | 作用 | 是否必需 | 示例 |
---|---|---|---|---|
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
中显示
- 使用场景:
# 创建连接时指定 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 show
或nmcli device status
中可见 - 必须是系统中存在的有效设备名
- 使用场景:
# 绑定连接到特定接口 nmcli connection add type ethernet ifname eth0 ...# 创建虚拟接口时指定名称 nmcli connection add type bridge ifname br0 ...
- 注意事项:
- 对于物理接口必须与实际设备名匹配
- 对于虚拟接口(如网桥)可自定义名称
- 如果省略,NetworkManager 会自动分配
3. dev (父设备)
- 本质:指定从属连接依赖的父设备
- 特点:
- 仅用于从属连接类型(如 VLAN、网桥成员等)
- 指向已存在的设备(通过 ifname 或 con-name)
- 建立设备间的层次关系
- 使用场景:
# 创建 VLAN 时指定父设备 nmcli connection add type vlan dev eth0 id 100 ...# 创建网桥成员时指定父设备 nmcli connection add type bridge-slave dev eth0 ...
- 注意事项:
- 父设备必须已存在或同时创建
- 可以指向接口名(ifname)或连接名(con-name)
- 对于主连接类型(如普通以太网)不需要此参数
三者关系图解
配置示例
示例 1:简单以太网连接
# 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 的网桥
# 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 引用父设备
# 先创建父连接
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 而非 ifnameid 200
常见问题解决
问题 1:设备未找到
Error: Failed to add 'br0-eth0' connection: Device 'eth0' not found
解决方案:
- 检查设备是否存在:
ip link show
- 确保设备未被其他连接占用
- 明确指定 ifname:
nmcli connection add ... ifname eth0 ...
问题 2:连接名称冲突
Error: Failed to add 'br0' connection: name 'br0' already used
解决方案:
- 使用唯一 con-name:
nmcli connection add type bridge con-name "Backup-Bridge" ...
- 删除冲突连接:
nmcli connection delete br0
问题 3:父设备指定错误
Error: Failed to add VLAN connection: parent device not found
解决方案:
- 确保父设备存在且已激活
- 使用正确的引用方式:
# 使用 ifname nmcli connection add ... dev eth0 ...# 或使用 con-name nmcli connection add ... dev "Main-Uplink" ...
最佳实践
-
命名规范:
- 使用有意义的 con-name:
Server-Bridge
,Office-WiFi
- 保持 ifname 标准化:
eth0
,br0
,vlan100
- 使用有意义的 con-name:
-
引用优先级:
-
配置顺序:
# 1. 先创建父连接 nmcli connection add ... con-name Parent ...# 2. 再创建从属连接 nmcli connection add ... dev Parent ...
-
验证命令:
# 查看连接配置 nmcli connection show "My-Bridge"# 查看设备状态 nmcli device show br0# 检查父设备引用 nmcli -g connection.interface-name,connection.slave-type connection
高级用法
动态接口名称
当 ifname 不确定时(如多网卡环境):
# 使用通配符匹配接口
nmcli connection add type ethernet \con-name "Dynamic-Eth" \match.interface-name "enp*" \ipv4.method auto
连接名称模板
批量创建连接:
for i in {1..4}; donmcli 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
:
[connection]
id=VLAN-100
type=vlan
interface-name=eth0.100
master=br0 # 引用主连接的 con-name[vlan]
parent=eth0 # 父设备的 ifname
id=100
理解 con-name
、ifname
和 dev
的区别与联系,可以帮助您构建更可靠、易维护的网络配置。con-name 是逻辑标识,ifname 是物理标识,dev 则用于建立设备间的层次关系。
在NetworkManager中配置VLAN时,ifname
和dev
参数具有明确的分工和区别,以下是详细说明:
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.10
、enp1s0.20
)。 - 若名称格式错误(如缺少VLAN ID),配置将失败。
- 名称必须符合Linux接口命名规范(如
2. dev
参数
-
定义:
dev
(设备)用于指定VLAN所基于的父物理接口。在上述命令中,dev=enp1s0
表示VLAN接口enp1s0.10
将基于物理接口enp1s0
创建。 -
作用:
- 确保NetworkManager知道在哪个物理接口上创建VLAN。
- 父设备必须是已存在的物理接口,否则配置将失败。
-
关键点:
- 参数值必须为已存在的物理接口名称(如
enp1s0
、eth0
)。 - 若指定的设备不存在,NetworkManager会报错。
- 参数值必须为已存在的物理接口名称(如
3. 核心区别
参数 | 功能 | 必要性 | 错误场景 |
---|---|---|---|
ifname | 定义新VLAN接口的名称 | 必需 | 名称格式错误(如enp1s0 缺少VLAN ID) |
dev | 指定VLAN的父物理接口 | 必需 | 父设备不存在或名称拼写错误(如enp1s0 误写为enp1s ) |
4. 示例验证
-
正确命令:
nmcli connection add type vlan con-name vlan10 ifname enp1s0.10 dev enp1s0 id 10
- 创建VLAN 10,接口名为
enp1s0.10
,基于物理接口enp1s0
。
- 创建VLAN 10,接口名为
-
错误示例:
- 省略
dev
参数:nmcli connection add type vlan con-name vlan10 ifname enp1s0.10 id 10
- 错误:NetworkManager无法确定VLAN的父设备,配置失败。
ifname
格式错误: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
已安装(默认大多数发行版已包含) - 安装必要工具(部分系统需额外安装):
sudo apt install bridge-utils vlan # Debian/Ubuntu sudo dnf install bridge-utils # RHEL/CentOS/Fedora
- 加载内核模块:
sudo modprobe bridge sudo modprobe 8021q
2. 配置物理接口连接 VLAN
假设物理接口为
eth0
,需创建 VLAN ID100
方法一:使用 nmcli
命令
# 创建 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
:
[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
命令
# 创建网桥
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
:
[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 到网桥):
[connection]
id=br0-port1
type=bridge-slave
interface-name=eth0.100
master=br0[bridge-slave]
4. 验证配置
# 检查网桥状态
bridge link show br0# 查看 VLAN 接口
ip -d link show eth0.100# 测试网络连通性
ping 192.168.100.1
5. 其他常见操作
添加更多接口到网桥
sudo nmcli con add type bridge-slave con-name br0-port2 ifname enp5s0 master br0
删除连接
sudo nmcli con delete eth0.100
sudo nmcli con delete br0
重启 NetworkManager
sudo systemctl restart NetworkManager
关键注意事项
- 物理接口状态:物理接口(如
eth0
)必须处于 未配置 IP 状态(由 VLAN 接管)。 - 依赖顺序:确保 VLAN 接口在网桥之前激活(NetworkManager 通常自动处理)。
- 防火墙:若使用
firewalld
,需将网桥加入信任区域:sudo firewall-cmd --add-interface=br0 --zone=trusted --permanent sudo firewall-cmd --reload
- 虚拟化支持:此配置适用于 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 在网桥之上(推荐)
架构 2:VLAN 在物理接口之上
配置步骤(架构 1:VLAN 在网桥之上)
1. 创建网桥
# 创建网桥设备
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. 添加物理接口到网桥
# 添加物理接口(如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
# 在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
# 创建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 创建网桥
# 为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. 配置网桥参数
# 设置转发延迟
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 高级配置
# 设置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. 绑定多个物理接口到网桥
# 添加第二个接口
sudo nmcli con add type bridge-slave ifname enp4s0 master br0 con-name br0-slave2
sudo nmcli con up br0-slave2
验证配置
查看网桥状态
# 查看所有网桥
nmcli con show --active | grep bridge# 查看网桥详细信息
nmcli -f bridge con show br0# 查看网桥成员
bridge link show
查看 VLAN 状态
# 查看所有VLAN
nmcli con show --active | grep vlan# 查看VLAN详细信息
ip -d link show enp3s0.10# 查看VLAN配置
cat /proc/net/vlan/enp3s0.10
持久化与故障排除
配置持久化
NetworkManager 配置默认自动保存到以下位置:
/etc/NetworkManager/system-connections/├── br0.nmconnection├── br0-slave.nmconnection├── br0.10.nmconnection└── vlan10.nmconnection
故障排除命令
# 检查服务状态
systemctl status NetworkManager# 查看详细日志
journalctl -u NetworkManager -f# 重新加载配置
nmcli con reload# 测试连通性
ping -I br0.10 8.8.8.8
KVM 虚拟化集成
1. 将虚拟机连接到 VLAN 网桥
<!-- libvirt 虚拟机配置示例 -->
<interface type='bridge'><source bridge='br0.10'/> <!-- 使用VLAN接口 --><model type='virtio'/>
</interface>
2. 将虚拟机连接到普通网桥
<interface type='bridge'><source bridge='br0'/><virtualport type='openvswitch'/> <!-- 可选:使用OVS --><vlan><tag id='10'/> <!-- 指定VLAN --></vlan>
</interface>
删除配置
删除网桥
sudo nmcli con del br0
sudo nmcli con del br0-slave
删除 VLAN
sudo nmcli con del br0.10
sudo nmcli con del vlan10
最佳实践
-
命名规范:
- 网桥:
br-<用途>
(如br-mgmt
) - VLAN:
<接口>.<vlanid>
或vlan<id>
- 网桥:
-
安全考虑:
# 禁用MAC地址学习(增强安全) sudo nmcli con modify br0 bridge.disable-mac-learning yes
-
性能优化:
# 禁用STP(小型网络) sudo nmcli con modify br0 bridge.stp no# 设置转发延迟为0 sudo nmcli con modify br0 bridge.forward-delay 0
-
备份配置:
# 备份所有连接配置 sudo cp -r /etc/NetworkManager/system-connections/ ~/nm-backup
通过以上配置,您可以灵活地使用 NetworkManager 创建复杂的网络拓扑,满足服务器虚拟化、容器网络和网络隔离等各种需求。
NetworkManager 配置网桥(Bridge)与虚拟网络(VLAN)详解
NetworkManager 提供了完整的 CLI 和 GUI 工具来管理桥接和 VLAN 配置。以下是详细的操作指南:
一、基础概念关系
- Bridge:二层网络设备,连接多个物理/虚拟接口
- VLAN:在物理接口/Bridge 上创建的虚拟子接口
- 两者可独立使用,也可组合使用(如:在 Bridge 上创建 VLAN)
二、命令行配置(nmcli)
1. 创建网桥(Bridge)
# 创建桥接设备 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 接口
# 在物理接口上创建 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组合
# 创建物理接口的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. 创建网桥
- 打开
nm-connection-editor
- 点击 + 添加新连接
- 选择 Bridge 类型 → 命名连接
- 在 Bridge 标签页:
- 添加物理接口到 Slaves
- 配置 STP/老化时间等参数
- 在 IPv4/IPv6 标签页配置IP
2. 创建 VLAN
- 选择物理接口或桥接的连接
- 点击 齿轮图标 → 进入 VLAN 标签页
- 点击 + 添加新 VLAN:
- 输入 VLAN ID
- 命名接口(如 vlan100)
- 为新 VLAN 连接配置 IP
3. 桥接+VLAN组合
- 先在物理接口上创建 VLAN 连接
- 创建新 Bridge 连接
- 将 VLAN 接口(如 vlan100)添加为 Bridge Slave
四、配置文件位置
NetworkManager 配置存储在:
/etc/NetworkManager/system-connections/
- 每个连接对应一个
.nmconnection
文件 - 格式为 INI 风格,可直接编辑
示例:桥接配置文件
[connection]
id=br0
type=bridge
interface-name=br0[bridge]
stp=false[ipv4]
method=auto[bridge-port]
interface-name=enp3s0
示例:VLAN配置文件
[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. 绑定多个物理接口到桥接
sudo nmcli con add type bridge-slave con-name br0-port2 ifname enp4s0 master br0
2. VLAN 过滤(仅允许特定 VLAN 通过桥接)
sudo nmcli con modify br0 bridge.vlan-filtering yes
sudo nmcli con modify bridge-slave-enp3s0 bridge-port.vlans "100-200"
3. 设置 MTU
# 为桥接设置MTU
sudo nmcli con modify br0 ethernet.mtu 9000# 为VLAN设置MTU
sudo nmcli con modify vlan100 ethernet.mtu 9000
4. 持久化MAC地址
sudo nmcli con modify br0 ethernet.cloned-mac-address 52:54:00:xx:xx:xx
七、故障排除
1. 查看日志
journalctl -u NetworkManager -f
2. 检查桥接状态
# 查看桥接拓扑
bridge link# 检查STP状态
bridge stp show
3. 验证VLAN配置
# 查看VLAN接口详情
ip -d link show vlan100# 检查VLAN过滤
bridge vlan show
4. 常见问题解决
-
VLAN无法通信:
# 确保交换机端口配置为Trunk模式 # 启用混杂模式 sudo nmcli con modify enp3s0 ethernet.accept-all-mac-addresses 1
-
桥接性能差:
# 关闭STP(小型网络) sudo nmcli con modify br0 bridge.stp no
-
配置不生效:
# 完全重启NetworkManager sudo systemctl restart NetworkManager
八、最佳实践
-
命名规范:
- 桥接:
br-<用途>
(如br-mgmt
) - VLAN:
vlan<ID>
(如vlan100
)
- 桥接:
-
安全建议:
# 禁用未使用的协议 sudo nmcli con modify br0 ipv6.method disabled# 启用MAC地址过滤 sudo nmcli con modify br0 bridge.mac-address-filtering 1
-
虚拟化集成:
- 在 virt-manager 中选择 NetworkManager 创建的桥接
- 使用
br0
或br-vlan100
作为虚拟机网络源
通过 NetworkManager 可以灵活实现各种网络拓扑,从简单的家庭网络到复杂的多租户数据中心网络架构。
在 NetworkManager 中配置网桥(Bridge)和 VLAN 虚拟网络可以通过 nmcli
命令行工具或 nmtui
文本界面完成。以下是详细步骤和配置示例:
方法 1:使用 nmcli
命令行配置
1. 创建网桥(Bridge)
# 创建网桥(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)加入网桥
# 创建基于 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 接口并绑定到网桥
# 创建 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. 启用所有连接
sudo nmcli connection up br0
sudo nmcli connection up eth0-slave
sudo nmcli connection up vlan10
方法 2:使用 nmtui
文本界面配置
- 运行
nmtui
:sudo nmtui
- 选择 “Edit a connection” → “Add”:
- 选择 “Bridge” 类型,填写网桥名称(如
br0
)。 - 在 “IPv4 Configuration” 中设置静态IP或DHCP。
- 可选启用 “STP”(防止环路)。
- 选择 “Bridge” 类型,填写网桥名称(如
- 将物理网卡(如
eth0
)加入网桥:- 再次 “Add” → 选择 “Ethernet” 类型。
- 在 “Device” 选择
eth0
,在 “Slave to” 选择br0
。 - 设置 “IPv4 Configuration” 为 “Disabled”(因为流量走 br0)。
- 创建 VLAN 接口:
- 再次 “Add” → 选择 “VLAN” 类型。
- 填写 “Interface name”(如
vlan10
),“Parent” 选择br0
,“VLAN ID” 填10
。 - 配置 “IPv4 Configuration”(如静态IP
10.0.0.10/24
)。
- 保存并退出,然后重启网络:
sudo systemctl restart NetworkManager
验证配置
1. 检查网桥状态
bridge link show # 查看网桥成员
ip addr show br0 # 检查网桥IP
2. 检查 VLAN 接口
ip addr show vlan10 # 确认VLAN IP配置正确
3. 测试连通性
ping 8.8.8.8 # 测试外网
ping 10.0.0.1 # 测试同一VLAN内的设备
常见问题解决
-
物理网卡无法加入网桥
- 确保物理网卡没有独立IP(
ipv4.method disabled
)。 - 检查
NetworkManager
是否管理该网卡(nmcli device status
)。
- 确保物理网卡没有独立IP(
-
VLAN 接口无法通信
- 确认
br0
已正确配置并启用。 - 检查 VLAN ID 是否与对端匹配(如交换机配置)。
- 确认
-
STP 导致网络延迟
- 简单网络可关闭 STP(
nmcli connection modify br0 bridge.stp no
)。
- 简单网络可关闭 STP(
总结
- 网桥(Bridge):用于二层交换,可绑定物理网卡或 VLAN 接口。
- VLAN:基于网桥或物理网卡创建虚拟子网,实现流量隔离。
- NetworkManager:通过
nmcli
或nmtui
灵活管理配置,适合桌面或服务器环境。
通过以上步骤,您可以轻松在 NetworkManager 下构建复杂的虚拟网络拓扑(如网桥+VLAN)。
在使用 NetworkManager 配置网桥(Bridge)和虚拟网络(VLAN)时,你可以通过命令行工具(如 nmcli
)或配置文件(如 /etc/NetworkManager/system-connections/
目录下的配置文件)来实现。以下是详细的配置方法和示例:
一、配置网桥(Bridge)
1. 使用 nmcli
命令创建网桥
# 创建网桥接口(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. 验证网桥配置
# 查看网桥状态
nmcli connection show br0# 查看网络接口
ip addr show br0
brctl show # 需安装 bridge-utils 包
二、配置 VLAN
1. 在网桥上创建 VLAN 子接口
# 在网桥(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(不通过网桥)
# 在物理网卡(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
)
[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
)
[connection]
id=br0-port1
type=bridge-slave
interface-name=eth0
master=br0
slave-type=bridge
3. VLAN 配置文件示例(/etc/NetworkManager/system-connections/br0.10
)
[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 连接状态
nmcli connection show
2. 检查网络接口配置
ip addr show # 查看所有接口
ip link show # 查看接口状态
3. 检查网桥和 VLAN
brctl show # 显示网桥信息
bridge vlan show # 显示网桥上的 VLAN 配置
4. 重启 NetworkManager 服务
sudo systemctl restart NetworkManager
五、注意事项
- 兼容性:确保 NetworkManager 版本支持所需功能(大多数现代 Linux 发行版已支持)。
- 配置冲突:避免同时使用 Netplan 和 NetworkManager 管理网络,可能导致配置冲突。
- VLAN 标签:确保交换机端口配置与 Linux VLAN 配置一致(访问端口/中继端口)。
- 防火墙:配置防火墙(如
ufw
或firewalld
)允许 VLAN 流量通过。
通过上述配置,你可以使用 NetworkManager 灵活构建包含网桥和 VLAN 的复杂网络环境,满足虚拟化、多租户等场景的需求。
在 NetworkManager 的 nmcli
命令中,ifname
和 dev
都是用于指定网络接口的参数,但它们在使用场景和含义上有重要区别:
1. ifname
(接口名称)
- 含义:指定网络接口的实际名称
- 使用场景:
- 创建新连接时指定接口名称
- 修改现有连接的接口绑定
- 特点:
- 对应物理/虚拟接口的实际名称(如
eth0
,br0
,vlan100
) - 在连接配置中持久化存储
- 一个连接只能绑定一个
ifname
- 对应物理/虚拟接口的实际名称(如
- 示例:
# 创建网桥并指定接口名称为 br0 nmcli con add type bridge con-name br0 ifname br0
2. dev
(设备)
- 含义:指定命令操作的物理设备
- 使用场景:
- 在创建 VLAN 等派生接口时指定父设备
- 设备级操作(如查看设备状态)
- 临时指定操作目标
- 特点:
- 通常指向物理网络接口(如
eth0
,enp3s0
) - 不持久化到连接配置中
- 更常用于命令执行时的上下文指定
- 通常指向物理网络接口(如
- 示例:
# 在 eth0 上创建 VLAN 100 nmcli con add type vlan con-name vlan100 dev eth0 id 100
关键区别总结
特性 | ifname | dev |
---|---|---|
本质 | 连接绑定的接口名称 | 命令操作的物理设备 |
持久性 | 持久化存储在连接配置中 | 临时参数,不存储 |
使用场景 | 定义连接使用的接口 | 指定操作的父设备或目标设备 |
绑定关系 | 一个连接对应一个 ifname | 一个命令可对应多个 dev 操作 |
典型用法 | 创建连接时指定接口名称 | 创建子接口时指定父设备 |
使用示例对比
创建 VLAN 接口:
# 使用 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 接口名称
查看设备状态:
# dev 用于设备级操作
nmcli dev status # 查看所有设备
nmcli dev show eth0 # 查看 eth0 详情
修改连接绑定的接口:
# 修改现有连接绑定的 ifname
nmcli con mod br0 ifname new-br0
使用注意事项
-
创建连接时必须指定:
- 创建物理接口连接时需要
ifname
- 创建 VLAN 时需要同时指定
dev
(父设备) 和ifname
(新接口名)
- 创建物理接口连接时需要
-
不能混用:
# 错误:创建连接时缺少 ifname nmcli con add type ethernet con-name myeth # 缺少接口指定# 正确: nmcli con add type ethernet con-name myeth ifname eth0
-
特殊类型区别:
- 网桥连接:只需要
ifname
(如br0
) - 网桥从接口:需要
ifname
(物理接口) 和master
(网桥名)nmcli con add type bridge-slave ifname eth0 master br0
- 网桥连接:只需要
-
重命名影响:
- 如果系统接口名称改变(如 eth0 → enp3s0),需要更新连接的
ifname
dev
参数不受接口重命名影响(因为它是临时参数)
- 如果系统接口名称改变(如 eth0 → enp3s0),需要更新连接的
最佳实践
- 创建新连接时始终指定
ifname
- 创建 VLAN/bond 等复合接口时:
- 用
dev
指定父设备 - 用
ifname
指定新接口名
- 用
- 设备级操作使用
nmcli dev ...
- 连接级操作使用
nmcli con ...
通过正确区分这两个参数,可以更精确地控制 NetworkManager 的配置行为,避免接口绑定错误和配置冲突。
在 NetworkManager 的 nmcli
命令中,ifname
和 dev
是两个关键参数,它们用于指定网络接口设备,但在不同上下文中有明确的区别:
核心区别
参数 | 全称 | 作用 | 使用场景 |
---|---|---|---|
ifname | Interface Name | 指定新创建的虚拟接口名称 | 创建新连接时定义接口名 |
dev | Device | 指定已存在的物理/父接口 | 基于现有设备创建派生接口 |
详细解释与用法
1. ifname
(接口名称)
- 定义新接口的逻辑名称
- 用于创建虚拟接口时命名
- 示例场景:
# 创建名为 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 会自动生成名称:
- 桥接:
bridge
、bridge-1
- VLAN:
vlan<ID>
(如vlan100
)
- 桥接:
2. dev
(设备)
- 指定依赖的物理/父接口
- 用于标识基础硬件设备
- 示例场景:
# 基于物理网卡 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:创建桥接 + 添加物理接口
# 定义新桥接接口名称为 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
# ifname: 定义新VLAN接口名称为 vlan100
# dev: 指定父设备为物理网卡 enp3s0
sudo nmcli con add type vlan con-name prod-vlan ifname vlan100 dev enp3s0 id 100
场景 3:在桥接上创建 VLAN
# 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
对应:
[connection]
interface-name=br0 # ← ifname 的值
dev
对应:
- VLAN 配置:
[vlan] parent=enp3s0 # ← dev 的值
- Bridge-slave 配置:
[bridge-port] interface-name=enp3s0 # ← dev 的值
常见错误处理
错误 1:混淆 ifname 和 dev
# 错误:尝试用 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:重复接口名
# 错误:创建同名接口
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
最佳实践
-
命名规范:
# 桥接:br-<用途> nmcli con add type bridge ifname br-mgmt# VLAN:vlan<ID>-<用途> nmcli con add type vlan ifname vlan100-prod dev enp3s0 id 100
-
显式声明:
- 始终指定
ifname
避免自动命名混乱 - 创建依赖关系时明确使用
dev
- 始终指定
-
查看关系:
# 显示接口依赖树 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
-
修改配置:
# 更改接口名称 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) |
理解 ifname
和 dev
的区别是有效管理复杂网络拓扑的基础。ifname
定义"我是谁",dev
定义"我依赖谁",这种关系在配置桥接、VLAN、bonds 等虚拟化网络时至关重要。
NetworkManager 的 nmcli
命令中 ifname
与 dev
详解
在 NetworkManager 的 nmcli
命令中,ifname
和 dev
是两个关键参数,它们在配置网络接口时扮演不同但相关的角色。理解它们的区别对于正确配置复杂网络至关重要。
核心区别总结
参数 | 作用对象 | 主要功能 | 是否必需 | 配置层级 |
---|---|---|---|---|
ifname | 接口本身 | 指定操作系统识别的实际接口名称 | 总是必需 | 接口层 |
dev | 父级设备 | 指定虚拟接口依赖的底层物理设备 | 仅对虚拟接口必需 | 依赖层 |
深度解析
1. ifname
(Interface Name)
- 本质:网络接口在操作系统中的唯一标识符
- 功能:
- 定义实际数据收发的网络接口名称
- 对应
ip link show
命令输出的接口名 - 在
/sys/class/net/
目录中可见
- 特点:
- 必须唯一:系统不能有两个同名接口
- 持久性:重启后名称通常保持不变
- 可自定义:用户可指定有意义的名称
- 使用场景:
# 创建 VLAN 接口并指定名称 sudo nmcli con add type vlan ifname vlan-finance ...# 创建网桥并命名 sudo nmcli con add type bridge ifname br-corporate ...
2. dev
(Parent Device)
- 本质:虚拟接口的底层依赖设备
- 功能:
- 指定虚拟接口构建的基础物理设备
- 定义网络功能的层级关系
- 建立设备间的依赖链
- 特点:
- 层级性:指向已存在的物理或虚拟设备
- 选择性必需:仅虚拟接口需要此参数
- 传递性:可指向其他虚拟设备
- 使用场景:
# 创建基于物理网卡的 VLAN sudo nmcli con add type vlan dev enp5s0 id 30 ...# 创建基于绑定接口的网桥从设备 sudo nmcli con add type bridge-slave dev bond0 ...
实际配置示例分析
示例 1:VLAN 配置
sudo nmcli con add type vlan \con-name vlan-hr \ # 连接配置名称ifname vlan20 \ # VLAN 接口名称dev enp3s0 \ # 基于物理网卡 enp3s0id 20 # VLAN ID
ifname
:vlan20
(操作系统看到的接口名)dev
:enp3s0
(VLAN 的物理基础)
示例 2:网桥从设备配置
sudo nmcli con add type bridge-slave \con-name br-slave-eth1 \ # 连接配置名ifname eth1 \ # 接口名称dev eth1 \ # 基于物理设备 eth1master br-office # 所属网桥
ifname
:eth1
(实际接口名)dev
:eth1
(物理设备自身作为父级)
示例 3:多层虚拟化
# 创建绑定接口
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
依赖链:
物理网卡 → bond0 (ifname) → vlan-bond (dev=bond0) → br-vlan40 (dev=vlan-bond)
特殊场景处理
1. 当 ifname
和 dev
相同
常见于物理设备直接配置:
# 物理网卡直接配置 IP
sudo nmcli con add type ethernet \ifname enp4s0 \ # 接口名dev enp4s0 # 基于自身
2. 省略 dev
的情况
对于独立接口(非虚拟)可省略:
# 物理网卡配置(有效)
sudo nmcli con add type ethernet ifname enp5s0# 网桥配置(有效)
sudo nmcli con add type bridge ifname br-isolated
3. 必须使用 dev
的场景
所有依赖其他设备的虚拟接口:
# VLAN 必须指定 dev
sudo nmcli con add type vlan ifname vlan30 # 错误!缺少 dev# 正确方式
sudo nmcli con add type vlan ifname vlan30 dev enp6s0
配置查看与验证
1. 查看连接配置
nmcli con show "vlan-hr" | grep -E "connection.interface|device"
# 输出:
# connection.interface: vlan20 (ifname)
# device: vlan20 (实际接口)
2. 查看设备关系
nmcli dev show vlan20 | grep -i parent
# 输出:
# VLAN.PARENT: enp3s0 (dev 指定的父设备)
3. 查看物理层级
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
# 原因:dev 指定的设备不存在
sudo nmcli con add type vlan ifname vlan50 dev non_existent_eth# 解决:确认设备存在
ip link show
错误 2:Error: Master connection not found
# 原因: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
# 原因:ifname 冲突
sudo nmcli con add type vlan ifname eth1 dev enp7s0# 解决:使用唯一的 ifname
sudo nmcli con add type vlan ifname vlan60 dev enp7s0
最佳实践指南
-
命名一致性原则
# 连接名:描述性 (con-name) # ifname:技术标识 (vlanX, brX) sudo nmcli con add con-name "HR-VLAN" type vlan ifname vlan20 dev enp3s0
-
层级配置顺序
# 1. 先创建底层设备 sudo nmcli con add type bond ifname bond0# 2. 再创建基于底层的虚拟设备 sudo nmcli con add type vlan ifname vlan-bond dev bond0
-
参数规范表
接口类型 ifname
规范dev
规范物理以太网 系统检测名 (ethX) 可省略或同 ifname VLAN 接口 vlanX 或自定义 必需,指定父设备 网桥 brX 或自定义 可省略 网桥从设备 物理接口名 必需,同 ifname 绑定接口 bondX 或自定义 可省略 -
配置备份与恢复
# 导出配置 nmcli con export > nm_backup.txt# 恢复配置 while read -r line; do nmcli con import <<< "$line"; done < nm_backup.txt
掌握 ifname
和 dev
的区别与配合,能够帮助您构建从简单到复杂的各种网络拓扑结构,实现灵活可靠的网络配置。
NetworkManager 的 nmcli
中 ifname
和 dev
详解
在 NetworkManager 的 nmcli
命令中,ifname
和 dev
是两个核心参数,它们在配置网络连接时扮演着不同但互补的角色。理解它们的区别对于正确配置复杂网络至关重要。
一、核心概念对比
特性 | ifname | dev |
---|---|---|
含义 | 网络接口名称 | 父设备名称 |
作用 | 指定要操作的物理/虚拟接口 | 指定虚拟接口的底层物理设备 |
必需性 | 大多数命令必需 | 仅用于 VLAN、绑定等特殊连接 |
持久性 | 保存在连接配置中 | 保存在连接配置中 |
可见性 | 系统可见的网络接口 | 配置中的逻辑引用 |
示例值 | br0 , vlan10 , eth0 | enp3s0 , bond0 |
二、ifname
详解
1. 定义与作用
- 接口标识符:系统中实际存在的网络设备名称
- 数据平面:实际进行网络数据收发的实体
- 系统可见:通过
ip link show
或nmcli dev status
可查看
2. 使用场景
# 创建网桥
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. 使用场景
# 创建基于物理接口的 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
标识的设备
四、ifname
和 dev
的关系图解
- 物理接口:
ifname=enp3s0
(无dev
) - VLAN接口:
ifname=vlan10
+dev=enp3s0
五、典型配置示例
1. 物理接口配置
# 只需 ifname
sudo nmcli con add type ethernet con-name eth0 ifname enp3s0
2. VLAN 配置
# 需要 ifname 和 dev
sudo nmcli con add type vlan \con-name office-vlan \ifname vlan10 \ # 新接口名称dev enp3s0 \ # 父设备id 10 # VLAN ID
3. 绑定接口配置
# 绑定接口本身
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. 网桥配置
# 网桥本身
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 \ # 同 ifnamemaster br0 # 所属网桥
六、常见错误及解决方案
错误 1: 缺少 ifname
Error: Failed to add new connection: ifname is required
解决:添加 ifname
参数指定接口名称
错误 2: dev
指定错误
Error: invalid device 'wrong-dev' specified
解决:
# 查看可用设备
nmcli dev status# 使用正确的设备名
sudo nmcli ... dev enp3s0
错误 3: ifname
冲突
Error: Device 'br0' not available
解决:
# 释放接口
sudo nmcli dev disconnect br0# 或使用不同名称
sudo nmcli ... ifname br-new
错误 4: 依赖关系错误
Error: Master connection not found
解决:
# 先创建父连接
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. 动态引用
# 使用现有连接作为 dev
sudo nmcli con add type vlan \con-name dynamic-vlan \ifname vlan20 \dev $(nmcli -g GENERAL.CONNECTION dev show enp3s0) \id 20
2. 多级依赖
# 物理 → 绑定 → 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. 临时覆盖
# 临时更改 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. 批量操作
# 为多个接口创建 VLAN
for i in {10..20}; dosudo nmcli con add type vlan \con-name vlan$i \ifname vlan$i \dev enp3s0 \id $i
done
八、查看与验证
1. 查看连接配置
nmcli con show "office-vlan" | grep -E "ifname|dev"
# 输出示例:
connection.interface-name: vlan10
vlan.parent: enp3s0 # dev 的存储位置
2. 查看设备关联
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. 验证依赖关系
# 查看 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:ffparent enp3s0 # 实际依赖的父设备
九、最佳实践
-
命名一致性:
# ifname 和 con-name 保持关联 con-name: server-bridge ifname: br-servercon-name: office-vlan10 ifname: vlan10-office
-
显式依赖:
# 创建 VLAN 时总是显式指定 dev sudo nmcli ... dev enp3s0
-
层级管理:
# 先创建父设备连接 nmcli con add type bond ... ifname bond0 # 再创建子设备 nmcli con add type vlan ... dev bond0
-
文档化配置:
# 添加注释说明 sudo nmcli con mod "office-vlan" \connection.autoconnect yes \connection.zone "office" \+connection.interface-name "VLAN for office network"
-
配置备份:
# 备份所有连接 nmcli con show > nmcli_backup.txt# 备份特定连接 nmcli con show "office-vlan" > office-vlan.conf
十、总结
ifname
:定义实际网络接口的名称(系统可见)dev
:定义虚拟接口的物理基础(配置依赖)
黄金法则:
- 所有连接都需要
ifname
- 只有依赖物理设备的连接需要
dev
(VLAN、绑定从属等) dev
值必须指向有效的现有接口ifname
- 物理接口配置只需
ifname
,无需dev
通过正确使用这两个参数,您可以精确控制网络拓扑中的依赖关系,构建从简单到复杂的各种网络架构。