`nmcli con add type vlan`中的: `ifname` , `dev` ,`vlan.parent`, `id`,`vlan.id`

122 阅读49分钟

Linux的NetworkManager的nmcli con add type vlan中的: ifname , dev ,vlan.parent, id,vlan.id

nmcli con add type vlan 参数详解:ifname, dev, vlan.parent, id, vlan.id

在配置 VLAN 时,这些参数密切关联但各有特定作用。以下是这些参数的详细解析和相互关系:

一、参数关系图

graph LR
    A[命令行参数] --> B[实际配置]
    A --> C[系统接口]
    
    subgraph 命令行参数
    A1[dev] --> B1[vlan.parent]
    A2[id] --> B2[vlan.id]
    A3[ifname] --> B3[connection.interface-name]
    end
    
    subgraph 系统接口
    C1[ifname] --> D1[网络接口]
    end
    
    style A1 fill:#bbf,stroke:#333
    style A2 fill:#9f9,stroke:#333
    style A3 fill:#f96,stroke:#333
    style B1 fill:#bbf,stroke:#333
    style B2 fill:#9f9,stroke:#333
    style B3 fill:#f96,stroke:#333
    style D1 fill:#f00,stroke:#333

二、参数详解与对应关系

命令行参数配置文件属性功能描述必需性示例
ifnameconnection.interface-name定义 VLAN 接口的系统名称必需ifname vlan10
devvlan.parent指定 VLAN 的父设备必需dev eth0
idvlan.id设置 VLAN ID必需id 100
vlan.idvlan.idid 的完整形式idvlan.id 100
vlan.parentvlan.parentdev 的完整形式devvlan.parent eth0

⚠️ 关键说明

  • idvlan.id等价参数,作用完全相同
  • devvlan.parent等价参数,作用完全相同
  • 完整形式 (vlan.id, vlan.parent) 用于明确作用域

三、参数使用对比

1. 等价写法示例

# 简写形式
sudo nmcli con add type vlan \
    ifname vlan10 \
    dev eth0 \
    id 100

# 完整形式
sudo nmcli con add type vlan \
    connection.interface-name vlan10 \
    vlan.parent eth0 \
    vlan.id 100

2. 配置文件映射

# /etc/NetworkManager/system-connections/vlan10.nmconnection
[connection]
id=vlan10
type=vlan
interface-name=vlan10  # ifname 的值

[vlan]
parent=eth0  # dev 或 vlan.parent 的值
id=100       # id 或 vlan.id 的值

四、技术实现细节

1. 内核层面处理

sequenceDiagram
    participant NM as NetworkManager
    participant Kernel
    participant Driver
    
    NM->>Kernel: 创建 VLAN 接口
    Note over NM,Kernel: ifname=vlan10
    Kernel->>Driver: 分配网络接口
    Driver-->>Kernel: 返回接口句柄
    
    NM->>Kernel: 设置父设备
    Note over NM,Kernel: dev=eth0 / vlan.parent=eth0
    Kernel->>Driver: 绑定到物理设备
    Driver-->>Kernel: 确认绑定
    
    NM->>Kernel: 设置 VLAN ID
    Note over NM,Kernel: id=100 / vlan.id=100
    Kernel->>Driver: 配置 802.1Q 标记
    Driver-->>Kernel: 配置完成

2. 数据包处理流程

[发送数据包]
1. 应用 → vlan10 接口 (ifname)
2. 内核添加 VLAN 标签 (id/vlan.id)
3. 通过 eth0 (dev/vlan.parent) 发送

[接收数据包]
1. eth0 (dev/vlan.parent) 接收帧
2. 内核检测 VLAN 标签 (id/vlan.id)
3. 转发到 vlan10 接口 (ifname)

五、最佳实践指南

1. 参数选择建议

场景推荐参数原因
简单配置ifname, dev, id简洁易记
脚本编写vlan.parent, vlan.id明确作用域
批量操作混合使用根据上下文

2. 完整配置示例

# 生产环境推荐写法
sudo nmcli con add type vlan \
    con-name "prod-vlan100" \
    ifname vlan-prod \
    vlan.parent bond0 \   # 使用完整形式明确作用域
    id 100 \              # 使用简写形式
    ipv4.method manual \
    ipv4.addresses 192.168.100.10/24

3. 参数优先级规则

  1. 显式优于隐式
    vlan.id 显式覆盖 id(如果两者同时存在)

  2. 作用域优先
    vlan.parent 优先级高于 dev(同时存在时)

  3. 错误处理

    # 当 id 和 vlan.id 冲突时
    sudo nmcli con add type vlan \
        ifname vlan10 \
        dev eth0 \
        id 100 \
        vlan.id 200  # 此设置会覆盖 id 100
    

六、高级应用场景

1. 多级 VLAN (QinQ)

# 第一层 VLAN
sudo nmcli con add type vlan \
    ifname qinq_base \
    dev eth0 \
    id 1000

# 第二层 VLAN
sudo nmcli con add type vlan \
    ifname customer_vlan \
    vlan.parent qinq_base \  # 使用上一级 VLAN 作为父设备
    vlan.id 200              # 完整形式明确作用域

2. 动态父设备绑定

# 根据接口状态动态选择父设备
sudo nmcli con add type vlan \
    ifname dynamic-vlan \
    vlan.parent +"$(ip route | awk '/default/ {print $5}')" \
    id 50

3. VLAN 标志配置

sudo nmcli con add type vlan \
    ifname vlan-flags \
    dev eth0 \
    id 75 \
    vlan.flags 0x1 \       # 启用 reorder_hdr
    vlan.ingress-qos-map "0:1,1:2"  # QoS 映射

七、故障排查命令

1. 验证参数映射

# 查看配置详情
nmcli -g all con show prod-vlan100 | grep -E "ifname|parent|id"

# 输出示例:
connection.interface-name:vlan-prod
vlan.parent:bond0
vlan.id:100

2. 检查内核状态

# 查看接口信息
ip -d link show vlan-prod

# 输出片段:
10: vlan-prod@bond0: <BROADCAST,MULTICAST> mtu 1500 ...
    vlan protocol 802.1Q id 100 <REORDER_HDR> 

3. 监控数据包

# 捕获带 VLAN 标签的流量
sudo tcpdump -i eth0 -e -vvv vlan

# 输出:
00:11:22:33:44:55 > 00:aa:bb:cc:dd:ee, ethertype 802.1Q (0x8100), vlan 100, # id=100

八、参数关系总结

graph TD
    A[命令行输入] --> B[NetworkManager]
    B --> C[配置文件]
    C --> D[内核接口]
    
    subgraph A
    A1[dev/vlan.parent] --> B
    A2[id/vlan.id] --> B
    A3[ifname] --> B
    end
    
    subgraph C
    C1[vlan.parent] --> D
    C2[vlan.id] --> D
    C3[interface-name] --> D
    end
    
    subgraph D
    D1[网络接口]
    end
    
    style A1 fill:#bbf,stroke:#333
    style A2 fill:#9f9,stroke:#333
    style A3 fill:#f96,stroke:#333
    style C1 fill:#bbf,stroke:#333
    style C2 fill:#9f9,stroke:#333
    style C3 fill:#f96,stroke:#333
    style D1 fill:#f00,stroke:#333

关键要点

  1. ifname:定义 VLAN 接口在系统中的可见名称
  2. dev/vlan.parent:指定 VLAN 的物理承载设备
  3. id/vlan.id:设置 VLAN 的逻辑标识符
  4. 简写 vs 完整形式
    • dev = vlan.parent
    • id = vlan.id
    • 功能相同,完整形式更明确

通过合理组合这些参数,您可以精确控制 VLAN 的各个方面:

  • 网络可见性 (ifname)
  • 物理依赖 (dev/vlan.parent)
  • 逻辑隔离 (id/vlan.id)
  • 实现灵活可靠的 VLAN 配置



























nmcli con add type vlan 参数详解:ifname, dev, vlan.parent, id, vlan.id

nmcli con add type vlan 命令中,这些参数用于配置 VLAN 接口的不同方面。它们之间存在等价关系和层次结构,下面我将详细解析每个参数的作用、区别和最佳实践。

核心参数关系图解

graph TD
    A[dev] === B[vlan.parent]
    C[id] === D[vlan.id]
    E[ifname] --> F[VLAN接口]
    A --> F
    C --> F
    
    style A fill:#9cf,stroke:#333
    style B fill:#9cf,stroke:#333
    style C fill:#f96,stroke:#333
    style D fill:#f96,stroke:#333
    style E fill:#9f9,stroke:#333
    style F fill:#ff9,stroke:#333

关键结论

  • devvlan.parent 完全等价
  • idvlan.id 完全等价
  • ifname 是独立参数

参数详解

1. devvlan.parent (完全等价)

特性说明
作用指定 VLAN 的父接口(物理或逻辑接口)
是否必需
等价关系dev eth0 = vlan.parent eth0
使用场景基础配置用 dev,需要明确属性时用 vlan.parent
取值范围已存在的接口名(eth0, bond0, team0 等)
验证命令`ip -d link show <VLAN接口>grep 'master'`
配置优先级命令行中最后出现的有效值生效

示例比较

# 两种写法完全等效
nmcli con add type vlan dev eth0 id 100
nmcli con add type vlan vlan.parent eth0 vlan.id 100

2. idvlan.id (完全等价)

特性说明
作用指定 VLAN ID(虚拟局域网标识符)
是否必需
等价关系id 100 = vlan.id 100
使用场景基础配置用 id,需要明确属性时用 vlan.id
取值范围1-4094
验证命令`ip -d link show <VLAN接口>grep 'vlan id'`
特殊值ID 0(优先级标记),ID 1(默认VLAN),ID 4095(保留)

示例比较

# 两种写法完全等效
nmcli con add type vlan ifname vlan100 dev eth0 id 100
nmcli con add type vlan ifname vlan100 vlan.parent eth0 vlan.id 100

3. ifname (独立参数)

特性说明
作用指定 VLAN 接口的名称
是否必需否(默认生成 <dev>.<id> 格式)
等价参数无独立等价参数
取值范围唯一接口名(长度≤15字符,允许 a-z, 0-9, _, -)
验证命令ip link show
最佳实践生产环境建议明确指定

命名示例

# 自动命名(不指定 ifname)
nmcli con add type vlan dev eth0 id 100  # 生成 eth0.100

# 自定义命名
nmcli con add type vlan ifname mgmt_vlan dev eth0 id 100

参数组合使用示例

基础配置(最小参数)

# 使用 dev 和 id(自动生成接口名 eth0.100)
nmcli con add type vlan dev eth0 id 100

完整配置(所有参数)

nmcli con add type vlan \
  con-name "Server-Mgmt" \
  ifname mgmt_vlan \     # 自定义接口名
  vlan.parent bond0 \    # 等价于 dev bond0
  vlan.id 200 \          # 等价于 id 200
  ipv4.method manual \
  ipv4.addresses 192.168.100.5/24

混合使用风格

# 混合使用不同风格参数
nmcli con add type vlan \
  ifname storage_net \   # 自定义接口名
  dev em1 \              # 父接口(等价 vlan.parent)
  vlan.id 300 \          # VLAN ID(等价 id)
  ethernet.mtu 9000

参数优先级与冲突处理

1. 当同时指定等价参数时

# 示例:同时指定 dev 和 vlan.parent
nmcli con add type vlan \
  dev eth0 \            # 指定父接口
  vlan.parent bond0 \   # 覆盖前值
  id 100

# 实际生效值:vlan.parent bond0

规则:最后出现的参数值生效

2. 当参数缺失时

缺失参数系统行为解决方案
dev/vlan.parent命令失败(Error: 'dev' argument required)必须提供父接口
id/vlan.id命令失败(Error: 'id' argument required)必须提供 VLAN ID
ifname自动生成 <dev>.<id> 格式接口名建议显式指定以提高可读性

配置验证与查看

1. 查看生成配置

# 查看连接配置
nmcli con show "Server-Mgmt" | grep -E 'ifname|vlan\.(parent|id)'

# 输出示例:
connection.interface-name:          mgmt_vlan
vlan.parent:                        bond0
vlan.id:                            200

2. 查看系统接口

ip -d link show mgmt_vlan

# 输出关键信息:
5: mgmt_vlan@bond0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN 
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    vlan protocol 802.1Q id 200 <REORDER_HDR> 

3. 查看配置文件

/etc/NetworkManager/system-connections/Server-Mgmt.nmconnection:

[connection]
id=Server-Mgmt
type=vlan
interface-name=mgmt_vlan  # ifname 指定

[vlan]
parent=bond0              # dev/vlan.parent 指定
id=200                    # id/vlan.id 指定

最佳实践指南

1. 企业级配置推荐

# 清晰明确的参数风格
nmcli con add type vlan \
  con-name "Prod-DataVLAN" \
  ifname data_vlan300 \    # 描述性接口名
  vlan.parent team0 \      # 明确使用属性名
  vlan.id 300 \            # 明确使用属性名
  ipv4.method manual \
  ipv4.addresses 10.30.0.10/24

2. 参数风格选择原则

场景推荐风格示例
简单临时配置短参数 (dev, id)dev eth0 id 100
生产环境持久配置完整属性名vlan.parent bond0 vlan.id 200
脚本自动化一致风格统一使用 vlan.parentvlan.id

3. 避免的常见错误

# 错误1:混合使用导致混淆
nmcli con add type vlan \
  dev eth0 \          # 父接口
  vlan.id 100 \       # 正确
  id 200              # 冲突!覆盖 vlan.id

# 错误2:重复指定
nmcli con add type vlan \
  vlan.parent eth0 \  # 父接口
  dev eth1 \          # 冲突!覆盖 vlan.parent
  vlan.id 100

高级应用场景

1. 嵌套配置(QinQ)

# 第一层 VLAN
nmcli con add type vlan \
  con-name "QinQ-Outer" \
  ifname qinq_outer \
  dev eth0 \
  id 1000

# 第二层 VLAN
nmcli con add type vlan \
  con-name "QinQ-Inner" \
  ifname qinq_inner \
  vlan.parent qinq_outer \  # 基于第一层VLAN
  vlan.id 200

2. 绑定接口上的 VLAN

# 创建绑定
nmcli con add type bond \
  con-name TrunkBond \
  ifname bond0 \
  bond.options "mode=802.3ad"

# 添加物理接口
nmcli con add type bond-slave ifname eth1 master bond0
nmcli con add type bond-slave ifname eth2 master bond0

# 在绑定上创建 VLAN
nmcli con add type vlan \
  con-name "BondVLAN400" \
  ifname vlan400 \
  dev bond0 \    # 基于绑定接口
  id 400

3. 带标志的 VLAN 配置

nmcli con add type vlan \
  ifname secure_vlan \
  dev eth0 \
  id 500 \
  vlan.flags reorder_hdr \  # VLAN标志
  ethernet.mtu 9000

故障排除与验证

1. 参数冲突错误处理

# 错误:Cannot set 'vlan.id': property is already set
# 原因:同时使用了 id 和 vlan.id
nmcli con add type vlan dev eth0 id 100 vlan.id 200

# 解决方案:只使用一种形式
nmcli con add type vlan dev eth0 vlan.id 100

2. 接口创建失败

# 错误:Interface name 'eth0.100' already exists
# 解决方案1:删除冲突连接
nmcli con delete "vlan-eth0-100"

# 解决方案2:使用自定义 ifname
nmcli con add type vlan ifname custom_vlan dev eth0 id 100

3. VLAN 流量验证

# 1. 检查 VLAN 标签
tcpdump -i eth0 -nn -e vlan

# 2. 验证父接口状态
ethtool -S eth0 | grep vlan

# 3. 检查内核支持
lsmod | grep 8021q

总结与选择建议

参数选择矩阵

使用场景推荐参数组合示例
简单快速配置dev + iddev eth0 id 100
脚本/自动化vlan.parent + vlan.idvlan.parent bond0 vlan.id 200
明确接口名ifname + 父接口/VLAN ID 任一形式ifname mgmt_vlan dev eth0 id 100
高可读性配置ifname + vlan.parent + vlan.idifname data_vlan vlan.parent team0 vlan.id 300

黄金实践法则

  1. 一致性原则:在整个环境中保持参数风格一致
  2. 明确性原则:生产环境总是指定 ifname
  3. 简洁性原则:脚本中使用 devid 简化命令
  4. 验证原则:创建后执行 ip -d link show <接口名> 验证
  5. 文档原则:复杂配置添加注释说明
# 创建管理VLAN:
# - 基于绑定接口 bond0
# - VLAN ID 100
# - 自定义接口名 mgmt_vlan
nmcli con add type vlan \
  con-name "Management-VLAN" \
  ifname mgmt_vlan \
  vlan.parent bond0 \
  vlan.id 100

通过理解这些参数的关系和区别,您可以更高效地使用 nmcli 配置 VLAN 网络,避免常见错误,并创建出易于维护的网络配置。



























nmcli con add type vlan 命令中,ifnamedevvlan.parentidvlan.id 这些参数密切相关但各有特定用途。以下是它们的详细解释和相互关系:

核心参数解析

  1. ifname (接口名称)

    • 作用:指定 VLAN 虚拟接口的操作系统名称
    • 特性
      • 可选参数
      • 默认值:<父接口>.<VLAN ID>(如 eth0.100
      • 命名规则:必须符合 Linux 接口命名规范
    • 示例ifname vlan100
  2. dev (父设备)

    • 作用:指定承载 VLAN 的物理或逻辑接口(vlan.parent 的别名
    • 特性
      • 必需参数
      • vlan.parent 完全等价,可互换使用
      • 必须是系统中已存在的接口
    • 示例dev eth0vlan.parent eth0
  3. vlan.parent (父设备)

    • 作用:与 dev 完全相同,指定 VLAN 的底层承载接口
    • 特性
      • 必需参数
      • dev 参数互斥(只需使用其中一个)
      • 推荐使用更简洁的 dev
    • 示例vlan.parent bond0
  4. id (VLAN ID)

    • 作用:指定 VLAN 标识符(vlan.id 的别名
    • 特性
      • 必需参数
      • vlan.id 完全等价,可互换使用
      • 取值范围:1-4094
    • 示例id 100
  5. vlan.id (VLAN ID)

    • 作用:与 id 完全相同,指定 VLAN 标签值
    • 特性
      • 必需参数
      • id 参数互斥(只需使用其中一个)
      • 推荐使用更简洁的 id
    • 示例vlan.id 200

参数关系总结

参数等效参数必需性作用推荐使用
ifname可选设置虚拟接口名称
devvlan.parent必需指定父接口✓(更简洁)
vlan.parentdev必需指定父接口
idvlan.id必需设置 VLAN ID✓(更简洁)
vlan.idid必需设置 VLAN ID

实际使用中的组合方式

正确组合(推荐)
# 最简洁写法(推荐)
nmcli con add type vlan \
  con-name "VLAN100" \
  ifname vlan100 \  # 可选
  dev eth0 \        # 必需(等价于 vlan.parent)
  id 100            # 必需(等价于 vlan.id)

# 完整参数写法
nmcli con add type vlan \
  con-name "VLAN100" \
  ifname vlan100 \
  vlan.parent eth0 \
  vlan.id 100
错误组合
# 错误:同时使用 dev 和 vlan.parent(冗余)
nmcli con add type vlan dev eth0 vlan.parent eth0 id 100

# 错误:同时使用 id 和 vlan.id(冗余)
nmcli con add type vlan dev eth0 id 100 vlan.id 100

# 错误:缺少父接口(必需)
nmcli con add type vlan ifname vlan100 id 100

# 错误:缺少 VLAN ID(必需)
nmcli con add type vlan ifname vlan100 dev eth0

技术原理图解

+---------------------+
|   物理接口 (eth0)   |
+----------+----------+
           |
           | 携带 VLAN 标签
           ↓
+----------+----------+
|  VLAN 虚拟接口      |
|  - ifname: vlan100  |
|  - vlan.id: 100     |
+---------------------+

创建后的系统表现

使用以下命令创建 VLAN:

nmcli con add type vlan \
  con-name "server-vlan" \
  ifname mgmt_vlan \
  dev enp5s0 \
  id 150

在系统中将看到:

$ ip -d link show mgmt_vlan
6: mgmt_vlan@enp5s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    vlan protocol 802.1Q id 150 <REORDER_HDR>  # VLAN ID 和父接口

最佳实践建议

  1. 参数选择

    • 优先使用 dev 代替 vlan.parent
    • 优先使用 id 代替 vlan.id
    • 始终指定 ifname 以便管理
  2. 命名规范

    ifname vlan_{function}_{id}  # 如 vlan_mgmt_100
    
  3. 复杂拓扑示例(在绑定接口上创建 VLAN):

    # 创建绑定
    nmcli con add type bond con-name bond0 ifname bond0 bond.options mode=802.3ad
    
    # 添加物理接口
    nmcli con add type bond-slave ifname eth1 master bond0
    nmcli con add type bond-slave ifname eth2 master bond0
    
    # 在绑定上创建 VLAN
    nmcli con add type vlan \
      con-name vlan_prod \
      ifname vlan_prod \
      dev bond0 \  # 父接口是绑定设备
      id 200
    
  4. 配置持久性

    • 所有配置自动保存到 /etc/NetworkManager/system-connections/
    • 使用 nmcli con reload 重载配置

理解这些参数的关系后,您可以根据需要选择最简洁或最明确的参数组合来创建 VLAN 配置,确保网络分段既符合技术要求又便于管理维护。



























nmcli con add type vlan 参数详解:ifname, dev, vlan.parent, id, vlan.id

nmcli con add type vlan 命令中,这些参数共同定义了 VLAN 接口的完整配置。以下是它们的详细解释和相互关系:

graph LR
    A[物理网卡] -->|dev/vlan.parent| B[VLAN接口]
    B -->|ifname| C[操作系统标识]
    B -->|id/vlan.id| D[802.1Q标签]

一、参数关系表

参数等价参数作用是否必需示例配置文件字段
ifnameVLAN接口名称必需ifname vlan10interface-name
devvlan.parent父设备指定必需dev eth0vlan.parent
idvlan.idVLAN ID必需id 20vlan.id

二、详细参数解析

1. ifname - VLAN接口名称

  • 功能:定义操作系统中的VLAN接口名称
  • 特点
    • 必须是唯一的系统标识符
    • 用于所有网络命令(ip, ping, ss等)
    • /sys/class/net/中创建对应设备
  • 示例
    ifname vlan-finance
    

2. devvlan.parent - 父设备指定

  • 功能:指定VLAN依赖的底层设备
  • 特点
    • devvlan.parent 的简写形式
    • 两者完全等价,可互换使用
    • 必须是已存在的物理或虚拟接口
  • 示例
    dev eth0        # 简写形式
    vlan.parent eth0 # 完整形式
    

3. idvlan.id - VLAN标识符

  • 功能:设置802.1Q VLAN标签号
  • 特点
    • idvlan.id 的简写形式
    • 两者完全等价,可互换使用
    • 范围:1-4094
  • 示例
    id 30        # 简写形式
    vlan.id 30   # 完整形式
    

三、参数等价性演示

等效配置示例

# 简写形式(推荐)
sudo nmcli con add type vlan \
    con-name "vlan-sales" \
    ifname vlan20 \
    dev eth0 \
    id 20

# 完整形式
sudo nmcli con add type vlan \
    con-name "vlan-sales" \
    ifname vlan20 \
    vlan.parent eth0 \
    vlan.id 20

配置文件中的表示

# /etc/NetworkManager/system-connections/vlan-sales.nmconnection
[connection]
id=vlan-sales
type=vlan
interface-name=vlan20  # ifname

[vlan]
parent=eth0            # dev/vlan.parent
id=20                  # id/vlan.id

四、参数使用指南

1. 推荐使用形式

# 最佳实践(简洁明了)
nmcli con add type vlan \
    ifname <接口名> \
    dev <父设备> \
    id <VLAN ID>

2. 完整参数形式(特殊场景)

# 当需要明确参数含义时使用
nmcli con add type vlan \
    ifname <接口名> \
    vlan.parent <父设备> \
    vlan.id <VLAN ID>

3. 混合使用(不推荐)

# 可行但不推荐(降低可读性)
nmcli con add type vlan \
    ifname vlan30 \
    dev eth1 \         # 简写
    vlan.id 30         # 完整

五、参数依赖关系图

graph TD
    P[物理设备] -->|dev/vlan.parent| V[VLAN接口]
    V -->|ifname| OS[操作系统]
    V -->|id/vlan.id| N[网络数据包]
    C[连接配置] -->|控制| V
    
    classDef required fill:#f9c,stroke:#d33;
    class V,OS,N required;

六、实际配置示例

1. 基础配置

# 使用简写参数
sudo nmcli con add type vlan \
    con-name "vlan-admin" \
    ifname vlan-admin \
    dev enp3s0 \
    id 100

2. 完整参数配置

# 使用完整参数名
sudo nmcli con add type vlan \
    con-name "vlan-guest" \
    ifname vlan-guest \
    vlan.parent wlp4s0 \
    vlan.id 200

3. 在绑定接口上创建VLAN

# 创建绑定
sudo nmcli con add type bond con-name bond0 ifname bond0

# 在绑定上创建VLAN
sudo nmcli con add type vlan \
    ifname vlan-bond \
    dev bond0 \    # 使用绑定接口作为父设备
    id 50

七、查看参数配置

1. 查看连接详情

nmcli -p con show vlan-admin

# 输出包含:
# vlan.parent:                     enp3s0
# vlan.id:                         100
# connection.interface-name:       vlan-admin

2. 查看设备信息

nmcli -p dev show vlan-admin

# 输出包含:
# GENERAL.DEVICE:                  vlan-admin
# VLAN.PARENT:                     enp3s0
# VLAN.ID:                         100

八、参数修改方法

参数是否可修改修改方法
ifnamenmcli con mod <name> ifname <new-name>
dev/vlan.parent需删除后重建
id/vlan.id需删除后重建
# 修改接口名
sudo nmcli con mod "vlan-admin" ifname admin-vlan

# 修改父设备或VLAN ID需要重建
sudo nmcli con delete "vlan-admin"
sudo nmcli con add ... dev enp4s0 id 101

九、常见错误及解决

错误:参数冲突

# 错误:同时使用dev和vlan.parent
sudo nmcli con add type vlan \
    ifname vlan30 \
    dev eth0 \
    vlan.parent eth0 \
    id 30
# Error: property 'vlan.parent' is given multiple times

解决:只使用一种形式(devvlan.parent

错误:缺少必需参数

sudo nmcli con add type vlan ifname vlan40
# Error: VLAN connection needs 'dev' and 'id' properties

解决:补全所有必需参数

十、最佳实践

  1. 参数使用原则

    • 日常使用:ifname, dev, id
    • 脚本/文档:ifname, vlan.parent, vlan.id(更明确)
  2. 命名规范

    # 统一命名方案
    ifname <功能>-v<ID>   # 如 finance-v50
    
  3. 配置验证

    # 创建后立即验证
    ip -d link show <ifname>
    nmcli con show <con-name>
    
  4. 批量配置脚本

    #!/bin/bash
    # 创建多个VLAN
    for i in {10..20}; do
      sudo nmcli con add type vlan \
          ifname vlan$i \
          dev eth0 \
          id $i
    done
    

通过理解这些参数的关系和区别,您可以更灵活高效地使用 nmcli 配置 VLAN 网络,满足不同场景的需求。



























nmcli con add type vlan 命令中,ifnamedevvlan.parentidvlan.id 这几个参数密切相关但作用不同。以下是它们的完整解析和关系说明:


参数关系总览

命令行参数配置文件中属性作用对象功能描述必要性
devvlan.parent物理接口指定承载 VLAN 的底层物理设备必填
idvlan.idVLAN 逻辑指定 VLAN ID (1-4094)必填
ifnameconnection.interface-name虚拟接口指定 VLAN 虚拟接口名称可选
-connection.id连接配置连接配置名称(通过 con-name 设置)必填

详细解释

1. devvlan.parent
  • 命令行参数dev
  • 配置文件属性vlan.parent
  • 作用:指定 VLAN 的底层物理接口
  • 特点
    • 必须是系统中存在的物理接口(如 eth0, enp3s0
    • 在命令行中使用 dev,但在配置文件中存储为 vlan.parent
  • 示例
    nmcli con add type vlan dev eth0 ...
    
    生成配置文件:
    [vlan]
    parent=eth0  # dev 映射为 vlan.parent
    
2. idvlan.id
  • 命令行参数id
  • 配置文件属性vlan.id
  • 作用:定义 802.1Q VLAN 标签号
  • 规则
    • 范围:1-4094
    • 必须与网络设备(交换机)配置匹配
  • 示例
    nmcli con add type vlan id 100 ...
    
    生成配置文件:
    [vlan]
    id=100  # id 映射为 vlan.id
    
3. ifname (无直接配置文件等价属性)
  • 命令行参数ifname
  • 配置文件属性connection.interface-name
  • 作用:指定 VLAN 虚拟接口名称
  • 特点
    • 默认自动生成格式:{父接口}.{VLAN ID}(如 eth0.100
    • 显式命名可提高可读性(如 vlan-finance
  • 示例
    nmcli con add type vlan ifname vlan-office ...
    
    生成配置文件:
    [connection]
    interface-name=vlan-office
    

参数依赖关系

graph LR
    A[物理接口 dev] --> B{VLAN 配置}
    C[VLAN ID id] --> B
    B --> D[创建虚拟接口]
    D --> E{是否指定 ifname?}
    E -->|是| F[使用自定义名称]
    E -->|否| G[生成 父接口.VLANID]
    
    classDef required fill:#f9f,stroke:#333;
    class A,C required;

完整命令示例与配置文件映射

命令:
nmcli con add type vlan \
  con-name office-vlan \    # 连接配置名称 → connection.id
  ifname vlan-office \      # 虚拟接口名 → connection.interface-name
  dev eth0 \               # 父接口 → vlan.parent
  id 100 \                 # VLAN ID → vlan.id
  ipv4.method manual \
  ipv4.addresses 192.168.100.5/24
生成的配置文件 (/etc/NetworkManager/system-connections/office-vlan.nmconnection):
[connection]
id=office-vlan                   # con-name 的值
type=vlan
interface-name=vlan-office       # ifname 的值

[vlan]
parent=eth0                     # dev 的值
id=100                          # id 的值

[ipv4]
address1=192.168.100.5/24
method=manual

常见错误场景

  1. dev 与物理接口不匹配

    # 错误:物理接口 eth1 不存在
    nmcli con add type vlan dev eth1 id 100
    # 报错:Error: Failed to find parent device 'eth1'
    
  2. id 超出范围

    # 错误:VLAN ID 5000 无效
    nmcli con add type vlan dev eth0 id 5000
    # 报错:Error: vlan.id must be between 1 and 4094
    
  3. ifname 冲突

    # 错误:接口名 vlan-office 已存在
    nmcli con add type vlan ifname vlan-office dev eth0 id 100
    # 报错:Interface 'vlan-office' already exists
    

管理技巧

  1. 查看配置映射关系

    nmcli -g connection.interface-name,vlan.parent,vlan.id con show office-vlan
    

    输出

    vlan-office
    eth0
    100
    
  2. 修改参数

    # 更改父接口(更新 dev/vlan.parent)
    nmcli con modify office-vlan dev eth2
    
    # 更改接口名(更新 ifname/connection.interface-name)
    nmcli con modify office-vlan ifname vlan-new
    
  3. 创建临时 VLAN(不保存配置):

    nmcli --nocheck con add type vlan \
      dev eth0 id 100 ifname temp-vlan \
      save no autoconnect no
    

最佳实践

  1. 显式命名三要素

    nmcli con add type vlan \
      con-name <配置名> \
      ifname <接口名> \
      dev <物理接口> \
      id <VLAN ID>
    
  2. 生产环境推荐

    • 始终指定 ifname(避免自动命名冲突)
    • 使用描述性名称(如 vlan100-mgmt
    • con-nameifname 保持一致提高可维护性
  3. 验证命令

    # 创建后立即验证
    nmcli con up office-vlan && \
    ip -br link show vlan-office && \
    nmcli -g vlan.parent,vlan.id con show office-vlan
    



























nmcli con add type vlan 参数深度解析:ifname, dev, vlan.parent, id, vlan.id

在创建 VLAN 连接时,这些参数定义了 VLAN 接口的关键属性。它们之间存在等价关系和依赖关系,下面进行详细解析:

参数关系图

graph TD
    A[父接口] --> B{VLAN ID}
    B --> C[VLAN接口]
    D[dev] -.等价.-> E[vlan.parent]
    F[id] -.等价.-> G[vlan.id]
    E --> A
    G --> B
    B --> C
    C --> H[ifname]

参数详解

1. 父接口指定参数

参数类型作用必需示例
dev主参数指定承载VLAN的物理或逻辑接口dev eth0
vlan.parent属性参数dev的替代写法,功能完全相同vlan.parent bond0

特点

  • devvlan.parent 完全等价,只需使用其中一个
  • 必须是系统中已存在的接口:
    ip link show  # 查看可用接口
    
  • 可以是:
    • 物理接口:eth0, enp3s0
    • 逻辑接口:bond0, br0, vlan100

2. VLAN ID 指定参数

参数类型作用必需范围示例
id主参数指定 802.1Q VLAN 标签值1-4094id 100
vlan.id属性参数id的替代写法,功能完全相同1-4094vlan.id 200

特点

  • idvlan.id 完全等价,只需使用其中一个
  • 特殊值:
    • 0:优先级标记(非标准VLAN)
    • 4095:保留值(禁止使用)
  • 同一父接口上 ID 必须唯一

3. VLAN 接口指定参数

参数类型作用必需示例命名建议
ifname主参数定义 VLAN 虚拟接口名称ifname eth0.100<父接口>.<VLAN ID>

特点

  • 长度 ≤ 15 字符
  • 允许字符:字母、数字、下划线、点号
  • 推荐命名格式:<父接口短名>.<VLAN ID>
    ifname enp3s0.100  # 标准命名
    ifname mgmt_vlan   # 描述性命名
    

参数等价关系

等价组 1:父接口指定

# 以下两种写法完全等价
dev eth0
vlan.parent eth0

等价组 2:VLAN ID 指定

# 以下两种写法完全等价
id 100
vlan.id 100

完整命令示例

标准写法(推荐)

nmcli con add type vlan \
  con-name "VLAN100" \
  ifname eth0.100 \     # VLAN接口名
  dev eth0 \            # 父接口
  id 100 \              # VLAN ID
  ipv4.method manual \
  ipv4.addresses 192.168.100.2/24

替代写法(功能相同)

nmcli con add type vlan \
  con-name "VLAN100" \
  ifname eth0.100 \
  vlan.parent eth0 \    # 替代dev
  vlan.id 100 \         # 替代id
  ipv4.addresses 192.168.100.2/24 \
  ipv4.gateway 192.168.100.1

错误写法示例

# 错误1:重复指定父接口
nmcli con add type vlan \
  dev eth0 \
  vlan.parent eth0  # 冲突!

# 错误2:重复指定VLAN ID
nmcli con add type vlan \
  id 100 \
  vlan.id 100  # 冲突!
  
# 错误3:缺少必需参数
nmcli con add type vlan \
  ifname vlan100 # 缺少父接口和VLAN ID!

参数依赖关系

1. 创建 VLAN 必需的最小参数集

type vlan + ifname + (dev 或 vlan.parent) + (id 或 vlan.id)

2. 典型工作流程

sequenceDiagram
    User->>NetworkManager: nmcli con add type vlan ifname X dev Y id Z
    NetworkManager->>Kernel: 创建vlan接口(X)基于(Y) ID(Z)
    Kernel-->>NetworkManager: 返回创建状态
    NetworkManager->>System: 保存配置到/etc
    System-->>User: 显示连接已创建

高级用法

1. 在绑定接口上创建 VLAN

nmcli con add type vlan \
  ifname bond0.200 \
  dev bond0 \      # 基于绑定接口
  id 200

2. 在网桥上创建 VLAN

nmcli con add type vlan \
  ifname br0.300 \
  vlan.parent br0 \  # 基于网桥
  vlan.id 300

3. 使用 VLAN 标志

nmcli con add type vlan \
  ifname eth0.400 \
  dev eth0 \
  id 400 \
  vlan.flags reorder_hdr  # 启用包头重排

验证与调试

1. 查看创建结果

# 查看连接详情
nmcli -p con show VLAN100

# 检查VLAN关联
ip -d link show eth0.100
# 输出应包含: vlan id 100 

# 查看内核VLAN配置
cat /proc/net/vlan/eth0.100

2. 参数优先级

当使用混合参数时,优先级为:

vlan.parent > dev
vlan.id > id

示例:

# 最终使用 eth1 和 VLAN ID 200
nmcli con add type vlan \
  dev eth0 \
  vlan.parent eth1 \  # 优先级更高
  id 100 \
  vlan.id 200         # 优先级更高

最佳实践

  1. 一致性原则

    # 推荐使用统一风格
    dev + id        # 或
    vlan.parent + vlan.id
    
  2. 命名规范

    # ifname: 物理接口.VLAN ID
    ifname enp3s0.100
    
    # con-name: 功能+VLAN ID
    con-name Servers-VLAN100
    
  3. 生产环境建议

    # 1. 先测试临时连接
    nmcli con add ... save no
    
    # 2. 验证功能
    nmcli con up VLAN-TEST
    
    # 3. 创建永久连接
    nmcli con add ... save yes
    
  4. 备份配置

    # 导出连接设置
    nmcli con export VLAN100 > vlan100-backup.nmconnection
    

通过理解这些参数的关系和区别,您可以更精确地控制 VLAN 接口的创建过程,构建出稳定可靠的虚拟网络拓扑。



























nmcli con add type vlan 命令中,参数 ifnamedevvlan.parentidvlan.id 虽然功能相关,但存在重要区别。以下是它们的详细解析和相互关系:


核心参数关系表

命令行参数等效属性参数配置文件位置功能描述必需性
ifname-[connection] interface-name指定 VLAN 接口名称可选
devvlan.parent[vlan] parent指定父设备必需
idvlan.id[vlan] id指定 VLAN ID必需

详细解析

1. ifname (接口名称)
  • 功能:设置 VLAN 虚拟接口的名称
  • 特点
    • 仅作为命令行参数存在,无等效属性参数
    • 控制配置文件中的 interface-name
    • 省略时自动生成 <父设备>.<VLAN ID> 格式名称
  • 示例
    nmcli con add type vlan ifname mgmt-vlan ...  # 显式设置接口名
    
  • 配置文件体现
    [connection]
    interface-name=mgmt-vlan  # <-- ifname 的值
    
2. devvlan.parent (父设备)
  • 功能:指定承载 VLAN 的底层物理/逻辑接口
  • 关系
    • devvlan.parent 的命令行快捷方式
    • 两者完全等价,作用相同
  • 特点
    • 必需参数(必须二选一)
    • 指向已存在的接口(eth0, bond0 等)
  • 示例
    # 两种写法等效
    nmcli con add type vlan dev eth0 ...       # 快捷方式
    nmcli con add type vlan vlan.parent eth0 ... # 完整属性
    
  • 配置文件体现
    [vlan]
    parent=eth0  # <-- dev/vlan.parent 的值
    
3. idvlan.id (VLAN ID)
  • 功能:定义 802.1Q VLAN 标签号
  • 关系
    • idvlan.id 的命令行快捷方式
    • 两者完全等价,作用相同
  • 特点
    • 必需参数(必须二选一)
    • 取值范围 1-4094
  • 示例
    # 两种写法等效
    nmcli con add type vlan id 100 ...       # 快捷方式
    nmcli con add type vlan vlan.id 100 ... # 完整属性
    
  • 配置文件体现
    [vlan]
    id=100  # <-- id/vlan.id 的值
    

参数组合使用场景

场景 1:基本 VLAN 创建
# 使用快捷参数 (推荐)
nmcli con add type vlan \
    con-name servers-vlan \
    ifname mgmt-net \  # 自定义接口名
    dev bond0 \        # 等效 vlan.parent
    id 100             # 等效 vlan.id

# 使用完整属性
nmcli con add type vlan \
    con-name servers-vlan \
    ifname mgmt-net \
    vlan.parent bond0 \
    vlan.id 100
场景 2:高级配置(带 IP 和标志)
# 混合使用快捷参数和属性
nmcli con add type vlan \
    con-name trunk-vlan \
    ifname trunk.200 \          # 显式接口名
    dev enp5s0f0 \              # 父设备
    id 200 \                    # VLAN ID
    vlan.flags 0x1 \            # 特殊标志(只能用完整属性)
    ipv4.method manual \
    ipv4.addresses 192.168.200.5/24

配置文件实例

命令

nmcli con add type vlan \
    con-name office-vlan \
    ifname office-net \
    dev eno1 \
    id 50

生成的配置文件 (/etc/NetworkManager/system-connections/office-vlan.nmconnection):

[connection]
id=office-vlan
type=vlan
interface-name=office-net  # ifname 的值

[vlan]
parent=eno1  # dev 的值
id=50        # id 的值

[ipv4]
method=auto

[ipv6]
method=ignore

使用注意事项

  1. 参数优先级

    • 同时使用 devvlan.parent 会报错(冲突)
    • 同时使用 idvlan.id 会报错(冲突)
    # 错误示例:重复指定
    nmcli con add type vlan dev eth0 vlan.parent eth1 id 100 vlan.id 200
    
  2. 必需参数规则

    配置项最小有效参数组合
    父设备dev vlan.parent
    VLAN IDid vlan.id
  3. 特殊属性

    • 某些 VLAN 属性只能用完整形式
      # 设置 VLAN 标志 (无快捷参数)
      nmcli con add type vlan \
          vlan.parent eth0 \
          vlan.id 100 \
          vlan.flags 0x1  # 只能使用完整属性
      
  4. 修改配置

    # 修改父设备 (必须用完整属性名)
    nmcli con mod office-vlan vlan.parent eno2
    
    # 修改 VLAN ID (必须用完整属性名)
    nmcli con mod office-vlan vlan.id 60
    
    # 修改接口名
    nmcli con mod office-vlan connection.interface-name "new-name"
    

最佳实践建议

  1. 日常使用推荐

    # 使用快捷参数 (更简洁)
    nmcli con add type vlan \
        con-name prod-vlan \
        ifname prod-net \
        dev bond0 \
        id 300
    
  2. 脚本中使用

    # 使用完整属性 (更明确)
    nmcli con add type vlan \
        con-name "${VLAN_NAME}" \
        connection.interface-name "${IF_NAME}" \
        vlan.parent "${PARENT_DEV}" \
        vlan.id "${VLAN_ID}"
    
  3. 避免自动命名冲突

    # 不推荐:依赖自动命名 (bond0.300)
    nmcli con add type vlan dev bond0 id 300
    
    # 推荐:显式命名
    nmcli con add type vlan ifname prod-vlan dev bond0 id 300
    
  4. 跨平台一致性

    • 在 Ansible/Puppet 等工具中统一使用完整属性:
      # Ansible 示例
      - name: Add VLAN
        nmcli:
          type: vlan
          conn_name: "office-vlan"
          ifname: "office-net"
          vlan.parent: "{{ parent_dev }}"
          vlan.id: 50
      

参数关系图

graph TD
    A[nmcli 命令] --> B[ifname]
    A --> C[dev]
    A --> D[id]
    A --> E[vlan.parent]
    A --> F[vlan.id]
    
    C -. 等价 .-> E
    D -. 等价 .-> F
    
    B --> G[配置文件 interface-name]
    E --> H[配置文件 vlan.parent]
    F --> I[配置文件 vlan.id]
    
    classDef cmd fill:#f9f,stroke:#333;
    classDef equiv fill:#cff,stroke:#333;
    classDef conf fill:#9f9,stroke:#333;
    class A cmd
    class C,D,E,F equiv
    class G,H,I conf

理解这些参数的区别和等价关系,能帮助您更灵活地使用 nmcli

  • 快捷参数 (dev, id) :日常交互更高效
  • 完整属性 (vlan.parent, vlan.id) :脚本和自动化更明确
  • 专用参数 (ifname) :独立存在,控制接口命名



























nmcli con add type vlan 参数终极解析

在创建 VLAN 连接时,这些参数共同定义了 VLAN 的完整配置。以下是这些参数的详细解释、区别和相互关系:

参数关系图

graph TD
    A[dev] -->|简写形式| B[vlan.parent]
    C[id] -->|简写形式| D[vlan.id]
    E[ifname] -->|定义接口名| F[connection.interface-name]
    
    B --> G[VLAN配置]
    D --> G
    F --> G
    
    G --> H[操作系统VLAN接口]
    
    classDef required fill:#f99,stroke:#333;
    classDef optional fill:#9f9,stroke:#333;
    classDef alias fill:#6af,stroke:#333;
    
    class A,B,C,D required;
    class E optional;
    class A,C alias;

参数详解表

参数类型必需配置文件位置功能描述示例值
ifname独立参数[connection] interface-name设置VLAN接口名称mgmt-vlan
dev简写参数[vlan] parent指定父接口的简写形式enp3s0
vlan.parent完整参数[vlan] parent明确指定父接口bond0
id简写参数[vlan] id设置VLAN ID的简写形式100
vlan.id完整参数[vlan] id明确指定VLAN ID200

关键区别与关系

1. ifname (接口名称)

  • 唯一独立参数,不与其他参数冲突
  • 功能:定义VLAN接口在系统中的名称
  • 默认值vlan<ID>(如vlan100
  • 配置文件位置
    [connection]
    interface-name=mgmt-vlan
    

2. dev vs vlan.parent (父设备)

  • 完全等价,只是不同表达形式
  • 关系devvlan.parent的简写
  • 互斥:不能同时使用
  • 功能:指定承载VLAN流量的底层接口
  • 配置文件位置
    [vlan]
    parent=enp3s0
    

3. id vs vlan.id (VLAN ID)

  • 完全等价,只是不同表达形式
  • 关系idvlan.id的简写
  • 互斥:不能同时使用
  • 功能:设置802.1Q VLAN标签号
  • 配置文件位置
    [vlan]
    id=100
    

参数组合规则

允许的组合

graph LR
    A[有效组合] --> B(简写形式: dev + id)
    A --> C(完整形式: vlan.parent + vlan.id)
    A --> D(混合形式: dev + vlan.id 或 vlan.parent + id)
    B --> E[ifname 可选]
    C --> E
    D --> E

禁止的组合

  1. 同时使用devvlan.parent

    # 错误示例
    nmcli con add type vlan dev enp3s0 vlan.parent bond0 id 100
    
  2. 同时使用idvlan.id

    # 错误示例
    nmcli con add type vlan dev enp3s0 id 100 vlan.id 200
    
  3. 缺少父设备或VLAN ID

    # 错误:缺少父设备
    nmcli con add type vlan ifname vlan100 id 100
    
    # 错误:缺少VLAN ID
    nmcli con add type vlan ifname vlan100 dev enp3s0
    

完整配置示例

场景1:使用简写参数(推荐)

sudo nmcli con add type vlan \
  con-name prod-vlan100 \  # 连接名称
  ifname mgmt-vlan \      # 自定义接口名
  dev bond0 \             # 父设备(简写)
  id 100                 # VLAN ID(简写)

场景2:使用完整参数

sudo nmcli con add type vlan \
  con-name backup-vlan \
  ifname backup-interface \
  vlan.parent enp5s0 \    # 父设备(完整)
  vlan.id 200             # VLAN ID(完整)

场景3:混合使用参数

sudo nmcli con add type vlan \
  con-name hybrid-vlan \
  dev br0 \               # 父设备(简写)
  vlan.id 300             # VLAN ID(完整)
  # ifname未指定,自动创建vlan300

生成的配置文件分析

示例1:简写参数配置

命令

nmcli con add type vlan con-name vlan100 ifname mgmt dev enp3s0 id 100

配置文件 (/etc/NetworkManager/system-connections/vlan100.nmconnection):

[connection]
id=vlan100
type=vlan
interface-name=mgmt  # ifname的值

[vlan]
id=100              # id的值
parent=enp3s0       # dev的值

示例2:完整参数配置

命令

nmcli con add type vlan con-name vlan200 vlan.parent bond0 vlan.id 200

配置文件:

[connection]
id=vlan200
type=vlan
interface-name=vlan200  # 自动生成

[vlan]
id=200              # vlan.id的值
parent=bond0        # vlan.parent的值

最佳实践指南

1. 参数选择策略

场景推荐参数组合理由
简单配置dev + id简洁高效
脚本编写vlan.parent + vlan.id明确清晰
嵌套配置dev + vlan.id提高可读性
临时测试dev + id(不带ifname)快速直接

2. 命名规范建议

# 连接名称:<位置>-<功能>-vlan<ID>
con-name dc1-mgmt-vlan100

# 接口名称:<功能>-vlan<ID>
ifname mgmt-vlan100

3. 高级配置技巧

# 创建带额外参数的VLAN
sudo nmcli con add type vlan \
  con-name full-featured-vlan \
  ifname adv-vlan \
  dev enp6s0 \
  id 400 \
  vlan.flags 1 \               # 启用REORDER_HDR
  ethernet.mtu 9000 \          # 巨帧支持
  ipv4.method manual \         # 静态IP
  ipv4.addresses 10.4.0.10/24 \
  ipv4.gateway 10.4.0.1

4. 验证命令

# 检查参数对应关系
nmcli -g connection.interface-name,vlan.parent,vlan.id con show vlan100

# 查看内核VLAN配置
ip -d link show mgmt-vlan

# 检查父接口状态
ethtool -i enp3s0 | grep -E "driver|bus-info"

故障排除速查表

问题现象可能原因解决方案
"vlan.parent: property can't be set..."同时使用dev和vlan.parent只选一种父设备参数
"vlan.id: property can't be set..."同时使用id和vlan.id只选一种VLAN ID参数
"parent: property is missing"缺少父设备参数添加dev或vlan.parent
"id: property is missing"缺少VLAN ID参数添加id或vlan.id
"Device not available"父接口不存在检查设备名是否正确
"VLAN id already used"VLAN ID冲突更换VLAN ID

总结:黄金法则

  1. 必需参数:必须提供父设备(devvlan.parent)和VLAN ID(idvlan.id)
  2. 参数等价
    • devvlan.parent
    • idvlan.id
  3. 互斥规则
    • 不能同时使用devvlan.parent
    • 不能同时使用idvlan.id
  4. 可选参数ifname用于自定义接口名(否则自动生成)
  5. 配置层级
    graph LR
        A[物理接口] --> B[dev/vlan.parent]
        C[VLAN ID] --> D[id/vlan.id]
        B --> E[VLAN配置]
        D --> E
        E --> F[ifname]
        F --> G[操作系统接口]
    

通过理解这些参数的差异和相互关系,您可以高效、准确地创建各种复杂度的VLAN配置,满足从简单网络隔离到复杂云环境的所有需求。



























nmcli con add type vlan 命令中,参数系统有些微妙之处。以下是关于 ifnamedevvlan.parentidvlan.id 的完整解析:


核心参数关系表

参数等效参数作用必需性示例
devvlan.parent指定父接口必需dev=eth0vlan.parent=eth0
vlan.idid指定 VLAN ID必需vlan.id=100id=100
ifname-指定 VLAN 接口名可选ifname=vlan100

详细说明

1. 父接口指定参数(等价)
  • devvlan.parent 完全等效
  • 作用:定义承载 VLAN 的底层接口
  • 必需:是
  • 特点
    • 必须是系统中已存在的接口(物理网卡、绑定接口、网桥等)
    • 实际处理带 VLAN 标签的数据帧
  • 示例
    # 两种写法效果相同
    nmcli con add type vlan dev=eth0 ...
    nmcli con add type vlan vlan.parent=eth0 ...
    
2. VLAN ID 参数(等价)
  • vlan.idid 完全等效
  • 作用:定义 802.1Q VLAN 标签值
  • 必需:是
  • 范围:1-4094
  • 示例
    # 两种写法效果相同
    nmcli con add type vlan vlan.id=100 ...
    nmcli con add type vlan id=100 ...  # 不推荐,易混淆
    

注意:虽然 id 可用,但官方推荐始终使用 vlan.id 以保持明确性

3. VLAN 接口名参数
  • ifname(无等效参数)
  • 作用:定义新建的 VLAN 虚拟接口名称
  • 必需:否(不指定时自动生成)
  • 默认命名规则<父接口>.<VLAN ID>
  • 示例
    # 显式命名
    nmcli con add type vlan ifname=mgmt_net ...
    
    # 自动命名 (如 dev=eth0 + vlan.id=100 → eth0.100)
    nmcli con add type vlan ...
    

参数使用优先级

当同时指定多个等效参数时:

graph TD
    A[命令输入] --> B{dev 和 vlan.parent 同时存在?}
    B -->|是| C[使用最后出现的参数]
    B -->|否| D[使用存在的参数]
    A --> E{id 和 vlan.id 同时存在?}
    E -->|是| F[使用最后出现的参数]
    E -->|否| G[使用存在的参数]

示例冲突处理

# 以下命令:
nmcli con add type vlan dev=eth0 vlan.parent=bond0 vlan.id=100 id=200

# 实际结果:
#   parent = bond0 (最后出现的父接口参数)
#   vlan.id = 200 (最后出现的 VLAN ID 参数)

完整命令示例

最佳实践(推荐写法)
nmcli connection add \
    type vlan \
    con-name "VLAN-Engineering" \
    ifname eng_vlan \         # 自定义接口名
    vlan.parent eth1 \        # 明确父接口
    vlan.id 300               # 明确 VLAN ID
等效写法(不推荐)
nmcli connection add \
    type vlan \
    con-name "VLAN-Sales" \
    dev bond0 \               # 等效 vlan.parent
    id 400                    # 等效 vlan.id (易混淆)

查看配置验证

创建后检查配置:

nmcli connection show "VLAN-Engineering" | egrep -i 'ifname|parent|id'

输出示例

connection.interface-name:          eng_vlan     # ifname
vlan.parent:                        eth1         # dev/vlan.parent
vlan.id:                            300          # vlan.id/id

常见错误与陷阱

  1. 参数混淆

    # 错误:误用 id 作为接口名
    nmcli con add type vlan id=vlan100  # 应改为 ifname=vlan100
    
  2. 重复参数冲突

    # 危险:父接口冲突
    nmcli con add type vlan dev=eth0 vlan.parent=eth1 ...
    # 最终使用 eth1 (最后指定的参数)
    
  3. 无效 VLAN ID

    # 错误:ID 超出范围
    nmcli con add type vlan vlan.id=5000
    # Error: vlan.id must be between 1-4094
    
  4. 缺少必需参数

    # 错误:缺少父接口
    nmcli con add type vlan vlan.id=100
    # Error: vlan.parent or dev is required
    

使用建议

  1. 始终明确参数

    • 使用 vlan.parent 代替 dev
    • 使用 vlan.id 代替 id
    • 显式指定 ifname
  2. 复杂环境示例(VLAN over 绑定接口):

    nmcli connection add \
        type vlan \
        con-name "VLAN-Over-Bond" \
        ifname bond0.500 \
        vlan.parent bond0 \        # 父接口是绑定接口
        vlan.id 500
    
  3. 配置持久化: 所有配置自动保存到:

    /etc/NetworkManager/system-connections/VLAN-Engineering.nmconnection
    

通过精确理解这些参数的关系和优先级,可以避免配置冲突,确保 VLAN 配置的准确性和可维护性。



























nmcli con add type vlan 命令中,ifnamedevvlan.id 是三个关键参数,它们共同定义了 VLAN 连接的配置。以下是它们的详细解释和区别:


核心参数说明

参数作用是否必需示例值
dev指定父接口(承载 VLAN 的物理/逻辑设备)必需dev=eth0
vlan.id指定 VLAN ID(802.1Q 标签)必需vlan.id=100
ifname指定 VLAN 接口名称(新建的虚拟接口)可选ifname=vlan100

详细解析

1. dev(父设备)
  • 作用:指定 VLAN 流量实际通过的底层物理或逻辑接口
  • 必需性必须提供
  • 特点
    • 必须是系统中已存在的接口(如 eth0, bond0, br0
    • 承载所有带 VLAN 标签的流量
    • 物理接口需支持 VLAN 功能
  • 示例
    dev=eth0 表示在物理网卡 eth0 上创建 VLAN
2. vlan.id(VLAN 标识符)
  • 作用:定义 802.1Q VLAN 标签值(数据帧中的 VLAN ID)
  • 必需性必须提供
  • 特点
    • 取值范围:1-4094
    • 决定数据帧的 VLAN 归属
    • 不同 VLAN ID 在相同 dev 上创建隔离的网络
  • 示例
    vlan.id=100 表示创建标签为 100 的 VLAN
3. ifname(接口名称)
  • 作用:指定新建的虚拟 VLAN 接口的名称
  • 必需性可选(不指定时自动生成)
  • 特点
    • 默认命名规则:<父接口>.<VLAN ID>(如 eth0.100
    • 可自定义(如 mgmt_network
    • 名称必须在系统中唯一
  • 示例
    ifname=servers_vlan 会创建名为 servers_vlan 的接口

三者的关系

graph LR
    A[物理设备 eth0] -->|dev 参数| B(VLAN 配置)
    C[VLAN ID 100] -->|vlan.id 参数| B
    B --> D[新接口 vlan100]
    D -->|ifname 参数| E(系统可见的 VLAN 接口)
  1. dev 确定流量从哪个物理/逻辑接口进出
  2. vlan.id 确定数据帧的 VLAN 标签
  3. ifname 确定操作系统中该 VLAN 的表示名称

完整命令示例

示例 1:最小化配置(自动命名)
nmcli con add type vlan \
    con-name "VLAN100" \
    dev eth0 \           # 必需:父接口
    vlan.id 100          # 必需:VLAN ID

结果接口名:eth0.100

示例 2:自定义接口名
nmcli con add type vlan \
    con-name "Servers-Network" \
    ifname srv_net \     # 自定义接口名
    dev bond0 \          # 在绑定接口上创建
    vlan.id 200          # VLAN 标签

结果接口名:srv_net

示例 3:复杂场景(VLAN over Bridge)
nmcli con add type vlan \
    con-name "VM-VLAN" \
    ifname vm_vlan300 \  # 自定义名称
    dev br-vmhost \      # 父设备是网桥
    vlan.id 300          # VLAN 标签

关键注意事项

  1. dev 必须存在
    执行命令前,父接口需已激活(如 eth0 必须存在且 UP)

  2. vlan.id 冲突检测
    同一父接口上不能创建重复 VLAN ID

  3. ifname 命名规则

    • 避免使用特殊字符(只允许 a-z, 0-9, -, _
    • 不能与现有接口重名
    • 建议命名包含 VLAN ID(如 vlan100
  4. 查看配置

    # 查看创建结果
    nmcli con show "VLAN100" | egrep 'dev|ifname|vlan.id'
    
    # 输出示例
    connection.interface-name:        vlan100  # ifname
    ethernet.mac-address:             -- 
    vlan.parent:                      eth0    # dev
    vlan.id:                          100     # vlan.id
    

常见错误场景

错误原因解决方案
Error: 'dev' not specified缺少父接口参数添加 dev=<接口名>
Error: vlan.id is required缺少 VLAN ID添加 vlan.id=<1-4094>
Error: interface name 'eth0' existsifname 与现有接口冲突更换自定义名称
Error: device 'eth99' not availabledev 指定的父接口不存在检查接口名是否正确

正确理解这三个参数的关系,是配置 VLAN 网络的基础。在实际应用中:

  • 数据中心网络:常用 dev=bond0(聚合链路)
  • 虚拟化环境:常用 dev=br0(网桥)
  • 管理网络:推荐自定义 ifname(如 mgmt_vlan



























nmcli con add type vlan 参数深度解析:ifname, dev, vlan.parent, id, vlan.id

在创建 VLAN 连接时,这些参数相互关联但作用不同,理解它们的区别和关系对于正确配置 VLAN 至关重要:

参数关系图谱

graph LR
    A[dev] --> B(vlan.parent)
    C[id] --> D(vlan.id)
    E[ifname] --> F(connection.interface-name)
    
    B --> G[VLAN配置]
    D --> G
    F --> G
    
    G --> H[操作系统VLAN接口]
    
    classDef required fill:#f99,stroke:#333;
    classDef optional fill:#9f9,stroke:#333;
    classDef alias fill:#6af,stroke:#333;
    
    class A,B,C,D required;
    class E optional;
    class A,C alias;

参数详解

1. ifname (接口名称)

  • 作用: 指定 VLAN 接口在操作系统中的名称
  • 配置文件位置: [connection] 部分的 interface-name
  • 特点:
    • 可选参数,不指定时自动生成 vlan<ID> (如 vlan100)
    • 仅影响接口名称,不影响 VLAN 功能
    • 必须唯一,不能与其他接口冲突
  • 示例:
    ifname mgmt-vlan  # 自定义接口名
    

2. dev (父设备 - 简写)

  • 作用: 指定 VLAN 的父接口的简写形式
  • 等效参数: vlan.parent
  • 特点:
    • vlan.parent 功能完全相同
    • 更简洁的命令行写法
  • 示例:
    dev enp3s0  # 等价于 vlan.parent enp3s0
    

3. vlan.parent (父设备 - 完整)

  • 作用: 明确指定 VLAN 的父接口
  • 配置文件位置: [vlan] 部分的 parent
  • 要求: 必须参数
  • 特点:
    • 必须是已存在的物理或逻辑接口
    • 支持的类型: 物理网卡、bond、bridge、其他 VLAN
  • 示例:
    vlan.parent bond0  # 基于绑定接口
    

4. id (VLAN ID - 简写)

  • 作用: 指定 VLAN ID 的简写形式
  • 等效参数: vlan.id
  • 特点:
    • vlan.id 功能完全相同
    • 更简洁的命令行写法
  • 示例:
    id 100  # 等价于 vlan.id 100
    

5. vlan.id (VLAN ID - 完整)

  • 作用: 明确指定 802.1Q VLAN 标签号
  • 配置文件位置: [vlan] 部分的 id
  • 要求: 必须参数
  • 特点:
    • 取值范围: 1-4094
    • 同一父接口上必须唯一
    • 必须与网络设备配置匹配
  • 示例:
    vlan.id 200  # 设置 VLAN ID 为 200
    

参数等价关系

简写参数完整参数配置文件位置是否必需
devvlan.parent[vlan] parent=
idvlan.id[vlan] id=
ifname-[connection] interface-name=

典型用法示例

1. 完整参数写法

sudo nmcli con add type vlan \
  con-name vlan100 \
  ifname vlan-mgmt \
  vlan.parent enp3s0 \
  vlan.id 100

2. 简写参数写法 (推荐)

sudo nmcli con add type vlan \
  con-name vlan100 \
  ifname vlan-mgmt \
  dev enp3s0 \  # 简写等价于 vlan.parent
  id 100        # 简写等价于 vlan.id

3. 最小化配置 (使用自动命名)

sudo nmcli con add type vlan \
  con-name vlan100 \
  dev enp3s0 \
  id 100
# 自动创建接口 vlan100

配置文件解析

生成的配置文件 /etc/NetworkManager/system-connections/vlan100.nmconnection:

[connection]
id=vlan100
type=vlan
interface-name=vlan-mgmt  # ifname 的值

[vlan]
id=100                   # id/vlan.id 的值
parent=enp3s0            # dev/vlan.parent 的值

参数使用规则

  1. 互斥关系:

    • devvlan.parent 不能同时使用 (二选一)
    • idvlan.id 不能同时使用 (二选一)
  2. 依赖关系:

    • ifname 依赖 id/vlan.id 的默认命名机制
    • 所有参数都依赖父接口 (dev/vlan.parent) 存在
  3. 优先级:

    graph TB
        A[命令行参数] --> B{参数冲突?}
        B -->|是| C[使用显式参数]
        B -->|否| D[使用任意形式]
        C --> E[优先完整参数 vlan.parent/vlan.id]
    

高级用法

1. 动态父接口 (按 MAC 地址)

sudo nmcli con add type vlan \
  ifname dyn-vlan \
  dev 00:11:22:33:44:55 \  # 父接口MAC地址
  id 300

2. 嵌套 VLAN (QinQ)

# 第一层 VLAN
sudo nmcli con add type vlan \
  ifname qinq-base \
  dev enp3s0 \
  id 100

# 第二层 VLAN
sudo nmcli con add type vlan \
  ifname qinq-inner \
  dev qinq-base \  # 基于第一层VLAN
  id 200

3. VLAN 标志配置

sudo nmcli con add type vlan \
  dev enp3s0 \
  id 100 \
  vlan.flags 1  # 启用REORDER_HDR

常见错误处理

错误 1: 参数冲突

# 错误:同时使用 dev 和 vlan.parent
sudo nmcli con add type vlan dev enp3s0 vlan.parent bond0 id 100

# 错误信息:
# Error: vlan.parent: property can't be set at the same time as 'dev'

解决:选择一种形式(推荐简写 dev

错误 2: 缺少必需参数

# 错误:缺少父接口
sudo nmcli con add type vlan ifname vlan100 id 100

# 错误信息:
# Error: vlan.parent: property is missing

解决:添加 devvlan.parent

错误 3: VLAN ID 冲突

# 错误:同一父接口重复 ID
sudo nmcli con add type vlan dev enp3s0 id 100  # 已存在

# 错误信息:
# Error: Connection activation failed: Device vlan100 not available

解决:使用不同的 VLAN ID 或删除现有配置

最佳实践

  1. 命名规范:

    # 连接名: <位置>-vlan<ID>
    con-name server1-vlan100
    
    # 接口名: <功能>-vlan
    ifname mgmt-vlan
    
  2. 配置优先级:

    # 推荐简写形式
    nmcli con add type vlan dev enp3s0 id 100
    
    # 需要明确时使用完整形式
    nmcli con add type vlan vlan.parent bond0 vlan.id 200
    
  3. 验证命令:

    # 检查参数对应关系
    nmcli -g connection.interface-name,vlan.parent,vlan.id con show vlan100
    
  4. 批量操作脚本:

    #!/bin/bash
    PARENT_IF="bond0"
    BASE_VLAN=100
    COUNT=10
    
    for i in $(seq 1 $COUNT); do
      VLAN_ID=$((BASE_VLAN + i))
      nmcli con add type vlan \
        con-name vlan-$VLAN_ID \
        ifname vlan$VLAN_ID \
        dev $PARENT_IF \
        id $VLAN_ID
    done
    

总结表

参数类型命令行简写命令行完整配置文件位置必需
接口名称ifname-[connection] interface-name
父设备devvlan.parent[vlan] parent
VLAN IDidvlan.id[vlan] id

黄金法则:

  1. 父接口 (dev/vlan.parent) 和 VLAN ID (id/vlan.id) 是必需参数
  2. devvlan.parent 的简写,功能相同
  3. idvlan.id 的简写,功能相同
  4. ifname 是可选参数,用于自定义接口名称

通过合理组合这些参数,您可以精确控制 VLAN 的创建方式,满足从简单网络隔离到复杂云计算环境的各种需求。



























nmcli con add type vlan 参数深度解析:ifnamedevid

在创建 VLAN 连接时,ifnamedevid 是三个核心参数,它们共同定义了 VLAN 接口的关键属性。以下是详细解析:

参数关系图

graph TD
    A[dev 父接口] --> B[id VLAN ID]
    B --> C[ifname VLAN接口]
    C --> D[系统网络栈]

1. dev (父设备)

  • 作用:指定 VLAN 流量承载的底层物理或逻辑接口
  • 特点
    • 必须是已存在的网络接口
    • 可以是:物理网卡、绑定接口、网桥等
    • 决定 VLAN 流量的物理路径
  • 示例
    dev eth0       # 基于物理网卡
    dev bond0      # 基于绑定接口
    dev br0        # 基于网桥接口
    
  • 验证存在
    ip link show eth0  # 确认接口存在
    

2. id (VLAN ID)

  • 作用:定义 802.1Q VLAN 标签的数值标识
  • 特点
    • 必需参数,范围 1-4094
    • 决定数据包的 VLAN 标签值
    • 同一父接口上 ID 必须唯一
  • 示例
    id 100     # 标准VLAN
    id 2000    # 扩展VLAN
    
  • 特殊值
    • id 0:优先级标记(非标准VLAN)
    • id 4095:保留值(禁止使用)

3. ifname (接口名称)

  • 作用:指定创建的 VLAN 虚拟接口名称
  • 特点
    • 将在系统中创建的设备名称
    • 推荐命名:<父接口>.<vlan_id>
    • 必须全局唯一
  • 示例
    ifname eth0.100    # 传统命名
    ifname vlan100     # 描述性命名
    ifname mgmt_vlan   # 功能命名
    
  • 命名规则
    • 长度 ≤ 15 字符
    • 允许:字母、数字、下划线、点号
    • 禁止:空格、特殊字符

三参数协同工作原理

创建过程

  1. 系统检查 dev 指定的父接口是否存在
  2. 验证 id 在有效范围且未被占用
  3. 创建名为 ifname 的新网络接口
  4. 将新接口与父接口和 VLAN ID 关联

数据流路径

sequenceDiagram
    应用->>+ifname: 发送数据包
    ifname->>+dev: 添加VLAN标签(id)
    dev->>+物理网络: 传输带标签帧
    物理网络-->>-dev: 接收带标签帧
    dev-->>-ifname: 过滤并转发匹配id的帧
    ifname-->>-应用: 传递解包数据

完整命令示例

基础配置

nmcli con add type vlan \
  con-name "VLAN100" \    # 连接名称(管理用)
  ifname eth0.100 \       # 创建的接口名
  dev eth0 \              # 基于物理接口
  id 100 \                # VLAN ID
  ipv4.method manual \
  ipv4.addresses 192.168.100.2/24

高级配置

# 在绑定接口上创建VLAN
nmcli con add type vlan \
  ifname bond0.200 \      # 接口名
  dev bond0 \             # 基于绑定
  id 200 \                # VLAN ID
  vlan.flags reorder_hdr  # 启用包头重排

# 在网桥上创建VLAN
nmcli con add type vlan \
  ifname br0.300 \        # 接口名
  dev br0 \               # 基于网桥
  id 300 \                # VLAN ID
  ipv6.method auto        # 启用IPv6自动配置

常见错误及解决方案

错误现象原因解决方案
Error: invalid devicedev 指定接口不存在ip link 确认接口可用
Error: vlan id is invalidid 超出 1-4094 范围使用有效 VLAN ID
Error: connection existsifnamecon-name 重复使用唯一名称
VLAN 流量不通交换机未配置 trunk 端口确保交换机端口允许该 VLAN ID
无法获取 IPVLAN 接口未激活执行 nmcli con up VLAN100

验证命令

# 查看VLAN接口详情
ip -d link show eth0.100
# 输出关键字段:vlan protocol 802.1Q id 100 

# 检查VLAN配置
cat /proc/net/vlan/eth0.100

# 查看NetworkManager连接
nmcli -p con show VLAN100

最佳实践

  1. 命名规范

    # 推荐格式
    ifname <父接口短名>.<vlan_id>    # 如 eth0.100
    con-name vlan<id>-<用途>         # 如 vlan100-mgmt
    
  2. ID 规划原则

    • 1:默认 VLAN(通常保留)
    • 2-100:基础设施 VLAN
    • 101-500:用户 VLAN
    • 501-1000:服务器 VLAN
    • 1001-4094:特殊应用 VLAN
  3. 父接口选择

    # 高可用场景:基于绑定接口
    dev bond0
    
    # 虚拟化场景:基于网桥
    dev br0
    
    # 物理隔离场景:直连物理网卡
    dev eth1
    
  4. 备份配置

    # 导出连接配置
    nmcli con export VLAN100 > vlan100-backup.nmconnection
    
    # 恢复配置
    nmcli con import type vlan file vlan100-backup.nmconnection
    

通过正确使用 ifnamedevid 这三个参数,您可以精确控制 VLAN 接口的创建和行为,构建出满足各种复杂网络需求的虚拟网络拓扑。



























nmcli con add type vlan 中的 ifnamedevid 详解

nmcli con add type vlan 命令中,ifnamedevid 是三个关键参数,它们共同定义了 VLAN 接口的核心属性。以下是它们的详细解释和相互关系:

graph TD
    A[物理网卡 eth0] -->|dev 指定父设备| B[VLAN 接口]
    B -->|id 定义 VLAN ID| C[802.1Q 标签]
    B -->|ifname 标识自身| D[操作系统网络栈]

一、三参数对比表

参数作用是否必需取值范围配置层级示例
ifname定义 VLAN 接口在系统中的名称必需唯一字符串操作系统接口层ifname vlan10
dev指定 VLAN 所基于的物理设备必需已存在的接口名硬件依赖层dev eth0
id设置 VLAN 的 802.1Q 标签号必需1-4094网络协议层id 20

二、参数详解

1. ifname - VLAN 接口名称

  • 功能:定义操作系统识别的 VLAN 接口名称
  • 特点
    • /sys/class/net/ 中创建对应的设备节点
    • 用于所有网络操作命令(ip addrping 等)
    • 必须唯一,不能与现有接口冲突
  • 示例
    ifname vlan-finance  # 创建名为 "vlan-finance" 的接口
    

2. dev - 父设备指定

  • 功能:指定 VLAN 流量承载的底层设备
  • 特点
    • 可以是物理网卡(如 eth0)或虚拟接口(如 bond0
    • 设备必须已存在且可用
    • 确定数据包的物理出口
  • 示例
    dev enp3s0  # 基于物理网卡 enp3s0
    

3. id - VLAN 标识符

  • 功能:设置 802.1Q VLAN 标签号
  • 特点
    • 范围 1-4094(0 和 4095 为保留值)
    • 同一父设备上必须唯一
    • 决定数据包在交换机上的 VLAN 归属
  • 示例
    id 30  # 设置 VLAN ID 为 30
    

三、三参数协同工作示例

基本配置

sudo nmcli con add type vlan \
    con-name "vlan-accounting" \  # 连接名称(逻辑标识)
    ifname vlan-acct \           # VLAN 接口名称
    dev eth0 \                   # 基于物理网卡 eth0
    id 40                        # VLAN ID

验证配置关系

# 查看 VLAN 接口详情
ip -d link show vlan-acct

# 输出示例:
# 10: vlan-acct@eth0: <BROADCAST,MULTICAST> ...
#     vlan protocol 802.1Q id 40 <REORDER_HDR> 
#     link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff

四、参数关系图

graph LR
    P[物理设备 eth0] -->|dev 指定| V[VLAN 接口]
    V -->|ifname 命名| OS[操作系统]
    V -->|id 标记| N[网络数据包]
    
    classDef physical fill:#9cf,stroke:#333;
    classDef virtual fill:#f9c,stroke:#333;
    class P physical;
    class V,N virtual;

五、高级配置场景

1. 在绑定接口上创建 VLAN

# 先创建绑定
sudo nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=802.3ad"

# 在绑定上创建 VLAN
sudo nmcli con add type vlan \
    ifname vlan-bond \  # VLAN 接口名
    dev bond0 \         # 父设备是绑定接口
    id 50               # VLAN ID

2. 多 VLAN 配置

# 在同一个物理接口上创建多个 VLAN
for vlan_id in {10,20,30}; do
  sudo nmcli con add type vlan \
      ifname vlan${vlan_id} \
      dev eth0 \
      id ${vlan_id}
done

3. 自定义命名方案

# 按部门+ID命名 VLAN 接口
sudo nmcli con add type vlan \
    ifname finance-v50 \  # 自定义接口名
    dev eth0 \
    id 50

六、常见错误及解决

错误 1:缺少必需参数

sudo nmcli con add type vlan ifname vlan30
# Error: VLAN connection needs 'dev' and 'id' properties

解决:必须同时提供 ifnamedevid

错误 2:VLAN ID 冲突

sudo nmcli con add type vlan ifname vlanA dev eth0 id 40
# Error: VLAN connection 'vlanA' is invalid: VLAN id 40 already in use

解决:同一父设备上使用不同的 VLAN ID

错误 3:接口名冲突

sudo nmcli con add type vlan ifname eth0 dev eth1 id 60
# Error: interface name 'eth0' already in use

解决:使用唯一的接口名

七、三参数管理技巧

1. 查看参数关系

nmcli -p -f general,device,vlan con show vlan-acct

# 输出:
# ========================================
# Connection profile details (vlan-accounting)
# ========================================
# connection.interface:            vlan-acct   <-- ifname
# vlan.parent:                     eth0        <-- dev
# vlan.id:                         40          <-- id

2. 修改参数

参数能否修改方法
ifname可以nmcli con mod <name> ifname <new-name>
dev不能需删除后重建
id不能需删除后重建
# 修改 ifname
sudo nmcli con mod "vlan-accounting" ifname acct-vlan40

# 修改 dev 或 id 需要重建
sudo nmcli con delete "vlan-accounting"
sudo nmcli con add ... dev eth1 id 45  # 使用新参数

八、实际应用场景

场景 1:服务器网络隔离

# 管理 VLAN
sudo nmcli con add type vlan ifname mgmt dev eno1 id 100

# 数据 VLAN
sudo nmcli con add type vlan ifname data dev eno1 id 200

# 存储 VLAN
sudo nmcli con add type vlan ifname storage dev eno1 id 300

场景 2:云主机网络配置

# 在虚拟网卡上创建租户 VLAN
sudo nmcli con add type vlan \
    ifname tenant-vlan123 \
    dev vnet0 \
    id 123

场景 3:网络设备模拟

# 创建多个模拟设备接口
for i in {1..5}; do
  sudo nmcli con add type vlan \
      ifname switch${i} \
      dev eth0 \
      id $((100+i))
done

九、最佳实践

  1. 命名规范

    # 统一命名方案
    ifname <功能>-v<ID>   # 如 finance-v50
    
  2. ID 管理原则

    • 管理 VLAN:ID 100-199
    • 用户 VLAN:ID 200-299
    • 服务 VLAN:ID 300-399
  3. 配置顺序

    graph TB
        A[激活父设备] --> B[创建VLAN]
        B --> C[配置IP]
    
  4. 备份与恢复

    # 导出配置
    nmcli con export "vlan-accounting" > vlan-acct.nmconnection
    
    # 导入配置
    nmcli con import vlan-acct.nmconnection
    

十、三参数总结

参数类比关键作用
ifname姓名接口在系统中的身份标识
dev父母VLAN 的物理/逻辑来源
id身份证号VLAN 在网络中的唯一标识

这三个参数共同定义了 VLAN 接口的完整身份:

  • dev 决定了 VLAN 从哪里来(物理基础)
  • id 决定了 VLAN 是谁(网络标识)
  • ifname 决定了 VLAN 如何被识别(系统名称)

正确理解和配置这三个参数,是成功创建和管理 VLAN 接口的关键。



























nmcli con add type vlanifnamedevid 的深度解析

在创建 VLAN 连接时,ifnamedevid 是三个必需且相互关联的关键参数,它们共同定义了 VLAN 接口的特性和行为。下面从多个维度详细解析这三个参数的区别与协作关系:

一、核心功能对比

参数作用取值范围配置位置必需性
ifname定义 VLAN 接口的系统名称唯一字符串 (如 vlan10)系统网络接口必需
dev指定 VLAN 的底层父设备已存在接口名 (如 eth0)配置文件必需
id设置 VLAN 标识号1-4094802.1Q 帧头必需
graph TD
    A[物理设备 dev=eth0] --> B[创建 VLAN 接口]
    B --> C[ifname=vlan10]
    B --> D[id=10]
    C --> E[系统可见接口]
    D --> F[数据包 VLAN 标记]
    
    style A fill:#f9f,stroke:#333
    style C fill:#bbf,stroke:#333
    style D fill:#9f9,stroke:#333
    style E fill:#f96,stroke:#333
    style F fill:#0f0,stroke:#333

二、参数详解与技术实现

1. ifname - 接口名称

  • 功能:定义新创建的 VLAN 虚拟接口在系统中的名称
  • 技术实现
    • /sys/class/net/ 下创建对应目录
    • 通过 ip link 命令可见
  • 约束
    • 必须是系统中唯一的名称
    • 建议格式:vlan<ID> (如 vlan10)
  • 示例
    ifname office-vlan  # 创建名为 "office-vlan" 的接口
    

2. dev - 父设备

  • 功能:指定 VLAN 流量承载的底层设备
  • 技术实现
    • 在配置文件中存储为 vlan.parent 属性
    • 内核通过此设备发送/接收 VLAN 标记帧
  • 支持类型
    • 物理网卡 (如 eth0)
    • 绑定接口 (如 bond0)
    • 团队接口 (如 team0)
  • 示例
    dev bond0  # 使用绑定接口作为父设备
    

3. id - VLAN ID

  • 功能:定义 802.1Q VLAN 标记值
  • 技术实现
    • 在数据链路层添加 VLAN 标签 (4字节)
    • 格式:0x8100 (TPID) + PCP (3位) + DEI (1位) + VID (12位)
  • 网络要求
    • 交换机端口必须配置为 Trunk 模式
    • 必须允许该 VLAN ID 通过
  • 示例
    id 100  # 使用 VLAN ID 100
    

三、参数间协同关系

1. 创建流程

sequenceDiagram
    participant Admin as 管理员
    participant NM as NetworkManager
    participant Kernel as Linux 内核
    
    Admin->>NM: nmcli con add type vlan<br>ifname=vlan10 dev=eth0 id=10
    NM->>Kernel: 创建 vlan10 接口 (ifname)
    Kernel->>NM: 确认接口创建
    NM->>Kernel: 绑定到 eth0 (dev)
    Kernel->>NM: 确认父设备
    NM->>Kernel: 设置 VLAN ID=10 (id)
    Kernel->>NM: 配置生效
    NM->>Admin: 返回成功

2. 数据包处理流程

[发往 VLAN10 的数据包]
1. 应用层 -> vlan10 接口 (ifname)
2. 内核添加 VLAN 标签 (id=10)
3. 通过 eth0 (dev) 发送到物理网络
4. 交换机读取 VLAN ID (id=10)
5. 转发到相同 VLAN 的端口

3. 配置文件示例

# /etc/NetworkManager/system-connections/vlan10.nmconnection
[connection]
id=vlan10
type=vlan
interface-name=vlan10  # ifname 的值

[vlan]
parent=eth0  # dev 的值
id=10        # id 的值

四、完整命令示例

基础配置

sudo nmcli con add type vlan \
    con-name "vlan10-office" \  # 连接名称
    ifname vlan10 \             # 接口名称
    dev eth0 \                  # 父设备
    id 10                       # VLAN ID

高级配置

# 基于绑定接口创建 VLAN
sudo nmcli con add type vlan \
    ifname server-vlan \
    dev bond0 \                # 使用绑定接口
    id 100 \
    vlan.flags 1 \             # 启用 reorder_hdr
    mtu 9000                   # 设置巨帧

五、验证命令

1. 验证 ifname

ip -d link show vlan10
# 输出片段:
10: vlan10@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
    vlan protocol 802.1Q id 10 <REORDER_HDR> 

2. 验证 dev

cat /proc/net/vlan/vlan10
# 输出:
VLAN Dev name    | vlan10
Parent device    | eth0          # dev 的值

3. 验证 id

sudo tcpdump -i eth0 -e -nn vlan
# 输出:
00:11:22:33:44:55 > 00:aa:bb:cc:dd:ee, ethertype 802.1Q (0x8100), vlan 10, # id=10

六、常见错误场景

错误1:ifname 冲突

Error: Device 'vlan10' already exists

解决方案

# 1. 检查现有接口
ip link show

# 2. 使用新名称
sudo nmcli ... ifname vlan-office

错误2:无效 dev

Error: invalid device 'eth99' specified

解决方案

# 1. 查看可用设备
nmcli dev status

# 2. 使用正确设备名
sudo nmcli ... dev eth0

错误3:非法 id

Error: invalid vlan id '5000'

解决方案

# 使用有效 VLAN ID (1-4094)
sudo nmcli ... id 100

错误4:父设备不支持 VLAN

# 无线网卡常见错误
Error: Failed to set VLAN flags on device 'wlan0'

解决方案

# 1. 使用有线网卡
sudo nmcli ... dev eth0

# 2. 或使用 macvlan 替代方案
sudo ip link add macvlan0 link wlan0 type macvlan mode bridge

七、高级应用场景

场景1:同一父设备多 VLAN

# 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  # 相同 dev

场景2:QinQ 嵌套 VLAN

# 第一层 VLAN
sudo nmcli con add type vlan ifname qinq_base dev eth0 id 100

# 第二层 VLAN
sudo nmcli con add type vlan ifname customer1 dev qinq_base id 200

场景3:高可用 VLAN

# 创建绑定
sudo nmcli con add type bond ifname bond0 mode active-backup

# 添加从属接口
sudo nmcli con add type bond-slave ifname eth0 master bond0
sudo nmcli con add type bond-slave ifname eth1 master bond0

# 创建 VLAN
sudo nmcli con add type vlan ifname vlan-ha dev bond0 id 50

八、最佳实践

  1. 命名规范

    # 格式:类型-用途-ID
    ifname vlan-office-10
    con-name vlan-office-connection
    
  2. ID 管理原则

    • 服务器访问 VLAN:100-199
    • 用户网络 VLAN:200-299
    • 管理网络 VLAN:400-499
  3. 冗余设计

    # 使用绑定接口作为父设备
    dev bond0  # 替代单个 eth0
    
  4. 配置文档化

    # 添加描述信息
    sudo nmcli con mod vlan10 \
         +connection.interface-name "Office VLAN" \
         +connection.permissions "admin"
    
  5. 批量创建脚本

    #!/bin/bash
    for vid in {10,20,30}; do
      sudo nmcli con add type vlan \
          ifname vlan$vid \
          dev bond0 \
          id $vid
    done
    

九、总结

  1. ifname = "我是谁"
    (定义新 VLAN 接口在系统中的身份)

  2. dev = "我的根基"
    (指定 VLAN 依赖的物理/逻辑父设备)

  3. id = "我的标签"
    (设置 VLAN 在数据帧中的标识符)

graph LR
    A[物理设备 dev] --> B[创建逻辑接口]
    B --> C[ifname 命名接口]
    B --> D[id 标记流量]
    C --> E[系统通信端点]
    D --> F[网络识别标识]
    
    style A fill:#f9f,stroke:#333
    style C fill:#bbf,stroke:#333
    style D fill:#9f9,stroke:#333
    style E fill:#f96,stroke:#333
    style F fill:#0f0,stroke:#333

这三个参数共同构成了 VLAN 连接的黄金三角

  • 缺少任何一个都会导致配置失败
  • 三者必须逻辑一致
  • 共同决定了 VLAN 在系统和网络中的行为

正确理解和使用这些参数,可以高效构建灵活、可靠的 VLAN 网络架构。



























nmcli con add type vlan 中的 ifnamedevid 详解

这三个参数在创建 VLAN 连接时各司其职,共同定义了 VLAN 接口的关键特性。下面我将详细解析它们的区别、作用和最佳实践。

核心参数对比表

参数作用是否必需取值范围默认行为示例
dev指定父接口(物理或逻辑设备)必需已存在的接口名称无默认值dev eth0
id指定 VLAN ID必需1-4094无默认值vlan.id 100
ifname指定 VLAN 接口名称可选唯一接口名自动生成 dev.id 格式ifname vlan100

深度解析

1. dev - 父接口指定

  • 作用:定义 VLAN 的物理承载接口
  • 技术原理
    • 在 Linux 内核中创建 vlan 子设备
    • 对应内核数据结构 struct net_devicereal_dev 字段
  • 使用要点
    • 必须是已存在的物理或逻辑接口(如 eth0, bond0
    • 接口类型可以是:
      • 物理以太网接口
      • 绑定接口(bond)
      • 团队接口(team)
      • 不能是另一个 VLAN 接口(除非使用 QinQ)
  • 验证命令
    ip -d link show vlan100 | grep 'link/ether'
    # 输出:link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    

2. id - VLAN 标识符

  • 作用:定义 VLAN 的逻辑分段标识
  • 技术原理
    • 对应 802.1Q 帧中的 12 位 VLAN 标识字段
    • 在内核中通过 vlan_dev_set_vlan_id() 函数设置
  • 使用要点
    • 必须与交换机配置匹配(Access 或 Trunk 模式)
    • 特殊值:
      • ID 0:优先级标记帧(不用于常规通信)
      • ID 1:通常为默认 VLAN
      • ID 4095:保留值(不可用)
  • 验证命令
    ip -d link show eth0.100 | grep 'vlan id'
    # 输出:vlan protocol 802.1Q id 100 <REORDER_HDR>
    

3. ifname - 接口命名

  • 作用:定义操作系统中 VLAN 接口的名称
  • 技术原理
    • /sys/class/net/ 下创建对应目录
    • 影响 ip linkifconfig 的输出
  • 使用要点
    • 命名规范建议:
      命名风格示例适用场景
      传统风格eth0.100简单网络
      功能描述风格mgmt_vlan企业网络(推荐)
      位置描述风格floor2_vlan200大型基础设施
    • 系统限制:
      • 最大长度:15 个字符(Linux 接口名限制)
      • 允许字符:字母、数字、下划线(_)、短横线(-
      • 禁止字符:空格、点(除非在传统格式中使用)

配置示例与效果

示例 1:最小化配置

nmcli con add type vlan \
  dev eth0 \
  id 100

效果

  • 自动创建接口 eth0.100
  • 连接名称自动设为 vlan-eth0-100
  • 无 IP 配置

示例 2:完整配置

nmcli con add type vlan \
  con-name "Server-Mgmt" \
  ifname mgmt_vlan \
  dev bond0 \
  id 200 \
  ipv4.method manual \
  ipv4.addresses 10.20.0.5/24 \
  ipv4.gateway 10.20.0.1

效果

  • 创建逻辑接口 mgmt_vlan
  • 基于绑定接口 bond0
  • VLAN ID 200
  • 静态 IP 配置
  • 连接名称:Server-Mgmt

示例 3:带高级参数的配置

nmcli con add type vlan \
  ifname storage_vlan \
  dev eno1 \
  id 300 \
  vlan.flags reorder_hdr \
  ethernet.mtu 9000 \
  ipv6.method dhcp \
  connection.autoconnect yes

参数间关系图解

graph TD
    P[物理接口 eth0] -->|dev 指定| V[VLAN 接口]
    I[ID 100] -->|vlan.id 指定| V
    N[自定义名称 vlan100] -->|ifname 指定| V
    
    V -->|实际创建| S[系统接口]
    S --> IP[IP 配置]
    
    style P fill:#f9f,stroke:#333
    style I fill:#f96,stroke:#333
    style N fill:#9cf,stroke:#333
    style V fill:#9f9,stroke:#333

最佳实践指南

1. 企业网络推荐配置

# 使用绑定接口作为父设备
nmcli con add type bond con-name TrunkBond ifname bond0 bond.options mode=802.3ad

# 创建带描述的 VLAN
nmcli con add type vlan \
  con-name "VLAN100-Management" \
  ifname mgmt_vlan \
  dev bond0 \
  id 100 \
  ipv4.addresses 192.168.100.10/24

2. 配置优先级规则

  1. 先创建父接口:确保 dev 指定的接口存在
  2. 必填参数devid 必须提供
  3. 命名规范
    • 生产环境:使用 ifname 自定义描述性名称
    • 开发环境:可使用默认命名
  4. IP 配置
    graph LR
    A[物理接口] -->|无IP| B[VLAN接口]
    B -->|配置IP| C[网络通信]
    

3. 验证命令组合

# 检查 VLAN 配置
ip -d link show mgmt_vlan | grep 'vlan id'

# 查看父接口关联
bridge vlan show dev bond0

# 检查流量统计
ethtool -S bond0 | grep vlan

故障排除

常见错误 1:VLAN 流量不通

现象:Ping 不通网关
诊断步骤

# 1. 检查 VLAN ID 是否匹配
ip -d link show mgmt_vlan | grep 'id'

# 2. 验证父接口状态
ethtool bond0 | grep 'Link detected'

# 3. 检查交换机配置
# 确保交换机端口配置为 trunk 模式
# 确认允许的 VLAN 列表包含该 ID

常见错误 2:接口创建失败

现象Error: Interface name 'eth0.100' already exists
解决方案

# 1. 查看冲突接口
ip link show eth0.100

# 2. 删除旧连接
nmcli con delete "vlan-eth0-100"

# 3. 或使用自定义名称
nmcli con add type vlan ifname new_vlan100 dev eth0 id 100

常见错误 3:VLAN 无法激活

现象Connection activation failed: Device not found
解决方案

# 1. 确认父接口存在
ip link show dev eth0

# 2. 检查内核模块
lsmod | grep 8021q

# 3. 加载 VLAN 模块
modprobe 8021q

高级用法

1. QinQ 配置(双标签 VLAN)

# 首先创建外层 VLAN
nmcli con add type vlan \
  con-name "QinQ-Outer" \
  ifname qinq_outer \
  dev eth0 \
  id 1000

# 在内层 VLAN 上创建第二层标签
nmcli con add type vlan \
  con-name "QinQ-Inner" \
  ifname qinq_inner \
  dev qinq_outer \
  id 200

2. VLAN 过滤配置

# 在网桥中启用 VLAN 过滤
nmcli con modify br0 bridge.vlan-filtering yes

# 配置 VLAN 成员关系
nmcli con modify br0-port1 bridge-port.vlans "100,200-300"

3. 批量创建脚本

#!/bin/bash
# 批量创建 VLAN 接口
for vlan_id in {100..110}; do
  nmcli con add type vlan \
    con-name "VLAN-$vlan_id" \
    ifname "vlan$vlan_id" \
    dev bond0 \
    id $vlan_id
done

技术原理补充

Linux VLAN 实现架构

graph BT
    A[物理接口 eth0] -->|接收帧| B[网络驱动]
    B -->|带标签帧| C[802.1Q 模块]
    C -->|VLAN ID 100| D[vlan100 接口]
    C -->|VLAN ID 200| E[vlan200 接口]
    D --> F[网络协议栈]
    E --> F[网络协议栈]
    
    style C fill:#f96,stroke:#333
    style D fill:#9f9,stroke:#333
    style E fill:#9f9,stroke:#333

配置文件解析

生成的连接文件 (/etc/NetworkManager/system-connections/VLAN100.nmconnection):

[connection]
id=VLAN100
type=vlan
interface-name=vlan100  # ifname 指定

[vlan]
id=100                 # vlan.id 指定
parent=eth0            # dev 指定

总结要点

  1. dev 是基础

    • 指向承载 VLAN 的实际物理/逻辑接口
    • 必须先行存在且已激活
    • 对应网络架构中的物理层
  2. id 是核心

    • 定义 VLAN 的逻辑分段
    • 必须在 1-4094 范围内
    • 必须与网络设备配置匹配
    • 对应 OSI 模型的数据链路层
  3. ifname 是标识

    • 提供用户友好的接口标识
    • 支持自定义管理策略
    • 影响系统工具中的显示
    • 对应操作系统的接口管理层

黄金法则:在关键系统中始终显式指定所有三个参数,以确保配置的可读性和可维护性:

nmcli con add type vlan \
  con-name "描述性名称" \
  ifname 唯一接口名 \
  dev 父接口 \
  id VLAN_ID



























在 Linux 的 NetworkManager 中,使用 nmcli con add type vlan 创建 VLAN 接口时,ifnamedevvlan.parentidvlan.id 是关键参数,它们的区别如下:


1. devvlan.parent

  • 作用:指定 VLAN 的父接口(物理接口或逻辑接口,如 eth0bond0)。
  • 区别
    • dev:在创建 VLAN 连接时直接指定父接口(命令行参数)。
    • vlan.parent:用于修改现有 VLAN 连接的父接口(配置属性)。
  • 示例
    # 创建 VLAN 连接时指定父接口(使用 dev)
    nmcli con add type vlan con-name "vlan100" ifname "vlan100" dev eth0 id 100
    
    # 修改现有 VLAN 连接的父接口(使用 vlan.parent)
    nmcli con mod "vlan100" vlan.parent bond0
    

2. idvlan.id

  • 作用:指定 VLAN 的标识号(VLAN ID),范围 1-4094
  • 区别
    • id:在创建 VLAN 连接时直接指定 VLAN ID(命令行参数)。
    • vlan.id:用于修改现有 VLAN 连接的 VLAN ID(配置属性)。
  • 示例
    # 创建 VLAN 连接时指定 VLAN ID(使用 id)
    nmcli con add type vlan ... id 100
    
    # 修改现有 VLAN 连接的 VLAN ID(使用 vlan.id)
    nmcli con mod "vlan100" vlan.id 200
    

3. ifname

  • 作用:自定义 VLAN 接口的名称(如 eth0.100vlan100)。
  • 说明
    • 若不指定 ifname,系统会自动生成名称(格式为 父接口.VLANID,如 eth0.100)。
    • 若指定 ifname,需确保名称唯一且符合规范。
  • 示例
    # 自定义接口名称为 vlan100
    nmcli con add type vlan ... ifname "vlan100"
    

完整命令示例

# 创建 VLAN 连接(静态 IP 配置)
nmcli con add type vlan \
  con-name "vlan100" \     # 连接名称(自定义)
  ifname "vlan100" \       # 接口名称(可选)
  dev eth0 \               # 父接口(物理网卡)
  id 100 \                 # VLAN ID(必须)
  ipv4.method manual \     # 静态 IP
  ipv4.addresses 192.168.100.10/24 \
  ipv4.gateway 192.168.100.1

关键区别总结

参数作用适用场景
dev创建时指定父接口创建连接时
vlan.parent修改父接口修改连接时
id创建时指定 VLAN ID创建连接时
vlan.id修改 VLAN ID修改连接时
ifname自定义接口名称创建连接时

常见错误

  1. 遗漏必要参数:未指定 devid 会导致命令失败。
  2. 混淆参数阶段:在创建连接时误用 vlan.parentvlan.id(这些参数用于修改连接)。
  3. 名称冲突:若 ifname 与现有接口重复,需先删除旧配置。

建议通过 nmcli con add type vlan --help 查看最新参数说明。



























在 Linux 的 nmcli 工具中,nmcli con add type vlan 命令用于创建 VLAN 接口。以下是命令中关键参数的详细解析:


1. 参数详解

1.1 ifname
  • 作用:指定新创建的 VLAN 接口的名称。
  • 格式:通常为 主设备名.VLAN_ID,例如 eth0.100
  • 示例
    nmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 vlan-id 100
    
    • ifname=eth0.100:表示创建的 VLAN 接口名称为 eth0.100

1.2 dev / vlan.parent
  • 作用:指定 VLAN 接口所依赖的主设备(物理或逻辑接口)。
  • 格式:直接指定主设备的名称,例如 eth0bond0 等。
  • 示例
    nmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 vlan-id 100
    
    • dev=eth0:表示 VLAN 接口 eth0.100 是基于主设备 eth0 创建的。
  • 注意
    • devvlan.parent 是等价的,可以互换使用。
    • 必须确保 ifnamedev 对应,例如:
      ifname=eth0.100 与 dev=eth0
      

1.3 vlan.id / id
  • 作用:指定 VLAN 的 ID(VLAN 标签值)。
  • 格式:整数,范围 0-4094
  • 示例
    nmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 vlan-id 100
    
    • vlan-id=100:表示 VLAN ID 为 100
  • 注意
    • vlan.idid 是等价的,可以互换使用。
    • VLAN ID 不能为 04095,因为这些值被保留。

2. 参数关系总结

参数作用示例值说明
ifnameVLAN 接口名称eth0.100必须符合 主设备名.VLAN_ID 格式
dev/vlan.parentVLAN 接口依赖的主设备名称eth0可以是物理网卡或逻辑接口(如 bond0)
vlan.id/idVLAN ID(标签值)100范围 0-4094

3. 使用场景示例

3.1 创建基于物理网卡的 VLAN
nmcli con add type vlan con-name vlan100 \
  ifname eth0.100 dev eth0 vlan-id 100
  • 主设备eth0(物理网卡)。
  • VLAN 接口eth0.100(基于 eth0 的 VLAN 100 子接口)。
3.2 创建基于绑定(Bonding)的 VLAN
nmcli con add type vlan con-name bond0-vlan100 \
  ifname bond0.100 dev bond0 vlan-id 100
  • 主设备bond0(绑定接口)。
  • VLAN 接口bond0.100(基于 bond0 的 VLAN 100 子接口)。

4. 常见错误及解决方法

4.1 错误:混淆 ifnamedev
  • 错误示例
    nmcli con add type vlan con-name vlan100 ifname bond0 vlan-id 100
    
    • 问题ifname 被错误地指定为主设备 bond0,缺少 dev 参数。
    • 解决:明确区分 ifname(子接口名)和 dev(主设备名):
      nmcli con add type vlan con-name vlan100 ifname bond0.100 dev bond0 vlan-id 100
      
4.2 错误:未指定 dev 参数
  • 错误示例
    nmcli con add type vlan con-name vlan100 ifname eth0.100 vlan-id 100
    
    • 问题:缺少 dev 参数,NetworkManager 无法确定 VLAN 的主设备。
    • 解决:添加 dev 参数:
      nmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 vlan-id 100
      

5. 总结

  • ifname 是 VLAN 接口的名称(如 eth0.100),必须符合 主设备名.VLAN_ID 的格式。
  • dev/vlan.parent 是 VLAN 接口依赖的主设备(如 eth0bond0)。
  • vlan.id/id 是 VLAN 的 ID(如 100),范围 0-4094
  • 正确配对:确保 ifnamedev 对应,例如:
    ifname=eth0.100 与 dev=eth0
    ifname=bond0.200 与 dev=bond0
    

通过正确使用这些参数,可以确保 VLAN 接口正确绑定到主设备,从而实现网络隔离和虚拟化需求。



























nmcli con add type vlan 命令中,涉及 VLAN 配置的参数较多,容易混淆。以下是核心参数的详细解释和对比:

一、核心参数详解

1. ifname:VLAN 接口的逻辑名称
  • 作用:定义系统中 VLAN 接口的名称,用于配置和管理。
  • 命名规则:建议使用 物理设备名.VLANID(如 eth0.10),但可自定义。
  • 示例
    nmcli con add type vlan ifname eth0.10 ...
    
    创建名为 eth0.10 的 VLAN 接口。
2. dev:VLAN 所基于的物理设备
  • 作用:指定 VLAN 流量实际通过哪个物理网卡传输。
  • 要求:必须是系统中已存在的物理设备(如 eth0, enp0s3)。
  • 示例
    nmcli con add type vlan dev eth0 ...
    
    表示该 VLAN 绑定到物理网卡 eth0
3. vlan.parent:VLAN 的父接口
  • 作用:与 dev 类似,均指定承载 VLAN 的物理设备,但优先级低于 dev
  • 使用场景:当 dev 未指定时,vlan.parent 生效。
  • 示例
    nmcli con add type vlan vlan.parent eth0 ...
    
    效果等同于 dev eth0,但建议优先使用 dev
4. id / vlan.id:VLAN ID
  • 作用:定义 VLAN 的标签 ID(范围 1-4094),用于区分不同 VLAN。
  • 两种写法
    • id:简化写法,直接使用 id 10
    • vlan.id:完整写法,显式指定 VLAN 命名空间。
  • 示例
    nmcli con add type vlan id 10 ...  # 简化写法
    nmcli con add type vlan vlan.id 10 ...  # 完整写法
    

二、参数对比表

参数含义是否必需优先级示例值
ifnameVLAN 接口的逻辑名称-eth0.10, vlan10
devVLAN 绑定的物理设备高于 vlan.parenteth0
vlan.parent备选的物理设备(dev 不存在时生效)低于 deveth0
id / vlan.idVLAN 的标签 ID-10, 200

三、正确用法示例

标准配置(推荐)
nmcli con add type vlan \
  con-name vlan10 \          # 连接名称
  ifname eth0.10 \           # VLAN 接口名
  dev eth0 \                 # 物理设备
  id 10 \                    # VLAN ID
  ipv4.addresses 192.168.10.10/24 \
  ipv4.method manual
使用 vlan.parent(不推荐,兼容性差)
nmcli con add type vlan \
  ifname eth0.10 \
  vlan.parent eth0 \         # 等同于 dev eth0
  vlan.id 10 \               # 完整写法
  ...

四、常见错误与注意事项

  1. devvlan.parent 同时存在

    # 错误示例(不推荐)
    nmcli con add type vlan dev eth0 vlan.parent eth1 ...
    

    结果dev 优先级更高,vlan.parent 被忽略。

  2. VLAN ID 超出范围

    # 错误:VLAN ID 范围为 1-4094
    nmcli con add type vlan id 4095 ...
    
  3. 物理设备不存在

    # 错误:eth99 不存在
    nmcli con add type vlan dev eth99 ...
    
  4. 接口名称冲突

    # 错误:eth0.10 已存在
    nmcli con add type vlan ifname eth0.10 ...
    

    解决:先删除现有连接:nmcli con delete eth0.10

五、验证配置

创建 VLAN 后,通过以下命令验证:

# 查看接口列表
ip addr show

# 输出示例:
4: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
    inet 192.168.10.10/24 scope global eth0.10

# 查看 NetworkManager 连接配置
nmcli con show vlan10

六、总结

  • 必选参数ifname, dev, id
  • 推荐写法
    nmcli con add type vlan ifname eth0.10 dev eth0 id 10 ...
    
  • 优先级dev > vlan.parentidvlan.id 等效
  • 命名建议ifname 使用 物理设备名.VLANID 格式,便于管理

合理使用这些参数,可以灵活配置单网卡多 VLAN、跨网卡 VLAN 等复杂网络场景。



























nmcli con add type vlan 中,以下是相关参数的含义和区别:

1. ifname

  • 含义:指定 VLAN 接口的名称,即虚拟网络接口的名称。
  • 示例ifname eth0.10 表示创建一个名为 eth0.10 的 VLAN 接口。

2. dev

  • 含义:指定 VLAN 接口所依赖的物理网卡名称,即 VLAN 连接的父设备。
  • 示例dev eth0 表示该 VLAN 接口基于物理网卡 eth0 创建。

3. vlan.parent

  • 含义:与 dev 功能相同,用于指定 VLAN 接口的父设备(物理网卡的名称)。
  • 示例vlan.parent eth0 同样表示 VLAN 接口基于物理网卡 eth0 创建。

4. id

  • 含义:指定 VLAN 的标识符(VLAN ID),用于区分不同的 VLAN。
  • 示例id 10 表示 VLAN ID 为 10。

5. vlan.id

  • 含义:与 id 功能相同,用于指定 VLAN 的 VLAN ID。
  • 示例vlan.id 10 同样表示 VLAN ID 为 10。

示例

以下是一些常见用法示例:

示例 1:使用 ifnamedevid
nmcli con add type vlan con-name vlan10 ifname eth0.10 dev eth0 id 10
  • 创建一个名为 vlan10 的 VLAN 连接。
  • VLAN 接口名称为 eth0.10
  • 父设备为物理网卡 eth0
  • VLAN ID 为 10。
示例 2:使用 vlan.parentvlan.id
nmcli con add type vlan con-name vlan10 ifname eth0.10 vlan.parent eth0 vlan.id 10
  • 创建一个名为 vlan10 的 VLAN 连接。
  • VLAN 接口名称为 eth0.10
  • 父设备为物理网卡 eth0
  • VLAN ID 为 10。

总结

参数功能对应的等价参数
ifname指定 VLAN 接口的名称
dev指定 VLAN 的父设备vlan.parent
id指定 VLAN 的 VLAN IDvlan.id

在实际使用中,devvlan.parent 是等价的,idvlan.id 是等价的,可以根据个人习惯选择使用。



























nmcli con add type vlan 参数详解

在 Linux NetworkManager 中使用 nmcli 创建 VLAN 连接时,各参数作用如下:

1. ifname(接口名称)
  • 作用:指定新创建的 VLAN 接口名称(如 vlan100
  • 特性
    • 可选参数,不指定时自动生成名称(格式:vlan.<父接口>.<VLAN ID>
    • 命名需符合网络接口规范(字母+数字)
  • 示例ifname office-vlan
  • 注意:实际接口名与连接名(con-name)可不同
2. dev(父接口)
  • 作用必需参数,指定承载 VLAN 的物理接口(如 eth0
  • 特性
    • 必须是已存在的物理接口或绑定接口
    • vlan.parent 完全等价(二者选一即可)
  • 示例dev enp1s0
3. vlan.parent(父接口别名)
  • 作用:与 dev 功能相同,指定物理父接口
  • 等效关系
    dev eth0          # 推荐写法(更简洁)
    vlan.parent eth0  # 完全等效
    
4. vlan.id(VLAN 标识)
  • 作用必需参数,设置 VLAN ID(1-4094 的整数)
  • 特性
    • 决定 VLAN 的逻辑分组
    • 需与交换机配置的 VLAN ID 匹配
  • 示例vlan.id 100
5. id(历史遗留参数)
  • 作用:早期版本中作为 vlan.id 的别名
  • 现状
    • 现代 NetworkManager 中已不推荐使用
    • 可能引起歧义(id 在其它连接类型中有不同含义)
  • 替代方案:始终使用 vlan.id

⚠️ 关键区别总结

参数必要性功能等效参数
ifname可选接口名称
dev必需物理父接口vlan.parent
vlan.id必需VLAN 标识无(id已废弃)

完整命令示例

# 规范写法(推荐)
nmcli con add type vlan \
  con-name office-vlan \    # 连接名称
  ifname vlan100 \          # 接口名称
  dev eth0 \                # 父接口
  vlan.id 100 \             # VLAN ID
  ipv4.method manual \      # 静态IP
  ipv4.addresses 192.168.1.10/24 \
  ipv4.gateway 192.168.1.1

配置验证

# 查看VLAN参数
nmcli con show office-vlan | grep "vlan\."
# 输出示例:vlan.parent: eth0, vlan.id:100

# 查看实际接口
ip -d link show vlan100
# 输出应包含:vlan protocol 802.1Q id 100

配置保存位置

VLAN 配置存储在 /etc/NetworkManager/system-connections/ 目录,文件名格式:<连接名>.nmconnection(如 office-vlan.nmconnection)。



























nmcli con add type vlan 命令中,ifnamedevvlan.parentidvlan.id 的区别如下:


1. 参数解析

参数作用示例是否必选
ifname新创建的 VLAN 接口的逻辑名称(如 vlan10eth0.100ifname vlan10
dev父物理接口名称(承载 VLAN 流量的底层接口,如 eth0bond0dev eth0
vlan.parent父接口的等效参数(与 dev 功能相同,语法更完整)vlan.parent eth0
idVLAN ID 号码(标识 VLAN 层级,如 100id 100
vlan.idVLAN ID 的完整参数名(与 id 功能相同)vlan.id 100

2. 关键区别

(1) ifname vs dev/vlan.parent
  • ifname:定义新 VLAN 接口的 逻辑名称(如 vlan10),该名称会出现在 ip link shownmcli connection show 的输出中。
  • dev/vlan.parent:指定 底层物理或绑定接口(如 eth0),用于承载 VLAN 流量。两者功能完全相同,仅语法不同:
    # 等效命令
    nmcli con add type vlan ifname vlan10 dev eth0 id 10
    nmcli con add type vlan ifname vlan10 vlan.parent eth0 vlan.id 10
    
(2) id vs vlan.id
  • id:简写参数,直接指定 VLAN ID(如 id 100)。
  • vlan.id:完整参数名,功能与 id 完全一致,推荐使用完整参数以提高配置可读性。

3. 实际使用示例

(1) 基础 VLAN 配置
# 创建 VLAN ID 100 的子接口 eth0.100,父接口为 eth0,逻辑名称为 vlan100
sudo nmcli con add type vlan ifname vlan100 dev eth0 id 100
(2) 嵌套 VLAN 配置
# 在父 VLAN 接口 vlan10 上创建子 VLAN 20(需启用 802.1ad 协议)
sudo nmcli con add type vlan ifname vlan10.20 dev eth0.10 id 20 vlan.protocol 802.1ad
(3) 绑定接口上的 VLAN
# 在 bond0 接口上创建 VLAN 30,逻辑名称为 bond0.30
sudo nmcli con add type vlan ifname bond0.30 dev bond0 id 30

4. 验证配置

# 查看 VLAN 接口信息
ip -d link show vlan100
# 输出示例:
4: vlan100@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 100 <REORDER_HDR>

5. 常见问题

Q1:devvlan.parent 有何区别?
  • 两者功能完全相同,仅参数名不同。vlan.parent 是更明确的参数名,推荐优先使用。
Q2:idvlan.id 是否可互换?
  • 是的,两者功能一致。建议使用 vlan.id 以明确参数含义。
Q3:VLAN ID 范围是多少?
  • VLAN ID 有效范围为 0-4094,其中 04095 为保留值。
Q4:如何修改已创建的 VLAN ID?
  • 需先删除原连接,再重新创建:
    nmcli con delete vlan100
    nmcli con add type vlan ifname vlan100 dev eth0 id 200
    

6. 最佳实践

  1. 命名规范:VLAN 接口名称建议采用 <物理接口>.<VLAN_ID> 格式(如 eth0.100),便于识别。
  2. 协议兼容性:嵌套 VLAN(如 Q-in-Q)需指定 vlan.protocol 802.1ad
  3. MTU 调整:若需支持大帧,可修改 MTU:
    nmcli con modify vlan100 ethernet.mtu 2000
    

通过合理使用这些参数,可灵活管理 VLAN 接口的命名与底层物理设备绑定关系,适用于虚拟化、多租户隔离等场景。



























nmcli con add type vlan 命令中,ifnamedev/vlan.parentid/vlan.id 是核心参数,其作用与区别如下:


🔍 一、参数详解

参数别名/等效参数作用是否必需示例
ifname-定义新 VLAN 子接口在系统中的名称(逻辑标识)ifname vlan100
devvlan.parent指定承载 VLAN 的父接口(物理网卡或逻辑接口如 Bond/Bridge)dev eth0vlan.parent bond0
idvlan.id设置 VLAN ID(范围 0-4094)id 100vlan.id 100

💡 说明

  • devvlan.parent 完全等价(可互换使用)。
  • idvlan.id 完全等价(推荐显式使用 vlan.id 避免歧义)。

⚙️ 二、参数关系与协作

1. ifnamedev/vlan.parent 的分工
  • ifname:定义新接口的逻辑名称(如 vlan10),用于系统识别和管理(如 ip link show vlan10)。
  • dev/vlan.parent:指定底层物理或逻辑接口(如 eth0bond0),VLAN 流量通过该接口传输。
2. id/vlan.id 的作用
  • 标识 VLAN 标签(802.1Q 协议中的 VLAN ID),交换机需配置为 Trunk 模式并允许该 ID 通过。
  • 范围 0-4094,其中 ID=0 保留优先级标记,ID=4095 为保留值(通常禁用)。

⚠️ 三、关键注意事项

  1. 参数共存性

    • ifnamedev/vlan.parent 必须同时存在,否则命令报错。
    • 示例完整命令:
      nmcli con add type vlan con-name vlan10 ifname vlan10 vlan.parent eth0 vlan.id 10
      
  2. 命名冲突

    • ifname 名称需唯一(不与现有接口重复),否则创建失败。
    • 建议命名包含 VLAN ID 或父接口名(如 eth0.100)。
  3. 父接口状态依赖

    • 父接口(如 eth0)需为 UP 状态nmcli device status 显示 connected)。
    • 若父接口为 Bond,需避免使用 fail_over_mac=follow 模式(可能导致 MAC 地址同步问题)。

🛠️ 四、典型配置示例

1. 基于物理网卡创建 VLAN
nmcli con add type vlan \
  con-name vlan100 \      # 连接名称(逻辑标识)
  ifname eth0.100 \       # 接口名(系统可见)
  vlan.parent eth0 \      # 父接口
  vlan.id 100 \           # VLAN ID
  ipv4.method manual \    # 静态 IP
  ipv4.addresses 192.168.100.10/24
2. 基于 Bond 接口创建 VLAN
# 先创建 Bond
nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=802.3ad"

# 在 Bond 上创建 VLAN
nmcli con add type vlan \
  con-name bond0.200 \
  ifname bond0.200 \
  dev bond0 \             # 等效于 vlan.parent bond0
  id 200                  # 等效于 vlan.id 200

🔧 五、故障排查

  • 问题:VLAN 接口未激活

    • 检查父接口状态:nmcli device status
    • 验证交换机 Trunk 配置:确保允许对应 VLAN ID 通过。
  • 问题:dev 参数报错 "Device not found"

    • 确认父接口名称正确(区分 eth0 vs ens192)。
    • 关闭占用父接口的旧连接:nmcli con down "old-connection"

💎 总结

  • ifname:定义新接口的系统名称(逻辑标识)。
  • dev/vlan.parent:指定物理/逻辑父接口(承载流量)。
  • id/vlan.id:设置 VLAN 标签 ID(范围 0-4094)。

通过明确参数分工,可高效创建 VLAN 子接口,适用于服务器网络隔离、虚拟化及容器网络等场景。



























在 Linux NetworkManager 的 nmcli con add type vlan 命令中,参数 ifnamedev/vlan.parentid/vlan.id 分别承担不同角色,其区别和用途如下:


📌 1. ifname:指定 VLAN 子接口的逻辑名称

  • 作用:定义在系统中创建的虚拟 VLAN 接口的名称(如 vlan10),用于操作系统内部标识和管理。
  • 示例
    ifname vlan100  # 系统将创建名为 vlan100 的虚拟接口
    
  • 特性
    • 用户可自定义名称(如 vlan-officevlan-home)。
    • 需确保名称唯一性,避免与现有接口冲突。

🔌 2. devvlan.parent:指定物理父接口

  • 作用:指定承载 VLAN 流量的底层物理接口(如 eth0ens4)或聚合接口(如 Bond、Bridge)。
  • 等价性devvlan.parent 的简写形式,两者功能完全相同。
  • 示例
    dev eth0     # 或 vlan.parent eth0
    
  • 要求
    • 父接口必须真实存在且支持 VLAN(需加载 8021q 内核模块)。
    • 交换机对应端口需配置为 Trunk 模式,允许指定 VLAN ID 通过。

🔢 3. idvlan.id:指定 VLAN 标识符

  • 作用:设置 VLAN 的 ID 号(范围 0–4094),用于在网络中标识 VLAN 流量。
  • 等价性idvlan.id 的简写形式,两者功能相同。
  • 示例
    id 100       # 或 vlan.id 100
    
  • 要求
    • VLAN ID 需与交换机配置一致,否则网络无法互通。
    • ID 04095 为保留值,通常不可用。

⚙️ 完整命令示例

# 创建 VLAN 连接
nmcli con add type vlan \
    con-name vlan100 \       # 连接配置名称
    ifname vlan100 \         # 系统接口名称(虚拟接口)
    dev eth0 \               # 物理父接口(等价于 vlan.parent eth0)
    id 100 \                 # VLAN ID(等价于 vlan.id 100)
    ipv4.method manual \     # 静态 IP
    ipv4.addresses 192.168.10.5/24

常见错误与注意事项

  1. ifname 冲突
    若名称 vlan100 已存在,会报错 Interface name already exists
  2. 无效的父接口
    dev eth0 不存在或未启用,会报错 Device not found
  3. VLAN 支持未启用
    需提前加载内核模块:modprobe 8021q
  4. 交换机配置不匹配
    若交换机未放行 VLAN ID 100,流量将被丢弃。

📊 参数功能对比表

参数作用是否必填示例值依赖条件
ifname定义虚拟接口的系统名称vlan100名称唯一性
dev/vlan.parent指定物理父接口eth0ens4接口存在且支持 VLAN
id/vlan.id设置 VLAN 流量标识100与交换机配置匹配

💎 总结

  • ifname:定义系统内 VLAN 接口的逻辑标识(虚拟层)。
  • dev/vlan.parent:指定 VLAN 流量的物理承载接口(硬件层)。
  • id/vlan.id:配置 VLAN 的网络标识(协议层)。
    三者协同工作,缺一不可。配置时需确保:
    1️⃣ 逻辑名称(ifname)唯一;
    2️⃣ 父接口(dev)有效且支持 VLAN;
    3️⃣ VLAN ID(id)与交换机一致。



























在Linux的NetworkManager中使用nmcli con add type vlan命令创建VLAN连接时,相关参数的作用及区别如下:

1. ifname

  • 作用:指定新创建的VLAN接口的名称(如 vlan10)。
  • 示例ifname vlan10 表示生成的接口名为 vlan10
  • 注意:此名称是可选的。若不指定,默认格式为 父接口名称.VID(如 eth0.10)。

2. dev vs vlan.parent

  • 作用:两者均用于指定父接口(即承载VLAN的物理接口或逻辑接口)。
  • 区别
    • dev 是旧版参数,现仍兼容但不推荐
    • vlan.parent 是明确且推荐的参数(需NetworkManager 1.14+版本支持)。
  • 示例
    # 旧版写法(兼容)
    dev eth0
    
    # 新版推荐写法
    vlan.parent eth0
    

3. id vs vlan.id

  • 作用:两者均用于设置VLAN的ID(范围1-4094)。
  • 区别
    • id 是旧版参数,现仍兼容但不推荐
    • vlan.id 是明确且推荐的参数(需NetworkManager 1.14+版本支持)。
  • 示例
    # 旧版写法(兼容)
    id 10
    
    # 新版推荐写法
    vlan.id 10
    

4. 兼容性与推荐实践

  • 旧版本兼容性:在NetworkManager <1.14中,需使用 devid
  • 新版本推荐:NetworkManager ≥1.14应优先使用 vlan.parentvlan.id,因参数更明确,避免歧义。
  • 冲突处理:若同时指定(如dev eth0 vlan.parent eth1),后者可能覆盖前者,但强烈建议避免混用。

完整示例

新版推荐写法(明确指定VLAN参数):

nmcli con add type vlan \
  con-name myvlan10 \
  ifname vlan10 \
  vlan.parent eth0 \
  vlan.id 10 \
  ip4 192.168.1.100/24

旧版兼容写法(不推荐,但可能仍有效):

nmcli con add type vlan \
  ifname vlan10 \
  dev eth0 \
  id 10 \
  ip4 192.168.1.100/24

总结

  • ifname → VLAN接口名称(建议自定义)。
  • vlan.parent → 父接口(取代dev)。
  • vlan.id → VLAN ID(取代id)。
  • 推荐使用新版参数以保持兼容性和可读性。可通过 man nm-settings-nmcli 查阅官方文档进一步验证。