Linux的NetworkManager的nmcli con add type vlan
中, iframe
和 dev
的区别 笔记250712
nmcli con add type vlan
中 ifname
和 dev
的区别详解
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但功能完全不同的参数,它们共同定义了 VLAN 接口的创建和连接方式。以下是它们的核心区别:
一、本质区别对比表
特性 | ifname |
dev |
---|---|---|
定义对象 | 新创建的 VLAN 接口 | 底层父设备 |
作用 | 指定 VLAN 接口的名称 | 指定 VLAN 依赖的物理设备 |
可见性 | 系统级网络接口 (通过 ip link 可见) |
配置级依赖关系 |
必需性 | 必需 | 必需 |
示例值 | vlan10 , office-vlan |
eth0 , bond0 |
实际位置 | 在 /sys/class/net/ 中创建 |
在配置文件 vlan-id 字段中 |
二、技术深度解析
1. ifname
(接口名称)
-
功能 :定义新创建的 VLAN 虚拟接口的系统名称
-
特点 :
- 必须是系统中不存在的唯一名称
- 命名规范:建议使用
vlan<ID>
格式 (如vlan10
) - 对应实际网络设备,可通过
ip -d link show vlan10
查看
-
系统影响 :
bash# 创建后会在系统中生成新接口 $ ip link show vlan10 10: vlan10@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
2. dev
(父设备)
-
功能 :指定 VLAN 接口依赖的底层物理或逻辑设备
-
特点 :
- 必须是已存在的设备 (如物理网卡、绑定接口等)
- 支持的类型:
ethernet
,bond
,team
,bridge
- 在配置文件中存储为
vlan.parent
属性
-
实际作用 :
bash# 查看配置文件 $ cat /etc/NetworkManager/system-connections/vlan10.nmconnection [vlan] parent=eth0 # dev 参数的值 id=10
三、命令结构图解
完整命令示例:
bash
nmcli con add type vlan \
con-name "office-vlan" \ # 连接名称
ifname vlan10 \ # 新接口名称
dev eth0 \ # 父设备
id 10 # VLAN ID
四、实际配置示例对比
1. 正确配置
bash
# 基于 eth0 创建 VLAN10
sudo nmcli con add type vlan \
con-name "vlan10-office" \
ifname vlan10 \ # 新接口名
dev eth0 \ # 父设备
id 10
结果:
- 新接口:
vlan10
(通过ip link
可见) - 父设备:
eth0
(VLAN 流量实际承载者) - 配置文件:
/etc/NetworkManager/system-connections/vlan10-office.nmconnection
2. 错误配置分析
错误1:混淆 ifname 和 dev
bash
# 错误示例:将父设备误设为新接口名
sudo nmcli con add type vlan \
ifname eth0 \ # 错误!eth0 已存在
dev vlan10 \ # 错误!vlan10 尚未创建
id 10
错误提示 :Error: invalid device 'vlan10' specified
错误2:缺失关键参数
bash
# 缺失 dev 参数
sudo nmcli con add type vlan \
ifname vlan10 \
id 10
错误提示 :Error: vlan properties are missing: 'dev'
五、技术验证命令
1. 验证 ifname 结果
bash
# 查看接口详细信息
ip -d link show vlan10
# 输出片段:
10: vlan10@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
vlan protocol 802.1Q id 10 <REORDER_HDR>
2. 验证 dev 结果
bash
# 查看配置文件
sudo cat /etc/NetworkManager/system-connections/vlan10-office.nmconnection
# 输出片段:
[vlan]
parent=eth0
id=10
# 查看 VLAN 父设备
cat /proc/net/vlan/vlan10 | grep Parent
Parent Device: eth0
六、高级用法场景
1. 基于绑定接口创建 VLAN
bash
# 先创建绑定
sudo nmcli con add type bond con-name bond0 ifname bond0 mode 802.3ad
# 再创建 VLAN
sudo nmcli con add type vlan \
con-name "vlan-bond10" \
ifname vlan10 \
dev bond0 \ # 父设备为绑定接口
id 10
2. 同一父设备多个 VLAN
bash
# VLAN 10
sudo nmcli con add type vlan \
ifname vlan10 \
dev eth0 id 10
# VLAN 20
sudo nmcli con add type vlan \
ifname vlan20 \
dev eth0 id 20 # 相同父设备
3. 自定义接口名
bash
# 使用业务相关接口名
sudo nmcli con add type vlan \
ifname finance-vlan \ # 自定义接口名
dev eth0 \
id 30
七、常见问题解决
问题1:dev
指定的设备不存在
错误 :Error: invalid device 'eth99' specified
解决:
bash
# 查看可用设备
nmcli dev status
# 选择正确设备
sudo nmcli ... dev eth0
问题2:ifname
冲突
错误 :Error: Device 'vlan10' already exists
解决:
bash
# 释放现有接口
sudo nmcli dev disconnect vlan10
# 或使用新名称
sudo nmcli ... ifname vlan-new
问题3:VLAN 流量不通
诊断步骤:
bash
# 1. 检查父设备状态
ethtool eth0 | grep "Link detected"
# 2. 验证交换机配置
# 确保交换机端口配置为 Trunk 模式
# 3. 检查 VLAN 模块
lsmod | grep 8021q
# 4. 手动加载模块
sudo modprobe 8021q
八、核心记忆要点
-
ifname
= 新生儿名字(给新创建的 VLAN 接口命名)
-
dev
= 父母身份证明(指定新接口依赖的父设备)
-
依赖关系:
graph LR A[dev 指定的设备] --> B[创建新接口] B --> C[ifname 命名该接口] -
黄金法则:
ifname
必须是不存在的名称dev
必须是已存在的设备- 两者必须同时指定才能成功创建 VLAN
通过精确区分这两个参数,您可以避免常见的配置错误,并高效创建各种复杂 VLAN 拓扑结构。
Linux的NetworkManager的nmcli connection add
笔记250712
Linux的NetworkManager的nmcli
配置网络网卡(ethernet),网桥(bridge),绑定(bond),虚拟网络(vlan) 笔记250711
NetworkManager配置网桥(bridge)虚拟网络(vlan) 笔记250711
Netplan 中 bridges、bonds、ethernets、vlans 之间的关系 笔记250711
Linux创建网桥Bridge的方法有哪些? 笔记250710
用Netplan配置网桥bridge笔记250711
Netplan 配置网桥(Bridge)的模板笔记250711
nmcli con add type vlan
中 ifname
和 dev
的区别详解
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键参数,它们有着完全不同的作用。理解它们的区别对于正确配置 VLAN 至关重要。
核心区别对比
参数 | 作用对象 | 功能描述 | 是否必需 | 示例值 |
---|---|---|---|---|
ifname | 新创建的VLAN接口 | 指定VLAN虚拟接口的名称 | 可选 | vlan100 , eth0.100 |
dev | 父接口 | 指定VLAN所基于的物理或逻辑父接口 | 必需 | eth0 , bond0 |
详细解析
1. dev
(父接口)
-
本质 :指定 VLAN 标签要附加到的底层物理或逻辑接口
-
特点 :
- 必须存在 的物理接口(如
eth0
)或逻辑接口(如bond0
) - VLAN 流量实际通过的物理通道
- 在交换机配置中需要设置为 trunk 模式
- 必须存在 的物理接口(如
-
作用原理 :
graph LR A[数据包] --> B[dev指定的父接口] B --> C{添加VLAN标签} C --> D[VLAN网络] -
使用注意 :
- 必须是在系统中实际存在的接口(通过
ip link show
可查看) - 父接口本身不能是另一个 VLAN 接口(除非是 QinQ 场景)
- 父接口不需要有 IP 地址配置
- 必须是在系统中实际存在的接口(通过
2. ifname
(VLAN 接口名)
-
本质 :指定新建的 VLAN 虚拟接口的名称
-
特点 :
- 这是新创建的逻辑接口
- 用于承载 VLAN 的 IP 配置
- 名称可以自定义,但通常遵循
<父接口>.<VLAN ID>
的命名约定
-
作用原理 :
graph LR E[物理网络] --> F[dev=eth0] F --> G[VLAN处理] G --> H[ifname=eth0.100] H --> I[操作系统网络栈] -
使用注意 :
- 如果省略,默认生成
<dev>.<vlan.id>
的名称(如eth0.100
) - 名称必须在系统中唯一
- 该接口将出现在
ip link show
的输出中
- 如果省略,默认生成
配置示例对比
示例 1:明确指定 ifname 和 dev
bash
nmcli con add type vlan \
con-name "VLAN100" \
ifname vlan100 \ # 自定义VLAN接口名
dev eth0 \ # 基于物理接口eth0
vlan.id 100
结果:
-
创建名为
vlan100
的虚拟接口 -
该接口基于物理接口
eth0
-
使用
ip link show
可看到:makefile4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... 5: vlan100@eth0: <BROADCAST,MULTICAST> ...
示例 2:仅指定 dev(省略 ifname)
bash
nmcli con add type vlan \
con-name "VLAN100" \
dev eth0 \ # 仅指定父接口
vlan.id 100 # 省略ifname
结果:
-
自动创建名为
eth0.100
的虚拟接口 -
命名规则:
<父接口名>.<VLAN ID>
-
使用
ip link show
可看到:makefile4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... 5: eth0.100@eth0: <BROADCAST,MULTICAST> ...
示例 3:在绑定接口上创建 VLAN
bash
nmcli con add type vlan \
con-name "BondVLAN200" \
ifname bond0_v200 \ # 自定义VLAN接口名
dev bond0 \ # 基于绑定接口
vlan.id 200
结果:
- 在绑定接口
bond0
上创建 VLAN 200 - 自定义 VLAN 接口名为
bond0_v200
- 流量通过绑定接口的成员物理网卡传输
常见错误场景
错误 1:缺失 dev 参数
bash
$ nmcli con add type vlan con-name VLAN100 vlan.id 100
Error: 'dev' argument is required.
原因 :未指定父接口
解决 :必须添加 dev eth0
等父接口指定
错误 2:使用不存在的父接口
bash
$ nmcli con add type vlan con-name VLAN100 dev eth9 vlan.id 100
Error: Device 'eth9' not found.
原因 :dev
指定的接口不存在
解决 :使用 ip link show
确认正确的接口名
错误 3:ifname 冲突
bash
$ nmcli con add type vlan con-name VLAN100 ifname eth0.100 dev eth0 vlan.id 100
Error: Interface name 'eth0.100' already in use.
原因 :ifname
指定的名称已被占用
解决:改用其他名称或删除冲突接口
最佳实践建议
-
命名规范:
bash# 好习惯:清晰表明用途和VLAN ID nmcli con add type vlan \ ifname mgmt_vlan100 \ # 管理VLAN dev eth0 \ vlan.id 100 nmcli con add type vlan \ ifname data_vlan200 \ # 数据VLAN dev eth0 \ vlan.id 200
-
复杂环境推荐:
graph LR A[物理接口] --> B[绑定接口] B --> C[VLAN接口] C --> D[网桥] D --> E[虚拟机/容器] style B fill:#9cf,stroke:#333 style C fill:#f96,stroke:#333 style D fill:#9f9,stroke:#333 -
配置顺序原则:
bash# 1. 先创建底层接口 nmcli con add type ethernet con-name eth0 ifname eth0 ... # 2. 创建绑定(如果需要) nmcli con add type bond con-name bond0 ifname bond0 ... # 3. 创建VLAN接口 nmcli con add type vlan con-name vlan100 dev bond0 vlan.id 100 # 4. 创建网桥(如果需要) nmcli con add type bridge con-name br0 ifname br0 nmcli con add type bridge-slave con-name br-vlan100 ifname vlan100 master br0
技术原理深度解析
VLAN 接口工作流程
内核中的对应关系
在 Linux 内核中:
dev
参数对应real_dev
ifname
参数对应vlan_dev
- VLAN 接口通过
vlan id
与父接口关联
通过 ip -d link show
可查看关联:
bash
$ ip -d link show eth0.100
5: eth0.100@eth0: <BROADCAST,MULTICAST> ...
vlan protocol 802.1Q id 100 <REORDER_HDR>
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
总结
关键区别要点:
特征 | dev |
ifname |
---|---|---|
作用对象 | 已存在的物理/逻辑接口 | 新创建的虚拟接口 |
配置必要性 | 必需 | 可选(自动生成默认名称) |
实际功能 | 指定 VLAN 的物理承载通道 | 指定 VLAN 的逻辑接口名称 |
变更影响 | 影响 VLAN 的物理路径 | 只影响接口显示名称 |
查看方式 | ip link show (物理接口列表) |
ip link show (虚拟接口列表) |
使用黄金法则:
- 始终明确指定
dev
(父接口) - 按需使用
ifname
自定义 VLAN 接口名 - 复杂场景中:
- 使用绑定接口提高可靠性
- 将 VLAN 接口加入网桥提供高级功能
- 遵循 "物理 → 绑定 → VLAN → 网桥" 的创建顺序
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但作用不同的参数,理解它们的区别对正确配置 VLAN 至关重要:
ifname
(接口名称)
-
含义:指定要创建的 VLAN 虚拟接口的名称
-
作用 :
- 定义在操作系统层面显示的虚拟接口名称
- 这个名称会在
ip link show
或ifconfig
等命令中显示
-
示例 :
bashifname vlan10 # 创建名为 vlan10 的接口 ifname eth0.100 # 创建名为 eth0.100 的接口
-
特点 :
- 可选参数 :如果不指定,系统会自动生成名称(格式:
<父接口>.<VLAN ID>
) - 可自定义 :可以自由命名(如
management_vlan
),但需符合 Linux 接口命名规则 - 在系统中唯一:不能与其他接口名称冲突
- 可选参数 :如果不指定,系统会自动生成名称(格式:
dev
(父设备)
-
含义:指定承载 VLAN 的底层物理或逻辑接口
-
作用 :
- 定义 VLAN 标签将被添加到的实际网络设备
- 标识 VLAN 流量将通过哪个物理接口传输
-
示例 :
bashdev eth0 # 在物理网卡 eth0 上创建 VLAN dev bond0 # 在绑定接口 bond0 上创建 VLAN dev br0 # 在网桥接口 br0 上创建 VLAN
-
特点 :
- 必需参数:必须明确指定
- 需真实存在:指定的设备必须是系统中已存在的网络接口
- 决定物理路径:实际数据包将通过这个设备进出
关键区别总结
特性 | ifname |
dev |
---|---|---|
作用 | 定义虚拟接口的显示名称 | 指定承载 VLAN 的物理设备 |
必要性 | 可选 | 必需 |
内容 | 任意有效接口名 | 已存在的物理/逻辑接口名 |
系统可见 | 在 ip link 中作为新接口出现 |
是现有接口 |
示例 | vlan10 , mgmt_network |
eth0 , bond0 , br0 |
实际应用示例
示例 1:基本用法
bash
nmcli con add type vlan \
con-name "vlan10" \
ifname vlan10 \ # 虚拟接口名称
dev eth0 \ # 物理父接口
id 10 # VLAN ID
结果:
- 创建名为
vlan10
的虚拟接口 - 实际流量通过
eth0
传输 - 使用
ip link show
可以看到vlan10@eth0
接口
示例 2:使用自动生成的接口名
bash
nmcli con add type vlan \
con-name "server-vlan" \
dev bond0 \ # 父接口是绑定设备
id 20 # VLAN ID
结果:
- 系统自动创建名为
bond0.20
的接口 - 虚拟接口关联到
bond0
绑定设备
示例 3:自定义命名
bash
nmcli con add type vlan \
con-name "dmz-network" \
ifname dmz \ # 自定义接口名
dev enp3s0 \ # 物理网卡
id 30
结果:
- 创建名为
dmz
的自定义接口 - 实际绑定到
enp3s0
物理网卡 - VLAN 流量标记为 ID 30
常见错误场景
-
缺少
dev
参数:bash# 错误:缺少父设备 nmcli con add type vlan con-name vlan10 ifname vlan10 id 10 # 报错:dev: property is missing
-
dev
指定不存在的接口:bash# 错误:eth99 不存在 nmcli con add type vlan con-name vlan10 dev eth99 id 10 # 报错:无法找到设备 'eth99'
-
ifname
冲突:bash# 错误:vlan10 名称已被使用 nmcli con add type vlan con-name vlan10 ifname vlan10 dev eth0 id 10 # 报错:接口 'vlan10' 已存在
最佳实践
- 明确指定
ifname
:特别是生产环境中,使用有意义的名称(如prod_vlan
)比自动生成的名称更易管理 - 保持一致性 :在复杂网络中使用统一的命名规范(如
<位置>_<功能>_vlan<ID>
) - 验证父接口 :使用
nmcli dev status
确认dev
指定的接口存在且可用 - 级联配置时注意 :当在绑定/网桥上创建 VLAN 时,确保父接口(
dev
)已正确配置并激活
通过正确理解和使用 ifname
和 dev
,您可以精确控制 VLAN 接口的命名和底层物理路径,实现灵活的网络分段配置。
nmcli con add type vlan
中 ifname
和 dev
的区别详解
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但完全不同的参数,它们在 VLAN 配置中扮演着互补但独立的角色:
一、参数对比表
参数 | 作用对象 | 功能 | 是否必需 | 示例 | 实际位置 |
---|---|---|---|---|---|
ifname |
VLAN 接口本身 | 定义操作系统中的 VLAN 接口名称 | 必需 | ifname vlan10 |
/sys/class/net/vlan10 |
dev |
父级物理设备 | 指定 VLAN 所基于的底层物理设备 | 必需 | dev eth0 |
配置文件中的依赖关系 |
二、详细解析
1. ifname
- VLAN 接口名称
-
本质:VLAN 虚拟接口在操作系统中的唯一标识符
-
功能 :
- 定义系统看到的 VLAN 接口名称
- 用于所有网络操作命令(
ip addr
,ping
等) - 在
/sys/class/net/
中创建对应的设备节点
-
特点 :
- 必须唯一:不能与现有接口重名
- 可自定义 :支持任意有效名称(如
vlan10
,finance-net
) - 持久性:重启后保持不变
-
使用场景 :
bash# 创建名为 "vlan-office" 的 VLAN 接口 sudo nmcli con add type vlan ifname vlan-office ... # 在命令中使用该接口 ip addr show vlan-office
2. dev
- 父设备指定
-
本质:VLAN 依赖的底层物理设备
-
功能 :
- 指定 VLAN 流量承载的实际硬件
- 建立 VLAN 与物理设备的绑定关系
- 确定数据包的物理出口
-
特点 :
- 必须存在:设备必须预先可用
- 物理或虚拟:可以是物理网卡或绑定接口
- 不可省略:没有父设备就无法创建 VLAN
-
使用场景 :
bash# 在 eth0 上创建 VLAN sudo nmcli con add type vlan dev eth0 ... # 在绑定接口 bond0 上创建 VLAN sudo nmcli con add type vlan dev bond0 ...
三、配置示例分析
正确配置示例
bash
sudo nmcli con add type vlan \
con-name "vlan-finance" \ # 连接名称(逻辑标识)
ifname vlan10 \ # VLAN 接口名称(系统可见)
dev eth0 \ # 基于物理网卡 eth0
id 10 # VLAN ID
ifname
:vlan10
(操作系统中的接口名)dev
:eth0
(VLAN 的物理基础)
验证配置关系
bash
# 查看 VLAN 接口详情
ip -d link show vlan10
# 输出将显示:
# 10: vlan10@eth0: <BROADCAST,MULTICAST> ...
# vlan protocol 802.1Q id 10 <REORDER_HDR>
# link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
四、常见错误场景
错误 1:ifname
冲突
bash
sudo nmcli con add type vlan ifname eth0 dev eth1 id 20
# Error: interface name 'eth0' already in use
原因 :ifname
指定的名称已被其他接口使用
错误 2:dev
设备不存在
bash
sudo nmcli con add type vlan ifname vlan20 dev non_existent_eth id 30
# Error: Device 'non_existent_eth' not found
原因 :dev
指定的父设备不存在
错误 3:缺少必要参数
bash
sudo nmcli con add type vlan ifname vlan30
# Error: VLAN connection needs 'dev' and 'id' properties
原因 :未指定 dev
和 id
五、高级应用场景
1. 多层虚拟化
bash
# 在绑定接口上创建 VLAN
sudo nmcli con add type bond ifname bond0 ...
# 在 bond0 上创建 VLAN
sudo nmcli con add type vlan \
ifname vlan-bond \ # VLAN 接口名
dev bond0 \ # 父设备是绑定接口
id 40
2. 自定义命名方案
bash
# 按部门命名 VLAN 接口
sudo nmcli con add type vlan \
ifname net-finance \ # 自定义接口名
dev eth0 \
id 50
六、实际配置中的区别演示
配置前状态
bash
$ ip link show
1: eth0: <BROADCAST,MULTICAST> ...
2: eth1: <BROADCAST,MULTICAST> ...
执行 VLAN 创建
bash
sudo nmcli con add type vlan \
con-name "vlan-engineering" \
ifname eng-vlan \ # 自定义接口名
dev eth0 \ # 基于 eth0
id 100
配置后状态
bash
$ ip link show
1: eth0: <BROADCAST,MULTICAST> ...
2: eth1: <BROADCAST,MULTICAST> ...
3: eng-vlan@eth0: <BROADCAST,MULTICAST> ... # ifname 创建的新接口
七、管理命令参考
查看 ifname
和 dev
关系
bash
nmcli -p -f general,device,vlan dev show eng-vlan
# 输出:
# ========================================
# Device details (eng-vlan)
# ========================================
# GENERAL.DEVICE: eng-vlan
# GENERAL.TYPE: vlan
# VLAN.PARENT: eth0 <--- dev 指定的父设备
修改配置
bash
# 修改 ifname (需先停用连接)
sudo nmcli con mod "vlan-engineering" ifname eng-vlan-prod
# 修改 dev (需要删除重建)
sudo nmcli con delete "vlan-engineering"
sudo nmcli con add ... dev eth1 # 使用新父设备
八、最佳实践
-
命名规范:
bash# 统一命名方案 ifname vlan<ID>-<用途> # 如 vlan100-engineering
-
参数顺序:
bash# 先指定 dev,再定义 ifname nmcli con add type vlan dev eth0 ifname ...
-
依赖管理:
bash# 确保父设备已激活 nmcli con up eth0 # 在创建 VLAN 前激活父设备
-
配置备份:
bash# 导出 VLAN 配置 nmcli con export "vlan-engineering" > vlan-eng.nmconnection
通过理解 ifname
和 dev
的区别:
ifname
定义了 "我是谁"(VLAN 接口在系统中的身份)dev
定义了 "我从哪里来"(VLAN 的物理基础)
这种区分使您能够精确控制 VLAN 接口的创建和管理,确保网络配置的准确性和可维护性。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但完全不同的参数,它们分别控制 VLAN 配置的不同方面:
核心区别总结
参数 | 作用对象 | 功能描述 | 是否必需 | 持久性 |
---|---|---|---|---|
ifname |
新创建的 VLAN 接口 | 指定 VLAN 虚拟接口的名称 | 可选 | 持久存储 |
dev |
物理/父接口 | 指定 VLAN 依附的底层物理设备 | 必需 | 持久存储 |
详细解析
1. dev
(父设备)
-
功能 :指定 VLAN 标签应该附加到哪个物理或逻辑接口上
-
特点 :
- 必需参数:必须明确指定父设备
- 物理基础 :指向实际存在的网络接口(如
eth0
,bond0
,enp3s0
) - 数据路径:定义 VLAN 流量的物理出口
- 命名规范:使用系统识别的接口名
-
示例 :
bashdev eth0 # 在物理网卡 eth0 上创建 VLAN dev bond0 # 在绑定接口 bond0 上创建 VLAN
2. ifname
(VLAN 接口名)
-
功能 :指定新创建的 VLAN 虚拟接口的名称
-
特点 :
- 可选参数 :不指定时自动生成名称(格式:
<父设备>.<VLAN ID>
) - 虚拟接口:定义在系统中显示的 VLAN 接口名称
- 用户友好 :可自定义易记名称(如
office-vlan
,dmz-net
) - 命名规则:必须符合 Linux 接口命名规范
- 可选参数 :不指定时自动生成名称(格式:
-
示例 :
bashifname vlan100 # 创建名为 vlan100 的接口 ifname corp-network # 创建名为 corp-network 的接口
实际使用对比
场景 1:在 eth0 上创建 VLAN 100
bash
# 显式指定 ifname 和 dev
sudo nmcli con add type vlan \
con-name vlan100 \
ifname vlan100 \
dev eth0 \
id 100
# 结果:
# - 父设备:eth0
# - VLAN接口:vlan100 (自定义名称)
# - 系统显示:vlan100@eth0
场景 2:在 bond0 上创建 VLAN 200(使用默认名称)
bash
# 省略 ifname
sudo nmcli con add type vlan \
con-name prod-vlan \
dev bond0 \
id 200
# 结果:
# - 父设备:bond0
# - VLAN接口:bond0.200 (自动生成)
# - 系统显示:bond0.200@bond0
关键注意事项
-
依赖关系:
dev
指定的接口必须已存在且激活- VLAN 接口 (
ifname
) 在命令执行后才会被创建
-
命名冲突:
bash# 错误:ifname 与现有接口冲突 sudo nmcli con add type vlan ifname eth0 dev eth1 id 100 # (eth0 已存在) # 正确:使用新名称 sudo nmcli con add type vlan ifname vlan100 dev eth1 id 100
-
配置持久化:
- 两者都会保存在连接配置中
- 文件位置:
/etc/NetworkManager/system-connections/<con-name>.nmconnection
ini[connection] id=vlan100 type=vlan interface-name=vlan100 # ifname 的值 [vlan] id=100 parent=eth0 # dev 的值
-
查看系统接口:
bash# 显示 VLAN 接口关系 ip -d link show vlan100 # 输出关键信息: # vlan100@eth0: <BROADCAST,MULTICAST> # ... vlan protocol 802.1Q id 100 <REORDER_HDR> # ... link/ether 52:54:00:xx:xx:xx
最佳实践建议
-
明确指定
ifname
:bash# 推荐:自定义有意义的名称 nmcli ... ifname servers-vlan dev bond0 id 100 # 避免:依赖自动生成的 bond0.100
-
跨环境一致性:
- 在服务器集群中使用相同的
ifname
(如mgmt-vlan
,storage-vlan
)
- 在服务器集群中使用相同的
-
组合配置时:
bash# VLAN + 网桥的清晰命名 nmcli con add type vlan \ ifname trunk-vlan300 \ dev team0 \ id 300 nmcli con add type bridge \ ifname br-mgmt \ master br-mgmt
-
故障排查:
- 检查
dev
接口状态:ip link show dev eth0
- 确认 VLAN 接口:
ip -d link show vlan100
- 检查
常见错误处理
错误 1 :Error: 'dev' not specified
bash
# 原因:缺少必需的 dev 参数
# 修复:
sudo nmcli con add type vlan dev eth0 id 100 ...
错误 2 :Error: interface name 'eth0' already in use
bash
# 原因:ifname 与物理接口冲突
# 修复:
sudo nmcli con add type vlan ifname vlan100 dev eth0 id 100
错误 3 :Error: Parent device not found
bash
# 原因:dev 指定的接口不存在或未激活
# 修复:
sudo nmcli con up eth0 # 先激活父接口
通过正确区分和使用 ifname
和 dev
,您可以精确控制 VLAN 配置的物理绑定和虚拟接口表示,构建清晰易维护的网络架构。
nmcli con add type vlan
中 ifname
与 dev
的深度解析
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但容易混淆的参数,它们有完全不同的作用和意义:
核心区别对比
参数 | 作用对象 | 是否必需 | 示例值 | 本质区别 |
---|---|---|---|---|
ifname |
新创建的 VLAN 接口 | 是 | eth0.10 |
定义 VLAN 接口在系统中的名称 |
dev |
底层物理/逻辑接口 | 是 | eth0 |
指定 VLAN 基于哪个接口创建 |
详细解析
1. ifname
(接口名称)
-
作用 :指定要创建的 VLAN 接口的系统设备名称
-
特点 :
- 命名有特定格式要求(推荐:父接口名 + "." + VLAN ID)
- 必须是系统中唯一的接口名称
- 实际创建的网络接口将使用此名称
-
示例 :
bashifname enp3s0.10 # 创建名为 enp3s0.10 的 VLAN 接口
-
查看效果 :
baship link show enp3s0.10
2. dev
(父设备)
-
作用 :指定 VLAN 将基于哪个现有接口创建
-
特点 :
- 必须是已存在的物理接口或逻辑接口
- 可以是:以太网卡、绑定接口、网桥等
- 决定 VLAN 流量的物理承载
-
示例 :
bashdev enp3s0 # VLAN 基于物理网卡 enp3s0 创建 dev bond0 # VLAN 基于绑定接口 bond0 创建 dev br0 # VLAN 基于网桥 br0 创建
正确使用示例
基本用法
bash
nmcli con add type vlan \
con-name "VLAN10" \ # 连接名称(自定义)
ifname enp3s0.10 \ # 创建的 VLAN 接口名称
dev enp3s0 \ # 基于物理接口 enp3s0
id 10 \ # VLAN ID
ipv4.method manual \
ipv4.addresses 192.168.10.2/24
在绑定接口上创建 VLAN
bash
nmcli con add type vlan \
con-name "Bond-VLAN20" \
ifname bond0.20 \ # VLAN 接口名称
dev bond0 \ # 基于绑定接口
id 20
在网桥上创建 VLAN
bash
nmcli con add type vlan \
con-name "Bridge-VLAN30" \
ifname br0.30 \ # VLAN 接口名称
dev br0 \ # 基于网桥接口
id 30
常见错误及解决方案
错误 1:混淆参数位置
bash
# 错误:将父接口放在 ifname
nmcli con add type vlan ifname enp3s0 dev enp3s0.10 id 10
# 结果:创建名为 enp3s0 的接口,但尝试基于不存在的 enp3s0.10
解决方案 :严格遵循 ifname
= 新接口名,dev
= 现有接口名
错误 2:名称冲突
bash
# 错误:使用已存在的接口名
nmcli con add type vlan ifname enp3s0 dev enp4s0 id 10
# 结果:失败,因 enp3s0 已存在
解决方案 :使用唯一名称,推荐格式:<父接口>.<vlan_id>
错误 3:无效父接口
bash
# 错误:指定不存在的父接口
nmcli con add type vlan ifname vlan10 dev non_existent id 10
# 结果:失败,找不到父接口
解决方案 :先用 ip link
或 nmcli dev
验证父接口存在
高级用法技巧
1. 自定义命名规则
bash
# 使用描述性名称(非标准格式)
nmcli con add type vlan \
ifname mgmt_vlan \ # 自定义接口名
dev enp3s0 \
id 100
2. 多级 VLAN 嵌套
bash
# 在VLAN接口上再创建VLAN
nmcli con add type vlan \
ifname enp3s0.10.100 \ # 二级VLAN接口
dev enp3s0.10 \ # 基于一级VLAN接口
id 100
3. 临时 VLAN 接口
bash
# 创建不保存的临时VLAN
nmcli con add type vlan \
ifname temp_vlan \
dev enp3s0 \
id 50 \
save no # 重启后消失
技术原理图解
- 红色 :
dev
指向的物理接口 - 绿色 :
dev
指向的逻辑接口(绑定) - 蓝色 :
dev
指向的逻辑接口(网桥) - 所有输出 :
ifname
定义的系统接口
验证命令
bash
# 查看VLAN接口详细信息
ip -d link show enp3s0.10
# 输出关键信息:
# ... vlan protocol 802.1Q id 10 <REORDER_HDR> ...
# link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
# 查看父接口关联
nmcli -g general.device,connection.interface-name con show "VLAN10"
总结:
ifname
= 创建什么(新接口的名称)dev
= 基于什么 (已存在的承载接口)
两者共同定义了 VLAN 的标识和物理基础,缺一不可且不可互换。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键参数,它们有本质区别:
核心区别
参数 | 作用对象 | 功能描述 | 必要性 |
---|---|---|---|
dev |
父接口(物理设备) | 指定承载 VLAN 的底层物理接口(如 eth0 ) |
必填参数 |
ifname |
VLAN 虚拟接口 | 指定新建的 VLAN 虚拟接口名称(如 vlan10 ),若不指定则自动生成(如 eth0.10 ) |
可选参数 |
详细解释
1. dev
(父接口)
-
作用 :指定 VLAN 所依赖的物理网络设备(或底层接口)
-
必须显式声明:没有底层物理接口就无法创建 VLAN
-
示例 :
bashnmcli con add type vlan con-name vlan10 dev eth0 id 10
→ 表示在物理网卡
eth0
上创建 VLAN
2. ifname
(虚拟接口名)
-
作用 :为新建的 VLAN 虚拟接口指定名称
-
默认行为 :若省略,系统自动生成名称(格式:
<父接口>.<VLAN ID>
) -
示例 :
bashnmcli con add type vlan con-name vlan10 ifname myvlan dev eth0 id 10
→ 显式将 VLAN 虚拟接口命名为
myvlan
(而非默认的eth0.10
)
实际效果对比
情况1:不指定 ifname
(使用默认名称)
bash
nmcli con add type vlan con-name vlan10 dev eth0 id 10
-
生成的接口名 :
eth0.10
-
查看接口 :
bash$ ip link show 3: eth0.10@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
情况2:显式指定 ifname
bash
nmcli con add type vlan con-name vlan10 ifname office-vlan dev eth0 id 10
-
生成的接口名 :
office-vlan
-
查看接口 :
bash$ ip link show 3: office-vlan@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
关键注意事项
-
dev
必须存在 :指定的物理接口(如
eth0
)必须存在于系统中(可通过ip link
验证)。 -
ifname
命名限制:- 名称不能与现有接口冲突
- 建议使用描述性名称(如
vlan-finance
)
-
操作优先级:
graph LR A[创建VLAN连接] --> B{dev 参数} B -->|指定物理接口| C[创建虚拟接口] C --> D{ifname 参数} D -->|存在| E[使用自定义名称] D -->|不存在| F[生成 ethX.Y 名称] -
查看配置 :
创建后可通过以下命令验证:
bashnmcli con show vlan10 | grep -E 'dev|ifname' # 输出示例: connection.interface-name: office-vlan # ifname 值 vlan.parent: eth0 # dev 值
典型应用场景
- 默认命名 :快速创建临时 VLAN 时省略
ifname
- 自定义命名 :
- 在脚本中固定接口名(避免动态名称导致问题)
- 多 VLAN 环境提高可读性(如
vlan10-admin
,vlan20-guest
) - 兼容某些依赖固定接口名的应用程序
💡 经验提示 :生产环境中建议始终指定
ifname
,避免因父接口名变化(如 eth0→enp0s3)导致的名称不一致问题。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但作用完全不同的参数,它们在 VLAN 配置中扮演着不同的角色:
核心区别
参数 | 全称 | 作用 | 是否必需 | 配置位置 |
---|---|---|---|---|
ifname |
Interface Name | 指定新创建的 VLAN 接口名称 | 可选 | 新 VLAN 接口 |
dev |
Device | 指定 VLAN 的父设备(物理接口) | 必需 | 已存在的物理/逻辑接口 |
详细解释
1. dev
(父设备)
-
作用 :指定 VLAN 所基于的底层物理或逻辑接口
-
必需性 :必须提供,否则 VLAN 无法创建
-
特点 :
- 指向一个已存在的接口(物理网卡、bond、bridge 等)
- 决定了 VLAN 流量实际通过的物理通道
- 在配置文件中的位置:
[vlan]
部分的parent=
-
示例 :
bash# 在物理网卡上创建 VLAN nmcli con add type vlan dev enp3s0 id 100 # 在绑定接口上创建 VLAN nmcli con add type vlan dev bond0 id 200 # 在网桥上创建 VLAN nmcli con add type vlan dev br0 id 300
2. ifname
(接口名称)
-
作用 :自定义新创建的 VLAN 接口名称
-
必需性:可选(不指定时自动生成名称)
-
特点 :
- 定义操作系统中显示的虚拟接口名称
- 不影响实际网络功能,只影响管理识别
- 在配置文件中的位置:
[connection]
部分的interface-name=
-
示例 :
bash# 自定义 VLAN 接口名 nmcli con add type vlan ifname mgmt-vlan dev enp3s0 id 100 # 自动生成名称(默认格式 vlan<ID>) nmcli con add type vlan dev enp3s0 id 100 # 自动创建 vlan100
配置对比示例
命令对比
bash
# 使用 dev 指定父接口(必需)
# 使用 ifname 自定义接口名(可选)
sudo nmcli con add type vlan \
con-name vlan100 \
ifname mgmt-vlan \ # ← 自定义接口名
dev enp3s0 \ # ← 指定物理父接口
id 100
生成的配置文件
/etc/NetworkManager/system-connections/vlan100.nmconnection
ini
[connection]
id=vlan100
type=vlan
interface-name=mgmt-vlan # ← ifname 的值
[vlan]
id=100
parent=enp3s0 # ← dev 的值
...其他配置...
实际效果演示
1. 只使用 dev
(必需)
bash
sudo nmcli con add type vlan con-name prod-vlan dev enp3s0 id 200
- 结果 :
- 创建 VLAN 接口:
vlan200
(自动命名) - 父接口:
enp3s0
- 查看接口:
ip link show vlan200
- 创建 VLAN 接口:
2. 同时使用 dev
和 ifname
bash
sudo nmcli con add type vlan \
con-name dev-vlan \
ifname vlan-dev \ # 自定义名称
dev enp4s0 \ # 父接口
id 300
- 结果 :
- 创建 VLAN 接口:
vlan-dev
(自定义名) - 父接口:
enp4s0
- 查看接口:
ip link show vlan-dev
- 创建 VLAN 接口:
3. 错误示例(缺少 dev
)
bash
sudo nmcli con add type vlan ifname vlan-error id 400
-
错误 :
vbnetError: vlan.parent: property is missing
使用场景建议
场景 | 推荐用法 | 说明 |
---|---|---|
简单配置 | 只指定 dev |
使用自动命名(vlan) |
多 VLAN 环境 | 同时指定 ifname |
自定义有意义的名称(如 vlan-mgmt ) |
脚本自动化 | 指定 ifname |
确保接口名可预测 |
临时测试 | 只指定 dev |
快速创建,无需自定义 |
重要注意事项
-
dev
必须指向有效接口:bash# 错误:dev 指向不存在的接口 sudo nmcli con add type vlan dev non-existent-interface id 100 # 正确:先确认可用接口 nmcli device status
-
接口名称冲突:
bash# 错误:ifname 使用已存在的接口名 sudo nmcli con add type vlan ifname enp3s0 dev enp4s0 id 100 # 解决方案:选择唯一名称 sudo nmcli con add type vlan ifname vlan-backup dev enp4s0 id 100
-
VLAN ID 范围:
- 有效范围:1-4094
- 避免使用保留 ID(如 0, 4095)
-
持久性:
dev
的配置是持久的,即使父接口重命名- 实际绑定基于接口 MAC 地址而非名称
关系图解
- 物理接口 (
dev
指定):真实网络设备 - VLAN 配置:连接定义
- 虚拟接口 (
ifname
指定):操作系统可见的逻辑设备
管理命令示例
bash
# 查看 VLAN 连接详情
nmcli -p con show vlan100
# 输出重点:
connection.interface-name: mgmt-vlan [ifname 的值]
vlan.parent: enp3s0 [dev 的值]
vlan.id: 100
# 修改 ifname
sudo nmcli con modify vlan100 connection.interface-name vlan-new-name
# 修改 dev(父接口)
sudo nmcli con modify vlan100 vlan.parent enp5s0
理解 ifname
和 dev
的区别对于正确配置 VLAN 至关重要:
dev
回答:"VLAN 流量从哪里来?"(物理通道)ifname
回答:"VLAN 接口叫什么名字?"(标识符)
实际配置中,dev
是功能性必需参数,而 ifname
是管理性可选参数,用于提高可读性和可管理性。
在 nmcli connection add type vlan
命令中,ifname
和 dev
是两个关键参数,它们有明确的区别和用途:
核心区别
参数 | 作用 | 必要性 | 示例值 |
---|---|---|---|
dev |
指定父接口(承载 VLAN 的物理/逻辑设备) | 必需 | dev=eth0 |
ifname |
指定 VLAN 接口名称(新建的虚拟接口) | 可选 | ifname=vlan10 |
详细说明
1. dev
(父设备)
- 作用 :指定 VLAN 标签附加的底层物理设备或逻辑设备
(如物理网卡eth0
、绑定接口bond0
、网桥br0
等) - 必要性 :必须提供,否则 VLAN 无法创建
- 特点 :
- 必须是系统中已存在的接口
- 实际承载 VLAN 流量
- 示例 :
dev=eth0
表示在物理网卡 eth0 上创建 VLAN
2. ifname
(VLAN 接口名)
- 作用 :指定新建的 VLAN 虚拟接口的名称
- 必要性 :可选(不指定时自动生成名称)
- 特点 :
- 名称格式通常为
<父接口>.<VLAN ID>
(如eth0.100
) - 可自定义名称(如
vlan100
) - 名称必须在系统中唯一
- 名称格式通常为
- 示例 :
ifname=mgmt_vlan
会创建名为mgmt_vlan
的 VLAN 接口
完整命令示例
bash
# 在 eth0 上创建 ID=100 的 VLAN,自定义接口名
nmcli connection add type vlan \
con-name "VLAN100" \
ifname mgmt_vlan \ # 自定义 VLAN 接口名
dev eth0 \ # 父接口(必需)
vlan.id 100 # VLAN ID(必需)
# 不指定 ifname(自动生成 eth0.100 接口)
nmcli connection add type vlan \
con-name "VLAN200" \
dev eth0 \ # 父接口
vlan.id 200 # VLAN ID
验证创建结果
bash
# 查看新建的 VLAN 接口
ip link show | grep vlan
# 输出示例:
# 5: mgmt_vlan@eth0: <BROADCAST,MULTICAST> ...
# 6: eth0.200@eth0: <BROADCAST,MULTICAST> ...
# 查看连接配置
nmcli connection show VLAN100
关键注意事项
-
dev
必须真实存在若指定不存在的父设备(如
dev=abc
),命令会失败 -
ifname
命名冲突自定义名称不能与现有接口重名(如不能与已有
eth0
同名) -
自动命名规则
当省略
ifname
时,生成的接口名 =<父接口>.<VLAN ID>
(如
dev=eth0
+vlan.id=100
→ 接口eth0.100
) -
VLAN 流量标签
实际 VLAN 标签由
vlan.id
参数决定,与ifname
无关
总结
场景 | 使用参数 |
---|---|
指定承载 VLAN 的物理网卡 | dev (必需) |
自定义 VLAN 虚拟接口的名称 | ifname (可选) |
定义 VLAN ID(802.1Q 标签) | vlan.id (必需) |
正确理解这两个参数可避免配置错误,特别是在复杂网络拓扑(如 VLAN over Bond/Bridge)中至关重要。
在 nmcli con add type vlan
命令中,id
(而非 iframe
)和 dev
是两个关键参数,它们的区别如下:
1. id
参数
- 作用 :指定 VLAN 的标识号(VLAN ID),范围通常是
1-4094
。 - 示例 :
id 100
表示创建一个 VLAN ID 为 100 的虚拟接口。 - 必要性:必须显式指定,否则命令会失败。
- 底层逻辑:VLAN ID 用于在二层网络中区分不同广播域,需与交换机配置的 VLAN 一致。
2. dev
参数
- 作用 :指定 VLAN 的父接口(物理接口或另一个虚拟接口)。
- 示例 :
dev eth0
表示 VLAN 基于物理网卡eth0
创建。 - 必要性:必须显式指定,否则无法绑定底层设备。
- 底层逻辑:VLAN 是基于现有接口的"子接口",需依赖父接口进行数据传输。
3. ifname
参数(补充说明)
- 作用 :自定义 VLAN 接口的名称(如
eth0.100
或vlan100
)。 - 示例 :
ifname vlan100
会创建一个名为vlan100
的接口。 - 必要性 :可选参数。若不指定,系统会自动生成名称(格式为
父接口.VLANID
)。
完整命令示例
bash
nmcli con add type vlan \
con-name "my-vlan" \ # 连接名称(自定义)
ifname "vlan100" \ # VLAN 接口名称(可选)
dev "eth0" \ # 父接口(物理网卡)
id 100 \ # VLAN ID(必须)
ipv4.method manual \ # 静态 IP 配置
ipv4.addresses 192.168.100.10/24
关键区别总结
参数 | 作用 | 是否必须 | 示例值 |
---|---|---|---|
id |
定义 VLAN 的逻辑标识 | 是 | id 100 |
dev |
绑定到物理接口或虚拟接口 | 是 | dev eth0 |
ifname |
自定义接口名称 | 否 | ifname vlan100 |
常见错误
- 拼写错误 :误将
id
写成iframe
会导致参数无效。 - 遗漏参数 :未指定
dev
或id
会导致命令报错。 - 名称冲突 :若
ifname
与现有接口重复,需先删除旧配置。
建议通过 nmcli con add type vlan --help
查看最新参数说明。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键参数,但它们的用途和作用对象不同,具体区别如下:
1. ifname
(接口名称)
-
作用 :指定新创建的 VLAN 虚拟接口的名称 (如
vlan10
)。 -
使用场景 :在创建 VLAN 连接时,必须通过
ifname
定义生成的虚拟接口名,该名称会出现在系统网络接口列表中(如通过ip link show
或nmcli device status
查看)。 -
示例 :
bashnmcli con add type vlan con-name "VLAN10" ifname vlan10 dev eth0 id 10
- 此命令会创建一个名为
vlan10
的 VLAN 虚拟接口,绑定到物理接口eth0
。
- 此命令会创建一个名为
2. dev
(父设备)
-
作用 :指定 底层物理接口或父接口 (如
eth0
),VLAN 虚拟接口将基于此接口创建。 -
使用场景 :必须明确指定父接口,否则无法建立 VLAN 连接。父接口通常是物理网卡(如
eth0
、enp0s3
),也可以是其他支持 VLAN 的接口(如网桥或绑定接口)。 -
示例 :
bashnmcli con add type vlan con-name "VLAN10" ifname vlan10 dev eth0 id 10
- 此命令中的
dev eth0
表示 VLAN 虚拟接口vlan10
基于物理接口eth0
创建。
- 此命令中的
关键区别
参数 | 作用对象 | 是否必须 | 示例值 | 说明 |
---|---|---|---|---|
ifname |
新创建的 VLAN 虚拟接口 | 必须 | vlan10 |
用户自定义的虚拟接口名称。 |
dev |
底层物理或父接口 | 必须 | eth0 |
实际承载 VLAN 流量的物理接口。 |
完整命令示例
bash
# 创建 VLAN 连接(VLAN ID 10,虚拟接口名 vlan10,绑定到物理接口 eth0)
nmcli con add type vlan \
con-name "VLAN10" \
ifname vlan10 \
dev eth0 \
id 10 \
ipv4.method manual \
ipv4.addresses "192.168.10.100/24" \
ipv4.gateway "192.168.10.1"
- 执行后 :
- 系统会生成一个名为
vlan10
的虚拟接口。 - 该接口通过
eth0
传输 VLAN 流量(VLAN ID 10)。 - 配置的 IP 地址
192.168.10.100/24
会绑定到vlan10
。
- 系统会生成一个名为
验证配置
bash
# 查看 VLAN 连接详情
nmcli con show "VLAN10" | grep -E "vlan.id|vlan.parent|connection.interface-name"
# 查看虚拟接口状态
ip link show vlan10
# 激活连接
nmcli con up "VLAN10"
总结
ifname
:定义 VLAN 虚拟接口的名称(用户可见的网络接口)。dev
:指定底层物理接口(实际承载流量的硬件接口)。- 两者必须同时指定 ,且
ifname
需唯一(不能与现有接口冲突),dev
需为已存在的物理接口。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键参数,它们的作用和区别如下:
1. ifname
(接口名称)
-
作用 :指定新创建的 VLAN 子接口名称(即虚拟网络接口的名称)。
-
特点 :
- 必须是一个符合系统命名规范的接口名(如
eth0.10
、ens33.20
等)。 - 通常采用
父接口名.VLAN_ID
的格式(例如eth0.10
表示 VLAN ID 为 10 的子接口)。
- 必须是一个符合系统命名规范的接口名(如
-
示例 :
bashnmcli con add type vlan con-name vlan10 ifname eth0.10 ...
- 这里
ifname eth0.10
表示创建的 VLAN 子接口名称为eth0.10
。
- 这里
2. dev
(设备名称)
-
作用 :指定 父物理接口(即用于创建 VLAN 子接口的物理网络接口)。
-
特点 :
- 必须是已存在的物理接口(如
eth0
、ens33
等)。 - 该接口通常是未配置 IP 地址的,仅作为 VLAN 的父设备。
- 必须是已存在的物理接口(如
-
示例 :
bashnmcli con add type vlan con-name vlan10 ifname eth0.10 dev eth0 ...
- 这里
dev eth0
表示 VLAN 子接口eth0.10
是基于物理接口eth0
创建的。
- 这里
3. 核心区别
参数 | 作用 | 示例值 | 是否必须 |
---|---|---|---|
ifname |
新 VLAN 子接口的名称 | eth0.10 |
✅ |
dev |
父物理接口的名称 | eth0 |
✅ |
- 关系 :
ifname
是dev
的子接口(例如,eth0.10
是eth0
的 VLAN 子接口)。 - 配置逻辑 :
VLAN 子接口依赖于物理接口(dev
)存在,且ifname
必须与dev
的命名规范一致。
4. 完整示例
bash
nmcli con add type vlan \
con-name vlan10 \
ifname eth0.10 \ # VLAN 子接口名称
dev eth0 \ # 父物理接口
vlan-id 10 \ # VLAN ID
ipv4.addresses 192.168.10.100/24 \
ipv4.method manual
- 解释 :
- 创建名为
vlan10
的 VLAN 连接。 - 使用物理接口
eth0
生成子接口eth0.10
(VLAN ID 为 10)。 - 为子接口
eth0.10
配置静态 IP 地址192.168.10.100/24
。
- 创建名为
5. 注意事项
- 命名规范 :
ifname
必须符合系统命名规则(如enp0s3.100
或eth0.200
)。- 如果未指定
ifname
,nmcli
会自动生成(如vlan10
),但建议显式指定以避免混淆。
- 父接口状态 :
dev
指定的物理接口不能已配置 IP 地址(否则可能冲突)。- 建议将物理接口配置为
ipv4.method disabled
(禁用 IP)。
- VLAN ID 范围 :
vlan-id
必须是 1-4094 之间的数字。
6. 验证配置
-
查看 VLAN 接口:
baship link show
输出示例:
yaml3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 ... 4: eth0.10@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
-
查看连接状态:
bashnmcli con show
通过正确使用 ifname
和 dev
,可以灵活管理 VLAN 子接口的配置。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键参数,它们分别用于指定 VLAN 接口的名称和主设备。以下是它们的区别和详细解释:
1. ifname
参数
-
作用:指定新创建的 VLAN 接口的名称(即 VLAN 子接口的名称)。
-
格式 :通常为
主设备名.VLAN_ID
,例如eth0.100
。 -
示例 :
bashnmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 vlan-id 100
ifname=eth0.100
:表示创建的 VLAN 接口名称为eth0.100
。
2. dev
参数
-
作用:指定 VLAN 接口所依赖的主设备(物理或逻辑接口)。
-
格式 :直接指定主设备的名称,例如
eth0
、bond0
等。 -
示例 :
bashnmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 vlan-id 100
dev=eth0
:表示 VLAN 接口eth0.100
是基于主设备eth0
创建的。
3. 核心区别
参数 | 作用 | 示例值 |
---|---|---|
ifname |
指定 VLAN 接口的名称 | eth0.100 |
dev |
指定 VLAN 接口依赖的主设备名称 | eth0 |
4. 使用场景
4.1 创建基于物理网卡的 VLAN
bash
nmcli con add type vlan con-name vlan100 \
ifname eth0.100 dev eth0 vlan-id 100
- 主设备 :
eth0
(物理网卡)。 - VLAN 接口 :
eth0.100
(基于eth0
的 VLAN 100 子接口)。
4.2 创建基于绑定(Bonding)的 VLAN
bash
nmcli con add type vlan con-name bond0-vlan100 \
ifname bond0.100 dev bond0 vlan-id 100
- 主设备 :
bond0
(绑定接口)。 - VLAN 接口 :
bond0.100
(基于bond0
的 VLAN 100 子接口)。
5. 常见错误及解决方法
5.1 错误:混淆 ifname
和 dev
-
错误示例 :
bashnmcli con add type vlan con-name vlan100 ifname bond0 vlan-id 100
-
问题 :
ifname
被错误地指定为主设备bond0
,缺少dev
参数。 -
解决 :明确区分
ifname
(子接口名)和dev
(主设备名):bashnmcli con add type vlan con-name vlan100 ifname bond0.100 dev bond0 vlan-id 100
-
5.2 错误:未指定 dev
参数
-
错误示例 :
bashnmcli con add type vlan con-name vlan100 ifname eth0.100 vlan-id 100
-
问题 :缺少
dev
参数,NetworkManager 无法确定 VLAN 的主设备。 -
解决 :添加
dev
参数:bashnmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 vlan-id 100
-
6. 总结
-
ifname
是 VLAN 接口的名称(如eth0.100
),必须符合主设备名.VLAN_ID
的格式。 -
dev
是 VLAN 接口依赖的主设备(如eth0
或bond0
)。 -
正确配对 :确保
ifname
和dev
对应,例如:bashifname=eth0.100 与 dev=eth0 ifname=bond0.200 与 dev=bond0
通过正确使用 ifname
和 dev
,可以确保 VLAN 接口正确绑定到主设备,从而实现网络隔离和虚拟化需求。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个不同的参数,分别用于指定 VLAN 接口的名称 和 VLAN 所基于的物理设备。它们的区别如下:
1. ifname
:VLAN 接口的名称
-
作用:指定 VLAN 接口本身的名称,用于在系统中标识这个虚拟接口。
-
命名规则 :通常使用
物理设备名.VLANID
的格式(如eth0.10
),但也可以自定义。 -
示例 :
bashnmcli con add type vlan con-name vlan10 ifname eth0.10 dev eth0 id 10
这里的
eth0.10
是 VLAN 接口的名称,系统会创建一个名为eth0.10
的虚拟网络设备。
2. dev
:VLAN 所基于的物理设备
-
作用:指定 VLAN 标签应该在哪个物理网络设备(如网卡)上进行处理。
-
取值 :必须是系统中已存在的物理网络设备名称(如
eth0
,enp0s3
)。 -
示例 :
bashnmcli con add type vlan con-name vlan10 ifname eth0.10 dev eth0 id 10
这里的
dev eth0
表示该 VLAN 流量将通过物理网卡eth0
传输。
关键区别对比表
参数 | ifname |
dev |
---|---|---|
含义 | VLAN 接口的逻辑名称 | VLAN 所绑定的物理设备 |
用途 | 在系统中标识 VLAN 接口 | 指定 VLAN 流量的物理传输路径 |
格式 | 自定义名称(建议 设备.VLANID ) |
现有物理设备名(如 eth0 ) |
示例 | eth0.10 , vlan10 |
eth0 , enp2s0 |
为什么需要两个参数?
VLAN 是一种虚拟网络技术,它通过在物理网络上打标签(Tag)来划分逻辑网络。因此:
dev
确定了 VLAN 流量从哪个物理网卡进出。ifname
则是系统中用于配置和管理这个 VLAN 的逻辑接口名称。
例如,你可以在同一个物理网卡 eth0
上创建多个 VLAN:
bash
# VLAN 10
nmcli con add type vlan con-name vlan10 ifname eth0.10 dev eth0 id 10
# VLAN 20(同一物理网卡,不同 VLAN ID)
nmcli con add type vlan con-name vlan20 ifname eth0.20 dev eth0 id 20
常见错误案例
-
dev
指定不存在的设备:bash# 错误:eth99 不存在 nmcli con add type vlan ifname eth0.10 dev eth99 id 10
结果:命令失败,提示设备不存在。
-
混淆
ifname
和dev
:bash# 错误:ifname 使用了物理设备名 nmcli con add type vlan ifname eth0 dev eth0 id 10
结果:可能覆盖原物理设备配置,导致网络异常。
验证配置
创建 VLAN 后,可以通过以下命令验证:
bash
# 查看网络接口列表
ip addr show
# 输出示例:
4: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 192.168.10.10/24 scope global eth0.10
valid_lft forever preferred_lft forever
注意 eth0.10@eth0
表示该 VLAN 接口(eth0.10
)绑定在物理设备 eth0
上。
总结
ifname
是 VLAN 接口的逻辑名称,用于系统内部识别和配置。dev
是 VLAN 接口的物理载体,决定了流量实际通过哪个网卡传输。
两者共同定义了一个完整的 VLAN 接口:逻辑上的命名(ifname
)和物理上的承载(dev
)。
在 nmcli con add type vlan
命令中,ifname
和 dev
参数的作用不同:
ifname
:VLAN接口的逻辑名称
-
作用:定义VLAN接口本身的名称,用于在系统中识别这个VLAN连接。
-
格式 :通常使用
物理网卡名.VLANID
的格式(如eth0.100
),但可以自定义。 -
示例 :
bashifname eth0.100 # 创建名为eth0.100的VLAN接口 ifname vlan100 # 也可以自定义为vlan100
dev
:VLAN的物理承载设备
-
作用:指定VLAN标签应该附加到哪个物理网卡或逻辑接口上。
-
要求 :必须是已存在的物理网卡(如
eth0
)或逻辑接口(如bond0
、br0
)。 -
示例 :
bashdev eth0 # 基于eth0网卡创建VLAN dev bond0 # 基于bond0绑定接口创建VLAN
对比示例
示例1:在eth0上创建VLAN 100
bash
nmcli con add type vlan con-name my-vlan100 \
ifname eth0.100 # VLAN接口名称为eth0.100
dev eth0 # 承载设备为eth0
id 100 # VLAN ID为100
示例2:在网桥上创建VLAN
bash
nmcli con add type vlan con-name br0-vlan200 \
ifname br0.200 # VLAN接口名称为br0.200
dev br0 # 承载设备为网桥br0
id 200 # VLAN ID为200
关键区别
参数 | ifname |
dev |
---|---|---|
含义 | VLAN接口的逻辑名称 | VLAN的物理/逻辑承载设备 |
是否必须存在 | 不需要(命令会创建) | 必须已存在 |
命名规范 | 可自定义(建议 设备.VLANID ) |
必须是现有网卡/接口名 |
示例 | eth0.100 , vlan-data |
eth0 , bond0 , br0 |
常见错误场景
-
dev
指定不存在的设备:bash# 错误:如果eth1不存在,会报错 nmcli con add type vlan ifname eth1.100 dev eth1 id 100
-
混淆
ifname
和dev
:bash# 错误:ifname不能作为承载设备 nmcli con add type vlan ifname eth0 dev eth0.100 id 100
-
VLAN ID重复:
bash# 错误:同一设备上不能有两个相同VLAN ID的接口 nmcli con add type vlan ifname eth0.100 dev eth0 id 100 nmcli con add type vlan ifname eth0.101 dev eth0 id 100 # 重复ID
验证配置
创建后可以通过以下命令验证:
bash
# 查看VLAN接口是否存在
ip addr show eth0.100
# 查看NetworkManager连接
nmcli con show eth0.100
# 查看VLAN标签
bridge vlan show dev eth0
总结 :ifname
是VLAN接口的名字,dev
是这个VLAN跑在哪个物理网卡/接口上。
nmcli con add type vlan 中 ifname 和 dev 参数的区别
在 nmcli
命令中添加 VLAN 连接时,ifname
和 dev
是两个关键参数,它们分别控制网络接口的命名和父设备的指定。理解它们的区别对于正确配置 VLAN 至关重要。下面我将逐步解释每个参数的含义、作用、以及在实际命令中的使用场景,确保回答基于 Linux 网络管理的最佳实践和官方文档。
1. 参数定义与作用
-
dev
参数:- 含义 :指定 VLAN 的"父设备"(parent device),即 VLAN 标签将被附加到的物理网络接口(如以太网卡)。这是一个必需参数,因为 VLAN 必须基于一个现有的物理设备。
- 作用 :定义 VLAN 的逻辑连接点。例如,如果父设备是
eth0
,则 VLAN 数据包将通过eth0
传输。 - 示例场景 :在命令
nmcli con add type vlan dev eth0 id 10
中,dev eth0
表示 VLAN 基于物理接口eth0
创建。
-
ifname
参数:- 含义 :指定新创建的 VLAN 接口的"名称"(interface name),这是一个可选参数 。如果不指定,系统会自动生成一个名称(如
eth0.10
)。 - 作用 :自定义 VLAN 接口的标识符,便于后续管理(如通过
nmcli connection show
查看或修改)。这类似于在其他网络配置中指定接口名称,例如在添加普通以太网连接时使用ifname
。 - 示例场景 :在命令
nmcli con add type vlan dev eth0 id 10 ifname vlan10
中,ifname vlan10
表示新接口被命名为vlan10
。
- 含义 :指定新创建的 VLAN 接口的"名称"(interface name),这是一个可选参数 。如果不指定,系统会自动生成一个名称(如
2. 关键区别总结
参数 | 是否必需 | 作用对象 | 默认行为 | 使用场景示例 |
---|---|---|---|---|
dev |
是 | 父物理设备(如 eth0 ) |
无默认值,必须显式指定 | 指定 VLAN 的底层硬件接口 |
ifname |
否 | 新 VLAN 接口名称 | 系统自动命名(如 eth0.10 ) |
自定义接口名,方便识别和管理 |
- 核心区别 :
dev
定义了 VLAN 的"从哪里来"(物理基础),而ifname
定义了 VLAN 的"叫什么"(逻辑标识)。- 如果省略
ifname
,VLAN 接口名称会基于dev
和 VLAN ID 自动生成(例如dev eth0
和id 10
会生成eth0.10
)。但dev
不能省略,否则命令会报错。 - 在配置多个 VLAN 时,
ifname
可以避免名称冲突,而dev
确保所有 VLAN 共享同一个物理带宽。
3. 实际命令示例
以下是一个完整的命令示例,展示如何添加一个 VLAN 连接:
bash
# 添加 VLAN 连接:父设备为 eth0,VLAN ID 为 10,接口命名为 vlan10
nmcli con add type vlan dev eth0 id 10 ifname vlan10
-
在这个命令中:
dev eth0
:指定父设备(必需)。ifname vlan10
:自定义接口名称(可选)。id 10
:VLAN ID(必需)。
-
如果不指定
ifname
,命令会简化为:bashnmcli con add type vlan dev eth0 id 10
系统自动生成接口名,如
eth0.10
。
配置后,您可以使用 nmcli connection show
查看连接详情,或通过 nmcli con up vlan10
激活连接(参考引用)。
4. 常见问题与注意事项
- 为什么
dev
是必需的?
VLAN 是虚拟的,必须绑定到一个物理设备(如网卡)才能传输数据。dev
确保 VLAN 有可用的硬件资源。 ifname
的命名规则?
名称应唯一且符合 Linux 接口命名规范(如只使用字母、数字和下划线)。避免使用系统保留名(如lo
或eth0
)。- 与普通连接的区别 :
在非 VLAN 连接中(如以太网),ifname
通常指定物理接口,但在 VLAN 命令中,ifname
仅用于新虚拟接口,而dev
指向物理父设备。这类似于修改连接时添加多个 IP 地址的语法。 - 错误处理 :
如果dev
指定的设备不存在,命令会失败;如果ifname
已存在,系统会报错"接口名称冲突"。
5. 总结
dev
:用于指定 VLAN 的父物理设备(必需),确保 VLAN 有底层硬件支持。ifname
:用于自定义 VLAN 接口名称(可选),便于管理,但系统会自动生成名称。 理解这两个参数的区别,能帮助您更高效地管理 VLAN 配置,避免常见错误。如果您修改了配置,记得使用nmcli con reload
重新加载连接(参考引用)。
在 nmcli con add type vlan
命令中,ifname
和 dev
的区别如下:
1. ifname
参数
-
作用 :定义 新创建的 VLAN 接口的名称 (逻辑名称)。
- 例如:
vlan10
、eth0.100
。 - 该名称会出现在
ip link show
或nmcli connection show
的输出中。
- 例如:
-
示例 :
bashnmcli con add type vlan con-name vlan10 ifname vlan10 vlan.parent eth0 vlan.id 10
- 此时创建的 VLAN 接口名称为
vlan10
,父接口为eth0
,VLAN ID 为 10。
- 此时创建的 VLAN 接口名称为
2. dev
参数
-
作用 :指定 父物理接口 (即承载 VLAN 流量的底层接口)。
- 例如:
eth0
、bond0
。 - 该参数等价于
vlan.parent
,但语法更简洁(部分旧版本nmcli
使用)。
- 例如:
-
示例 :
bashnmcli con add type vlan con-name vlan10 ifname vlan10 dev eth0 vlan.id 10
- 此时父接口为
eth0
,VLAN 接口名称仍为vlan10
。
- 此时父接口为
3. 关键区别
参数 | 作用对象 | 必选性 | 典型值示例 |
---|---|---|---|
ifname |
新 VLAN 接口的名称 | 必选 | vlan10 |
dev |
父物理接口名称 | 必选 | eth0 、bond0 |
4. 实际使用建议
-
推荐参数 :
使用vlan.parent
替代dev
,因后者可能在新版本nmcli
中被弃用。bashnmcli con add type vlan con-name vlan10 ifname vlan10 vlan.parent eth0 vlan.id 10
-
兼容性 :
部分旧版本nmcli
支持dev
参数,但建议统一使用vlan.parent
以符合官方文档规范。
5. 验证配置
bash
# 查看 VLAN 接口信息
ip -d link show vlan10
# 输出示例:
4: vlan10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
vlan protocol 802.1Q id 10 <REORDER_HDR>
6. 常见错误
- 未指定父接口 :
若未正确设置vlan.parent
或dev
,会报错Error: argument 'vlan.parent' is required
。 - 命名冲突 :
ifname
需唯一,不能与现有接口名重复(如已存在vlan10
,需更换名称)。
通过合理使用 ifname
和 vlan.parent/dev
,可灵活管理 VLAN 接口的命名与底层物理设备绑定关系。
在 nmcli con add type vlan
命令中,ifname
和 dev
(或其完整形式 vlan.parent
)是创建 VLAN 子接口的两个关键参数,其作用和区别如下:
📌 一、核心区别总结
参数 | 作用 | 是否必需 | 示例 |
---|---|---|---|
ifname |
定义新 VLAN 子接口在操作系统中的名称(虚拟接口名) | 是 | ifname vlan100 |
dev |
指定承载 VLAN 的父接口(物理网卡、Bond 或 Bridge 设备) | 是 | dev eth0 或 vlan.parent eth0 |
💡 简记:
ifname
= 新接口叫什么(逻辑标识)dev
= 基于哪个接口创建(物理/逻辑基础)
🔧 二、参数详解与示例
1. ifname
:新接口的标识名
-
作用 :定义 VLAN 子接口在系统中的名称(如
vlan10
、bond0.100
),用于后续管理(如ip addr show vlan10
)。 -
命名规范 :
- 建议包含 VLAN ID(如
vlan100
)或父接口名(如eth0.100
),便于识别。 - 名称需唯一,避免与现有接口冲突。
- 建议包含 VLAN ID(如
-
示例 :
bashnmcli con add type vlan ifname vlan100 ... # 创建名为 vlan100 的子接口
2. dev
或 vlan.parent
:父接口指定
-
作用:明确 VLAN 流量承载的底层设备(需为已存在的物理或聚合接口)。
-
支持类型 :
- 物理网卡(如
eth0
) - Bond 聚合接口(如
bond0
) - Bridge 设备(如
br0
)。
- 物理网卡(如
-
依赖要求 :
- 父接口需先启用(
UP
状态),否则 VLAN 子接口无法正常工作。 - 若父接口为 Bond,需确保其 Slave 网卡已激活(如
nmcli con up bond-slave-eth1
)。
- 父接口需先启用(
-
示例 :
bashnmcli con add type vlan dev eth0 ... # 基于 eth0 创建 VLAN nmcli con add type vlan vlan.parent bond0 ... # 等效写法(推荐)
⚠️ 三、关键注意事项
-
参数共存性 :
ifname
和dev
必须同时存在,否则命令报错。例如:bash# 完整命令示例 nmcli con add type vlan con-name vlan100 ifname vlan100 dev eth0 id 100
-
命名冲突风险:
- 若
ifname
与现有接口同名(如已有vlan100
),会导致创建失败。 - 建议使用
ip link show
检查现有接口名。
- 若
-
父接口状态依赖 :
VLAN 子接口依赖父接口的物理状态。若父接口宕机(如网卡故障),其下所有 VLAN 子接口均失效。
🔍 四、配置验证方法
-
查看接口列表 :
baship link show vlan100 # 检查 VLAN 子接口是否存在
-
确认父接口绑定 :
bashnmcli -p con show vlan100 | grep vlan.parent # 输出父接口名称
-
检查 VLAN ID 标签 :
baship -d link show vlan100 | grep vlan # 输出应含 "vlan protocol 802.1Q id 100"
💎 五、典型应用场景
场景1:基于物理网卡创建 VLAN
bash
# 在 eth0 上创建 VLAN 100,子接口命名为 vlan100
nmcli con add type vlan con-name vlan100 ifname vlan100 dev eth0 id 100
场景2:基于 Bond 接口创建 VLAN
bash
# 在 bond0 上创建 VLAN 200,子接口命名为 bond0.200
nmcli con add type vlan con-name vlan200 ifname bond0.200 vlan.parent bond0 id 200
⚠️ 重要 :Bond 模式需避免使用
fail_over_mac=follow
,否则 VLAN 无法同步 MAC 地址。
🛠️ 六、故障排查
-
问题 :VLAN 子接口未激活。
解决:- 检查父接口状态:
nmcli device status
(确保STATE
为connected
)。 - 验证交换机配置:父接口连接的交换机端口需设为 Trunk 模式,并允许对应 VLAN ID 通过。
- 检查父接口状态:
-
问题 :
dev
参数报错 "Device not found"。
解决:- 确认父接口名称正确(区分
eth0
vseno1
)。 - 检查父接口是否被其他连接占用:
nmcli con show
→ 关闭冲突连接。
- 确认父接口名称正确(区分
通过明确 ifname
(虚拟接口名)和 dev
/vlan.parent
(物理承载接口)的分工,可高效创建可管理的 VLAN 子接口,适用于服务器网络隔离、虚拟化及容器网络等场景。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个不同层级的参数,分别用于指定 VLAN 接口的逻辑名称和物理父接口。以下是详细区别及使用场景:
1. ifname
:指定 VLAN 子接口名称
- 作用
定义在操作系统中创建的 VLAN 虚拟接口的名称 (例如vlan10
),该名称用于系统内部标识和管理该接口。 - 示例
ifname vlan10
表示创建的 VLAN 子接口在系统中显示为vlan10
。 - 特性
- 是用户可自定义的逻辑名称(如
vlan-home
、vlan-office
)。 - 需确保同一主机上无重复接口名。
- 可通过
ip link show
或nmcli device status
查看。
- 是用户可自定义的逻辑名称(如
2. dev
/ vlan.parent
:指定物理父接口
- 作用
指定 承载 VLAN 流量的底层物理接口或绑定接口 (如eth0
、ens4
)。 - 示例
vlan.parent ens4
表示 VLAN 流量通过物理网卡ens4
传输。 - 特性
- 必须是已存在的物理接口(或 Bond、Team 等聚合接口)。
- 父接口需支持 VLAN 功能(需加载
8021q
内核模块)。 - 交换机对应端口需配置为 Trunk 模式以允许 VLAN 标签。
3. 参数对比表
参数 | 作用 | 是否必填 | 示例值 | 查看方式 |
---|---|---|---|---|
ifname |
定义 VLAN 子接口的逻辑名称 | 是 | vlan10 |
ip link show type vlan |
dev / vlan.parent |
指定底层物理父接口 | 是 | ens4 、eth0 |
nmcli device status |
4. 典型命令解析
bash
nmcli con add type vlan \
con-name vlan10 \ # 连接配置名称(逻辑配置)
ifname vlan10 \ # 系统接口名称(逻辑标识)
dev ens4 \ # 物理父接口(承载设备)
id 10 # VLAN ID
-
等价写法 :
vlan.parent
可替代dev
(功能相同):bashnmcli con add type vlan ifname vlan10 vlan.parent ens4 vlan.id 10
5. 常见错误场景
-
ifname
冲突
若ifname vlan10
已存在,会报错Interface name already exists
。 -
无效的
dev
若父接口ens4
不存在或未启用,会报错Device not found
。 -
缺少 VLAN 支持
父接口未加载8021q
模块时,需先执行:bashmodprobe 8021q
总结
ifname
= 逻辑接口名(用户自定义,用于系统识别)。dev
/vlan.parent
= 物理父接口 (必须真实存在,承载流量)。
两者均为必填项,且分属不同层级:ifname
管虚拟接口标识,dev
管物理传输基础。配置时需同时正确指定,否则 VLAN 无法正常工作。
在 nmcli con add type vlan
命令中,dev
和 ifname
参数的作用不同,具体区别如下:
1. dev
-
含义 :指定 VLAN 的 父接口(物理接口/底层接口),即 VLAN 所依附的底层网络设备。
-
用途 :必须明确指定父接口(如
eth0
、enp1s0
等)。 -
示例 :
bashnmcli con add type vlan dev eth0 id 100 ...
表示在物理网卡
eth0
上创建 VLAN。
2. ifname
-
含义 :指定 VLAN 的 虚拟接口名称(用户自定义的可选名称)。
-
用途 :可选参数。若不指定,系统会自动生成名称(如
eth0.100
)。 -
示例 :
bashnmcli con add type vlan dev eth0 id 100 ifname vlan100 ...
表示将新创建的 VLAN 接口命名为
vlan100
。
关键区别
参数 | 描述 | 必要性 | 默认行为 |
---|---|---|---|
dev |
指定父接口(物理设备) | 必须 | 无,必须显式指定 |
ifname |
指定 VLAN 的虚拟接口名称 | 可选 | 自动生成(如 eth0.100 ) |
典型命令示例
bash
nmcli con add type vlan dev eth0 id 100 ifname vlan100 \
ipv4.addresses 192.168.1.10/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8
- 在
eth0
(dev
参数)上创建 ID 为 100 的 VLAN。 - 虚拟接口名称为
vlan100
(ifname
参数)。
注意事项
- 依赖关系 :VLAN 的创建依赖于父接口(
dev
参数指定的物理设备)。 - 命名冲突 :若手动指定
ifname
,需确保名称未被其他接口占用。 - 自动生成 :如果省略
ifname
,系统会生成类似<parent-device>.<vlan-id>
的名称(如eth0.100
)。
建议根据实际场景选择是否手动指定 ifname
。如果不关心接口名称,可省略该参数。
在 nmcli con add type vlan
命令中,ifname
和 dev
两个参数分别承担不同的角色:
1. ifname
- 作用 :指定 VLAN 虚拟接口的名称(即新创建的 VLAN 接口的标识)。
- 默认行为 :若省略该参数,NetworkManager 会根据父接口名和 VLAN ID 自动生成名称 (如
enp3s0.100
)。 - 典型场景 :
- 希望自定义 VLAN 接口名称时(如统一命名风格)。
- 需要避免默认命名冲突时。
示例:
bash
# 自定义 VLAN 接口名称为 "myvlan100"
sudo nmcli con add type vlan \
con-name myvlan \ # 连接名称(自定义)
ifname myvlan100 \ # VLAN 接口名称(虚拟接口)
dev enp3s0 \ # 父接口(物理/绑定接口)
vlan.id 100
2. dev
- 作用 :指定 父接口的名称 ,即 VLAN 所属的底层物理接口(如
enp3s0
)或逻辑接口(如 Bond 接口bond0
)。 - 必须性 :是 必填参数,无默认值。
- 典型场景 :
- 在物理网卡上划分 VLAN。
- 在绑定接口(Bond)上进一步划分 VLAN。
示例:
bash
# 父接口为物理网卡 enp3s0
sudo nmcli con add type vlan \
con-name myvlan \
dev enp3s0 \ # 父接口(必填)
vlan.id 100
# 父接口为绑定接口 bond0
sudo nmcli con add type vlan \
con-name myvlan-bond \
dev bond0 \ # 父接口为绑定接口
vlan.id 200
3. 对比总结
参数 | 功能 | 是否必填 | 示例值 |
---|---|---|---|
ifname |
定义 VLAN 虚拟接口的名称 | 可选 | myvlan100 |
dev |
指定 VLAN 的父接口 | 必填 | enp3s0 , bond0 |
注意事项
-
命名规则:
- 若省略
ifname
,自动生成的接口名称为<父接口名>.<VLAN_ID>
(如enp3s0.100
)。 - 若自定义名称(如
myvlan100
),需确保不与现有接口名冲突。
- 若省略
-
底层依赖:
dev
必须指向一个已存在且处于活动状态的接口(如已配置好的物理网卡、绑定接口等)。
-
网络重启 : 配置完成后,需通过
nmcli con up myvlan
激活 VLAN 连接。验证命令:ip -d link show myvlan100
。
典型完整命令
bash
# 使用默认生成的 VLAN 接口名(enp3s0.100)
sudo nmcli con add type vlan \
con-name myvlan \
dev enp3s0 \ # 父接口(必填)
vlan.id 100 \ # VLAN ID
ipv4.method manual \ # 静态 IP
ipv4.addresses 192.168.100.10/24 \
ipv4.gateway 192.168.100.1
通过正确区分 ifname
(自定义名称)和 dev
(指定父接口),可以精准控制 VLAN 接口的命名与归属关系。
在 nmcli con add type vlan
命令中,dev
和 iframe
(可能为笔误,实际应为 ifname
)是两个不同的参数,分别用于指定 父接口 和 VLAN 接口的名称。以下是具体区别:
1. dev
参数
- 作用 :指定 VLAN 依赖的父接口(即物理网卡或基础网络接口)。
- 示例 :
dev eth0
表示基于eth0
这个物理接口创建 VLAN。 - 说明:父接口是 VLAN 的底层承载接口,数据通过该接口进行转发。
2. ifname
参数(可能被误写为 iframe
)
- 作用 :指定新创建的VLAN 接口的名称 (如
vlan10
、ens33.100
等)。 - 示例 :
ifname vlan10
表示创建的 VLAN 接口名为vlan10
。 - 说明 :VLAN 接口名称通常是系统自动生成的(如
eth0.100
),但可以通过ifname
自定义。
常见命令示例
bash
nmcli con add type vlan \
con-name my-vlan \
ifname vlan10 \ # VLAN 接口名称
dev eth0 \ # 父接口(物理网卡)
id 10 \ # VLAN ID
ip4.addresses 192.168.1.100/24
dev eth0
:基于eth0
创建 VLAN。ifname vlan10
:将 VLAN 接口命名为vlan10
。
关键区别总结
参数 | 作用 | 典型值 |
---|---|---|
dev |
父接口(物理网卡) | eth0 , ens33 |
ifname |
VLAN 接口名称 | vlan10 , eth0.100 |
dev
是必选参数:必须指定父接口,否则 VLAN 无法创建。ifname
是可选参数 :若未指定,系统会自动生成接口名(如eth0.100
)。
注意事项
- 参数命名 :
iframe
并非标准参数,可能是ifname
的笔误。 - VLAN ID :需通过
id
参数指定 VLAN 的 ID(如10
对应 VLAN 10)。 - 兼容性:确保父接口存在且未被其他连接占用。
通过正确区分 dev
和 ifname
,可以灵活定义 VLAN 的父子关系和接口命名规则。