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

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

二、参数详解与对应关系

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

⚠️ 关键说明

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

三、参数使用对比

1. 等价写法示例

bash 复制代码
# 简写形式
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. 配置文件映射

ini 复制代码
# /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. 数据包处理流程

scss 复制代码
[发送数据包]
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. 完整配置示例

bash 复制代码
# 生产环境推荐写法
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. 错误处理

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

六、高级应用场景

1. 多级 VLAN (QinQ)

bash 复制代码
# 第一层 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. 动态父设备绑定

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

3. VLAN 标志配置

bash 复制代码
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. 验证参数映射

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

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

2. 检查内核状态

bash 复制代码
# 查看接口信息
ip -d link show vlan-prod

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

3. 监控数据包

bash 复制代码
# 捕获带 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'` |
| 配置优先级 | 命令行中最后出现的有效值生效 |

示例比较

bash 复制代码
# 两种写法完全等效
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(保留) |

示例比较

bash 复制代码
# 两种写法完全等效
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
最佳实践 生产环境建议明确指定

命名示例

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

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

参数组合使用示例

基础配置(最小参数)

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

完整配置(所有参数)

bash 复制代码
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

混合使用风格

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

参数优先级与冲突处理

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

bash 复制代码
# 示例:同时指定 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. 查看生成配置

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

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

2. 查看系统接口

bash 复制代码
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:

ini 复制代码
[connection]
id=Server-Mgmt
type=vlan
interface-name=mgmt_vlan  # ifname 指定

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

最佳实践指南

1. 企业级配置推荐

bash 复制代码
# 清晰明确的参数风格
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. 避免的常见错误

bash 复制代码
# 错误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)

bash 复制代码
# 第一层 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

bash 复制代码
# 创建绑定
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 配置

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

故障排除与验证

1. 参数冲突错误处理

bash 复制代码
# 错误: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. 接口创建失败

bash 复制代码
# 错误: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 流量验证

bash 复制代码
# 1. 检查 VLAN 标签
tcpdump -i eth0 -nn -e vlan

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

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

总结与选择建议

参数选择矩阵

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

黄金实践法则

  1. 一致性原则:在整个环境中保持参数风格一致
  2. 明确性原则 :生产环境总是指定 ifname
  3. 简洁性原则 :脚本中使用 devid 简化命令
  4. 验证原则 :创建后执行 ip -d link show <接口名> 验证
  5. 文档原则:复杂配置添加注释说明
bash 复制代码
# 创建管理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 可选 设置虚拟接口名称
dev vlan.parent 必需 指定父接口 ✓(更简洁)
vlan.parent dev 必需 指定父接口
id vlan.id 必需 设置 VLAN ID ✓(更简洁)
vlan.id id 必需 设置 VLAN ID

实际使用中的组合方式

正确组合(推荐)
bash 复制代码
# 最简洁写法(推荐)
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
错误组合
bash 复制代码
# 错误:同时使用 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

技术原理图解

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

创建后的系统表现

使用以下命令创建 VLAN:

bash 复制代码
nmcli con add type vlan \
  con-name "server-vlan" \
  ifname mgmt_vlan \
  dev enp5s0 \
  id 150

在系统中将看到:

bash 复制代码
$ 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. 命名规范

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

    bash 复制代码
    # 创建绑定
    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标签]

一、参数关系表

参数 等价参数 作用 是否必需 示例 配置文件字段
ifname VLAN接口名称 必需 ifname vlan10 interface-name
dev vlan.parent 父设备指定 必需 dev eth0 vlan.parent
id vlan.id VLAN ID 必需 id 20 vlan.id

二、详细参数解析

1. ifname - VLAN接口名称

  • 功能:定义操作系统中的VLAN接口名称

  • 特点

    • 必须是唯一的系统标识符
    • 用于所有网络命令(ip, ping, ss等)
    • /sys/class/net/中创建对应设备
  • 示例

    bash 复制代码
    ifname vlan-finance

2. devvlan.parent - 父设备指定

  • 功能:指定VLAN依赖的底层设备

  • 特点

    • devvlan.parent 的简写形式
    • 两者完全等价,可互换使用
    • 必须是已存在的物理或虚拟接口
  • 示例

    bash 复制代码
    dev eth0        # 简写形式
    vlan.parent eth0 # 完整形式

3. idvlan.id - VLAN标识符

  • 功能:设置802.1Q VLAN标签号

  • 特点

    • idvlan.id 的简写形式
    • 两者完全等价,可互换使用
    • 范围:1-4094
  • 示例

    bash 复制代码
    id 30        # 简写形式
    vlan.id 30   # 完整形式

三、参数等价性演示

等效配置示例

bash 复制代码
# 简写形式(推荐)
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

配置文件中的表示

ini 复制代码
# /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. 推荐使用形式

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

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

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

3. 混合使用(不推荐)

bash 复制代码
# 可行但不推荐(降低可读性)
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. 基础配置

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

2. 完整参数配置

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

3. 在绑定接口上创建VLAN

bash 复制代码
# 创建绑定
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. 查看连接详情

bash 复制代码
nmcli -p con show vlan-admin

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

2. 查看设备信息

bash 复制代码
nmcli -p dev show vlan-admin

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

八、参数修改方法

参数 是否可修改 修改方法
ifname nmcli con mod <name> ifname <new-name>
dev/vlan.parent 需删除后重建
id/vlan.id 需删除后重建
bash 复制代码
# 修改接口名
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

九、常见错误及解决

错误:参数冲突

bash 复制代码
# 错误:同时使用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

错误:缺少必需参数

bash 复制代码
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. 命名规范

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

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

    bash 复制代码
    #!/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 这几个参数密切相关但作用不同。以下是它们的完整解析和关系说明:


参数关系总览

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

详细解释

1. devvlan.parent
  • 命令行参数dev

  • 配置文件属性vlan.parent

  • 作用 :指定 VLAN 的底层物理接口

  • 特点

    • 必须是系统中存在的物理接口(如 eth0, enp3s0
    • 在命令行中使用 dev,但在配置文件中存储为 vlan.parent
  • 示例

    bash 复制代码
    nmcli con add type vlan dev eth0 ...

    生成配置文件:

    ini 复制代码
    [vlan]
    parent=eth0  # dev 映射为 vlan.parent
2. idvlan.id
  • 命令行参数id

  • 配置文件属性vlan.id

  • 作用 :定义 802.1Q VLAN 标签号

  • 规则

    • 范围:1-4094
    • 必须与网络设备(交换机)配置匹配
  • 示例

    bash 复制代码
    nmcli con add type vlan id 100 ...

    生成配置文件:

    ini 复制代码
    [vlan]
    id=100  # id 映射为 vlan.id
3. ifname (无直接配置文件等价属性)
  • 命令行参数ifname

  • 配置文件属性connection.interface-name

  • 作用 :指定 VLAN 虚拟接口名称

  • 特点

    • 默认自动生成格式:{父接口}.{VLAN ID}(如 eth0.100
    • 显式命名可提高可读性(如 vlan-finance
  • 示例

    bash 复制代码
    nmcli con add type vlan ifname vlan-office ...

    生成配置文件:

    ini 复制代码
    [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;

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

命令:
bash 复制代码
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):
ini 复制代码
[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 与物理接口不匹配

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

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

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

管理技巧

  1. 查看配置映射关系

    bash 复制代码
    nmcli -g connection.interface-name,vlan.parent,vlan.id con show office-vlan

    输出

    复制代码
    vlan-office
    eth0
    100
  2. 修改参数

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

    bash 复制代码
    nmcli --nocheck con add type vlan \
      dev eth0 id 100 ifname temp-vlan \
      save no autoconnect no

最佳实践

  1. 显式命名三要素

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

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

    bash 复制代码
    # 创建后立即验证
    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 完全等价,只需使用其中一个

  • 必须是系统中已存在的接口:

    bash 复制代码
    ip link show  # 查看可用接口
  • 可以是:

    • 物理接口:eth0, enp3s0
    • 逻辑接口:bond0, br0, vlan100

2. VLAN ID 指定参数

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

特点

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

3. VLAN 接口指定参数

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

特点

  • 长度 ≤ 15 字符

  • 允许字符:字母、数字、下划线、点号

  • 推荐命名格式:<父接口短名>.<VLAN ID>

    bash 复制代码
    ifname enp3s0.100  # 标准命名
    ifname mgmt_vlan   # 描述性命名

参数等价关系

等价组 1:父接口指定

bash 复制代码
# 以下两种写法完全等价
dev eth0
vlan.parent eth0

等价组 2:VLAN ID 指定

bash 复制代码
# 以下两种写法完全等价
id 100
vlan.id 100

完整命令示例

标准写法(推荐)

bash 复制代码
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

替代写法(功能相同)

bash 复制代码
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

错误写法示例

bash 复制代码
# 错误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 必需的最小参数集

bash 复制代码
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

bash 复制代码
nmcli con add type vlan \
  ifname bond0.200 \
  dev bond0 \      # 基于绑定接口
  id 200

2. 在网桥上创建 VLAN

bash 复制代码
nmcli con add type vlan \
  ifname br0.300 \
  vlan.parent br0 \  # 基于网桥
  vlan.id 300

3. 使用 VLAN 标志

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

验证与调试

1. 查看创建结果

bash 复制代码
# 查看连接详情
nmcli -p con show VLAN100

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

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

2. 参数优先级

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

python 复制代码
vlan.parent > dev
vlan.id > id

示例:

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

最佳实践

  1. 一致性原则

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

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

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

    bash 复制代码
    # 导出连接设置
    nmcli con export VLAN100 > vlan100-backup.nmconnection

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







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


核心参数关系表

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

详细解析

1. ifname (接口名称)
  • 功能:设置 VLAN 虚拟接口的名称

  • 特点

    • 仅作为命令行参数存在,无等效属性参数
    • 控制配置文件中的 interface-name
    • 省略时自动生成 <父设备>.<VLAN ID> 格式名称
  • 示例

    bash 复制代码
    nmcli con add type vlan ifname mgmt-vlan ...  # 显式设置接口名
  • 配置文件体现

    ini 复制代码
    [connection]
    interface-name=mgmt-vlan  # <-- ifname 的值
2. devvlan.parent (父设备)
  • 功能:指定承载 VLAN 的底层物理/逻辑接口

  • 关系

    • devvlan.parent 的命令行快捷方式
    • 两者完全等价,作用相同
  • 特点

    • 必需参数(必须二选一)
    • 指向已存在的接口(eth0, bond0 等)
  • 示例

    bash 复制代码
    # 两种写法等效
    nmcli con add type vlan dev eth0 ...       # 快捷方式
    nmcli con add type vlan vlan.parent eth0 ... # 完整属性
  • 配置文件体现

    ini 复制代码
    [vlan]
    parent=eth0  # <-- dev/vlan.parent 的值
3. idvlan.id (VLAN ID)
  • 功能:定义 802.1Q VLAN 标签号

  • 关系

    • idvlan.id 的命令行快捷方式
    • 两者完全等价,作用相同
  • 特点

    • 必需参数(必须二选一)
    • 取值范围 1-4094
  • 示例

    bash 复制代码
    # 两种写法等效
    nmcli con add type vlan id 100 ...       # 快捷方式
    nmcli con add type vlan vlan.id 100 ... # 完整属性
  • 配置文件体现

    ini 复制代码
    [vlan]
    id=100  # <-- id/vlan.id 的值

参数组合使用场景

场景 1:基本 VLAN 创建
bash 复制代码
# 使用快捷参数 (推荐)
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 和标志)
bash 复制代码
# 混合使用快捷参数和属性
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

配置文件实例

命令

bash 复制代码
nmcli con add type vlan \
    con-name office-vlan \
    ifname office-net \
    dev eno1 \
    id 50

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

ini 复制代码
[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 会报错(冲突)
    bash 复制代码
    # 错误示例:重复指定
    nmcli con add type vlan dev eth0 vlan.parent eth1 id 100 vlan.id 200
  2. 必需参数规则

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

    • 某些 VLAN 属性只能用完整形式

      bash 复制代码
      # 设置 VLAN 标志 (无快捷参数)
      nmcli con add type vlan \
          vlan.parent eth0 \
          vlan.id 100 \
          vlan.flags 0x1  # 只能使用完整属性
  4. 修改配置

    bash 复制代码
    # 修改父设备 (必须用完整属性名)
    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. 日常使用推荐

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

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

    bash 复制代码
    # 不推荐:依赖自动命名 (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 等工具中统一使用完整属性:

      yaml 复制代码
      # 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 ID 200

关键区别与关系

1. ifname (接口名称)

  • 唯一独立参数,不与其他参数冲突

  • 功能:定义VLAN接口在系统中的名称

  • 默认值vlan<ID>(如vlan100

  • 配置文件位置

    ini 复制代码
    [connection]
    interface-name=mgmt-vlan

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

  • 完全等价,只是不同表达形式

  • 关系devvlan.parent的简写

  • 互斥:不能同时使用

  • 功能:指定承载VLAN流量的底层接口

  • 配置文件位置

    ini 复制代码
    [vlan]
    parent=enp3s0

3. id vs vlan.id (VLAN ID)

  • 完全等价,只是不同表达形式

  • 关系idvlan.id的简写

  • 互斥:不能同时使用

  • 功能:设置802.1Q VLAN标签号

  • 配置文件位置

    ini 复制代码
    [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

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

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

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

完整配置示例

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

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

场景2:使用完整参数

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

场景3:混合使用参数

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

生成的配置文件分析

示例1:简写参数配置

命令

bash 复制代码
nmcli con add type vlan con-name vlan100 ifname mgmt dev enp3s0 id 100

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

ini 复制代码
[connection]
id=vlan100
type=vlan
interface-name=mgmt  # ifname的值

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

示例2:完整参数配置

命令

bash 复制代码
nmcli con add type vlan con-name vlan200 vlan.parent bond0 vlan.id 200

配置文件:

ini 复制代码
[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. 命名规范建议

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

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

3. 高级配置技巧

bash 复制代码
# 创建带额外参数的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. 验证命令

bash 复制代码
# 检查参数对应关系
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 的完整解析:


核心参数关系表

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

详细说明

1. 父接口指定参数(等价)
  • devvlan.parent 完全等效

  • 作用:定义承载 VLAN 的底层接口

  • 必需:是

  • 特点

    • 必须是系统中已存在的接口(物理网卡、绑定接口、网桥等)
    • 实际处理带 VLAN 标签的数据帧
  • 示例

    bash 复制代码
    # 两种写法效果相同
    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

  • 示例

    bash 复制代码
    # 两种写法效果相同
    nmcli con add type vlan vlan.id=100 ...
    nmcli con add type vlan id=100 ...  # 不推荐,易混淆

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

3. VLAN 接口名参数
  • ifname(无等效参数)

  • 作用:定义新建的 VLAN 虚拟接口名称

  • 必需:否(不指定时自动生成)

  • 默认命名规则<父接口>.<VLAN ID>

  • 示例

    bash 复制代码
    # 显式命名
    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[使用存在的参数]

示例冲突处理

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

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

完整命令示例

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

查看配置验证

创建后检查配置:

bash 复制代码
nmcli connection show "VLAN-Engineering" | egrep -i 'ifname|parent|id'

输出示例

yaml 复制代码
connection.interface-name:          eng_vlan     # ifname
vlan.parent:                        eth1         # dev/vlan.parent
vlan.id:                            300          # vlan.id/id

常见错误与陷阱

  1. 参数混淆

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

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

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

    bash 复制代码
    # 错误:缺少父接口
    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 绑定接口):

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

    bash 复制代码
    /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:最小化配置(自动命名)
bash 复制代码
nmcli con add type vlan \
    con-name "VLAN100" \
    dev eth0 \           # 必需:父接口
    vlan.id 100          # 必需:VLAN ID

结果接口名:eth0.100

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

结果接口名:srv_net

示例 3:复杂场景(VLAN over Bridge)
bash 复制代码
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. 查看配置

    bash 复制代码
    # 查看创建结果
    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' exists ifname 与现有接口冲突 更换自定义名称
Error: device 'eth99' not available dev 指定的父接口不存在 检查接口名是否正确

正确理解这三个参数的关系,是配置 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 功能
    • 必须唯一,不能与其他接口冲突
  • 示例 :

    bash 复制代码
    ifname mgmt-vlan  # 自定义接口名

2. dev (父设备 - 简写)

  • 作用 : 指定 VLAN 的父接口的简写形式

  • 等效参数 : vlan.parent

  • 特点 :

    • vlan.parent 功能完全相同
    • 更简洁的命令行写法
  • 示例 :

    bash 复制代码
    dev enp3s0  # 等价于 vlan.parent enp3s0

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

  • 作用: 明确指定 VLAN 的父接口

  • 配置文件位置 : [vlan] 部分的 parent

  • 要求 : 必须参数

  • 特点 :

    • 必须是已存在的物理或逻辑接口
    • 支持的类型: 物理网卡、bond、bridge、其他 VLAN
  • 示例 :

    bash 复制代码
    vlan.parent bond0  # 基于绑定接口

4. id (VLAN ID - 简写)

  • 作用 : 指定 VLAN ID 的简写形式

  • 等效参数 : vlan.id

  • 特点 :

    • vlan.id 功能完全相同
    • 更简洁的命令行写法
  • 示例 :

    bash 复制代码
    id 100  # 等价于 vlan.id 100

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

  • 作用: 明确指定 802.1Q VLAN 标签号

  • 配置文件位置 : [vlan] 部分的 id

  • 要求 : 必须参数

  • 特点 :

    • 取值范围: 1-4094
    • 同一父接口上必须唯一
    • 必须与网络设备配置匹配
  • 示例 :

    bash 复制代码
    vlan.id 200  # 设置 VLAN ID 为 200

参数等价关系

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

典型用法示例

1. 完整参数写法

bash 复制代码
sudo nmcli con add type vlan \
  con-name vlan100 \
  ifname vlan-mgmt \
  vlan.parent enp3s0 \
  vlan.id 100

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

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

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

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

配置文件解析

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

ini 复制代码
[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 地址)

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

2. 嵌套 VLAN (QinQ)

bash 复制代码
# 第一层 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 标志配置

bash 复制代码
sudo nmcli con add type vlan \
  dev enp3s0 \
  id 100 \
  vlan.flags 1  # 启用REORDER_HDR

常见错误处理

错误 1: 参数冲突

bash 复制代码
# 错误:同时使用 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: 缺少必需参数

bash 复制代码
# 错误:缺少父接口
sudo nmcli con add type vlan ifname vlan100 id 100

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

解决 :添加 devvlan.parent

错误 3: VLAN ID 冲突

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

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

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

最佳实践

  1. 命名规范:

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

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

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

    bash 复制代码
    #!/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
父设备 dev vlan.parent [vlan] parent
VLAN ID id vlan.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 流量的物理路径
  • 示例

    bash 复制代码
    dev eth0       # 基于物理网卡
    dev bond0      # 基于绑定接口
    dev br0        # 基于网桥接口
  • 验证存在

    bash 复制代码
    ip link show eth0  # 确认接口存在

2. id (VLAN ID)

  • 作用 :定义 802.1Q VLAN 标签的数值标识

  • 特点

    • 必需参数,范围 1-4094
    • 决定数据包的 VLAN 标签值
    • 同一父接口上 ID 必须唯一
  • 示例

    bash 复制代码
    id 100     # 标准VLAN
    id 2000    # 扩展VLAN
  • 特殊值

    • id 0:优先级标记(非标准VLAN)
    • id 4095:保留值(禁止使用)

3. ifname (接口名称)

  • 作用 :指定创建的 VLAN 虚拟接口名称

  • 特点

    • 将在系统中创建的设备名称
    • 推荐命名:<父接口>.<vlan_id>
    • 必须全局唯一
  • 示例

    bash 复制代码
    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-->>-应用: 传递解包数据

完整命令示例

基础配置

bash 复制代码
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

高级配置

bash 复制代码
# 在绑定接口上创建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 device dev 指定接口不存在 ip link 确认接口可用
Error: vlan id is invalid id 超出 1-4094 范围 使用有效 VLAN ID
Error: connection exists ifnamecon-name 重复 使用唯一名称
VLAN 流量不通 交换机未配置 trunk 端口 确保交换机端口允许该 VLAN ID
无法获取 IP VLAN 接口未激活 执行 nmcli con up VLAN100

验证命令

bash 复制代码
# 查看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. 命名规范

    bash 复制代码
    # 推荐格式
    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. 父接口选择

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

    bash 复制代码
    # 导出连接配置
    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 等)
    • 必须唯一,不能与现有接口冲突
  • 示例

    bash 复制代码
    ifname vlan-finance  # 创建名为 "vlan-finance" 的接口

2. dev - 父设备指定

  • 功能:指定 VLAN 流量承载的底层设备

  • 特点

    • 可以是物理网卡(如 eth0)或虚拟接口(如 bond0
    • 设备必须已存在且可用
    • 确定数据包的物理出口
  • 示例

    bash 复制代码
    dev enp3s0  # 基于物理网卡 enp3s0

3. id - VLAN 标识符

  • 功能:设置 802.1Q VLAN 标签号

  • 特点

    • 范围 1-4094(0 和 4095 为保留值)
    • 同一父设备上必须唯一
    • 决定数据包在交换机上的 VLAN 归属
  • 示例

    bash 复制代码
    id 30  # 设置 VLAN ID 为 30

三、三参数协同工作示例

基本配置

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

验证配置关系

bash 复制代码
# 查看 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

bash 复制代码
# 先创建绑定
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 配置

bash 复制代码
# 在同一个物理接口上创建多个 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. 自定义命名方案

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

六、常见错误及解决

错误 1:缺少必需参数

bash 复制代码
sudo nmcli con add type vlan ifname vlan30
# Error: VLAN connection needs 'dev' and 'id' properties

解决 :必须同时提供 ifnamedevid

错误 2:VLAN ID 冲突

bash 复制代码
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:接口名冲突

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

解决:使用唯一的接口名

七、三参数管理技巧

1. 查看参数关系

bash 复制代码
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 不能 需删除后重建
bash 复制代码
# 修改 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:服务器网络隔离

bash 复制代码
# 管理 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:云主机网络配置

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

场景 3:网络设备模拟

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

九、最佳实践

  1. 命名规范

    bash 复制代码
    # 统一命名方案
    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. 备份与恢复

    bash 复制代码
    # 导出配置
    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-4094 802.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)
  • 示例

    bash 复制代码
    ifname office-vlan  # 创建名为 "office-vlan" 的接口

2. dev - 父设备

  • 功能 :指定 VLAN 流量承载的底层设备

  • 技术实现

    • 在配置文件中存储为 vlan.parent 属性
    • 内核通过此设备发送/接收 VLAN 标记帧
  • 支持类型

    • 物理网卡 (如 eth0)
    • 绑定接口 (如 bond0)
    • 团队接口 (如 team0)
  • 示例

    bash 复制代码
    dev bond0  # 使用绑定接口作为父设备

3. id - VLAN ID

  • 功能 :定义 802.1Q VLAN 标记值

  • 技术实现

    • 在数据链路层添加 VLAN 标签 (4字节)
    • 格式:0x8100 (TPID) + PCP (3位) + DEI (1位) + VID (12位)
  • 网络要求

    • 交换机端口必须配置为 Trunk 模式
    • 必须允许该 VLAN ID 通过
  • 示例

    bash 复制代码
    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
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. 数据包处理流程

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

3. 配置文件示例

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

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

四、完整命令示例

基础配置

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

高级配置

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

五、验证命令

1. 验证 ifname

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

2. 验证 dev

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

3. 验证 id

bash 复制代码
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 冲突

bash 复制代码
Error: Device 'vlan10' already exists

解决方案

bash 复制代码
# 1. 检查现有接口
ip link show

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

错误2:无效 dev

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

解决方案

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

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

错误3:非法 id

bash 复制代码
Error: invalid vlan id '5000'

解决方案

bash 复制代码
# 使用有效 VLAN ID (1-4094)
sudo nmcli ... id 100

错误4:父设备不支持 VLAN

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

解决方案

bash 复制代码
# 1. 使用有线网卡
sudo nmcli ... dev eth0

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

七、高级应用场景

场景1:同一父设备多 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  # 相同 dev

场景2:QinQ 嵌套 VLAN

bash 复制代码
# 第一层 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

bash 复制代码
# 创建绑定
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. 命名规范

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

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

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

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

    bash 复制代码
    #!/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)
  • 验证命令

    bash 复制代码
    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:保留值(不可用)
  • 验证命令

    bash 复制代码
    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:最小化配置

bash 复制代码
nmcli con add type vlan \
  dev eth0 \
  id 100

效果

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

示例 2:完整配置

bash 复制代码
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:带高级参数的配置

bash 复制代码
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. 企业网络推荐配置

bash 复制代码
# 使用绑定接口作为父设备
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. 验证命令组合

bash 复制代码
# 检查 VLAN 配置
ip -d link show mgmt_vlan | grep 'vlan id'

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

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

故障排除

常见错误 1:VLAN 流量不通

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

bash 复制代码
# 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
解决方案

bash 复制代码
# 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
解决方案

bash 复制代码
# 1. 确认父接口存在
ip link show dev eth0

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

# 3. 加载 VLAN 模块
modprobe 8021q

高级用法

1. QinQ 配置(双标签 VLAN)

bash 复制代码
# 首先创建外层 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 过滤配置

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

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

3. 批量创建脚本

bash 复制代码
#!/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):

ini 复制代码
[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 是标识

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

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

bash 复制代码
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 连接的父接口(配置属性)。
  • 示例

    bash 复制代码
    # 创建 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(配置属性)。
  • 示例

    bash 复制代码
    # 创建 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,需确保名称唯一且符合规范。
  • 示例

    bash 复制代码
    # 自定义接口名称为 vlan100
    nmcli con add type vlan ... ifname "vlan100"

完整命令示例

bash 复制代码
# 创建 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

  • 示例

    bash 复制代码
    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 等。

  • 示例

    bash 复制代码
    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 对应,例如:

      bash 复制代码
      ifname=eth0.100 与 dev=eth0

1.3 vlan.id / id
  • 作用:指定 VLAN 的 ID(VLAN 标签值)。

  • 格式 :整数,范围 0-4094

  • 示例

    bash 复制代码
    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. 参数关系总结

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

3. 使用场景示例

3.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 子接口)。
3.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 子接口)。

4. 常见错误及解决方法

4.1 错误:混淆 ifnamedev
  • 错误示例

    bash 复制代码
    nmcli con add type vlan con-name vlan100 ifname bond0 vlan-id 100
    • 问题ifname 被错误地指定为主设备 bond0,缺少 dev 参数。

    • 解决 :明确区分 ifname(子接口名)和 dev(主设备名):

      bash 复制代码
      nmcli con add type vlan con-name vlan100 ifname bond0.100 dev bond0 vlan-id 100
4.2 错误:未指定 dev 参数
  • 错误示例

    bash 复制代码
    nmcli con add type vlan con-name vlan100 ifname eth0.100 vlan-id 100
    • 问题 :缺少 dev 参数,NetworkManager 无法确定 VLAN 的主设备。

    • 解决 :添加 dev 参数:

      bash 复制代码
      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 对应,例如:

    bash 复制代码
    ifname=eth0.100 与 dev=eth0
    ifname=bond0.200 与 dev=bond0

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







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

一、核心参数详解

1. ifname:VLAN 接口的逻辑名称
  • 作用:定义系统中 VLAN 接口的名称,用于配置和管理。

  • 命名规则 :建议使用 物理设备名.VLANID(如 eth0.10),但可自定义。

  • 示例

    bash 复制代码
    nmcli con add type vlan ifname eth0.10 ...

    创建名为 eth0.10 的 VLAN 接口。

2. dev:VLAN 所基于的物理设备
  • 作用:指定 VLAN 流量实际通过哪个物理网卡传输。

  • 要求 :必须是系统中已存在的物理设备(如 eth0, enp0s3)。

  • 示例

    bash 复制代码
    nmcli con add type vlan dev eth0 ...

    表示该 VLAN 绑定到物理网卡 eth0

3. vlan.parent:VLAN 的父接口
  • 作用 :与 dev 类似,均指定承载 VLAN 的物理设备,但优先级低于 dev

  • 使用场景 :当 dev 未指定时,vlan.parent 生效。

  • 示例

    bash 复制代码
    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 命名空间。
  • 示例

    bash 复制代码
    nmcli con add type vlan id 10 ...  # 简化写法
    nmcli con add type vlan vlan.id 10 ...  # 完整写法

二、参数对比表

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

三、正确用法示例

标准配置(推荐)
bash 复制代码
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(不推荐,兼容性差)
bash 复制代码
nmcli con add type vlan \
  ifname eth0.10 \
  vlan.parent eth0 \         # 等同于 dev eth0
  vlan.id 10 \               # 完整写法
  ...

四、常见错误与注意事项

  1. devvlan.parent 同时存在

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

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

  2. VLAN ID 超出范围

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

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

    bash 复制代码
    # 错误:eth0.10 已存在
    nmcli con add type vlan ifname eth0.10 ...

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

五、验证配置

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

bash 复制代码
# 查看接口列表
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

  • 推荐写法

    bash 复制代码
    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
bash 复制代码
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
bash 复制代码
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 ID vlan.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 功能相同,指定物理父接口

  • 等效关系

    bash 复制代码
    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已废弃)

完整命令示例

bash 复制代码
# 规范写法(推荐)
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

配置验证

bash 复制代码
# 查看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.100 ifname vlan10
dev 父物理接口名称 (承载 VLAN 流量的底层接口,如 eth0bond0 dev eth0
vlan.parent 父接口的等效参数 (与 dev 功能相同,语法更完整) vlan.parent eth0
id VLAN ID 号码 (标识 VLAN 层级,如 100 id 100
vlan.id VLAN 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 流量。两者功能完全相同,仅语法不同:

    bash 复制代码
    # 等效命令
    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 配置
bash 复制代码
# 创建 VLAN ID 100 的子接口 eth0.100,父接口为 eth0,逻辑名称为 vlan100
sudo nmcli con add type vlan ifname vlan100 dev eth0 id 100
(2) 嵌套 VLAN 配置
bash 复制代码
# 在父 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
bash 复制代码
# 在 bond0 接口上创建 VLAN 30,逻辑名称为 bond0.30
sudo nmcli con add type vlan ifname bond0.30 dev bond0 id 30

4. 验证配置

bash 复制代码
# 查看 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?
  • 需先删除原连接,再重新创建:

    bash 复制代码
    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:

    bash 复制代码
    nmcli con modify vlan100 ethernet.mtu 2000

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







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


🔍 一、参数详解

参数 别名/等效参数 作用 是否必需 示例
ifname - 定义新 VLAN 子接口在系统中的名称(逻辑标识) ifname vlan100
dev vlan.parent 指定承载 VLAN 的父接口(物理网卡或逻辑接口如 Bond/Bridge) dev eth0vlan.parent bond0
id vlan.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 必须同时存在,否则命令报错。

    • 示例完整命令:

      bash 复制代码
      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
bash 复制代码
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
bash 复制代码
# 先创建 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),用于操作系统内部标识和管理。

  • 示例

    bash 复制代码
    ifname vlan100  # 系统将创建名为 vlan100 的虚拟接口
  • 特性

    • 用户可自定义名称(如 vlan-officevlan-home)。
    • 需确保名称唯一性,避免与现有接口冲突。

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

  • 作用 :指定承载 VLAN 流量的底层物理接口(如 eth0ens4)或聚合接口(如 Bond、Bridge)。

  • 等价性devvlan.parent 的简写形式,两者功能完全相同。

  • 示例

    bash 复制代码
    dev eth0     # 或 vlan.parent eth0
  • 要求

    • 父接口必须真实存在且支持 VLAN(需加载 8021q 内核模块)。
    • 交换机对应端口需配置为 Trunk 模式,允许指定 VLAN ID 通过。

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

  • 作用 :设置 VLAN 的 ID 号(范围 0--4094),用于在网络中标识 VLAN 流量。

  • 等价性idvlan.id 的简写形式,两者功能相同。

  • 示例

    bash 复制代码
    id 100       # 或 vlan.id 100
  • 要求

    • VLAN ID 需与交换机配置一致,否则网络无法互通。
    • ID 04095 为保留值,通常不可用。

⚙️ 完整命令示例

bash 复制代码
# 创建 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+版本支持)。
  • 示例

    bash 复制代码
    # 旧版写法(兼容)
    dev eth0
    
    # 新版推荐写法
    vlan.parent eth0

3. id vs vlan.id

  • 作用:两者均用于设置VLAN的ID(范围1-4094)。

  • 区别

    • id 是旧版参数,现仍兼容但不推荐
    • vlan.id 是明确且推荐的参数(需NetworkManager 1.14+版本支持)。
  • 示例

    bash 复制代码
    # 旧版写法(兼容)
    id 10
    
    # 新版推荐写法
    vlan.id 10

4. 兼容性与推荐实践

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

完整示例

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

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

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

bash 复制代码
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 查阅官方文档进一步验证。
























相关推荐
Two_brushes.18 分钟前
【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
linux·运维·服务器
FJW02081423 分钟前
【Linux】系统引导修复
linux·运维·服务器
Yama11733 分钟前
SSL与HTTP概述
网络协议·http·ssl
慌糖43 分钟前
CentOS 安装 Redis 简明指南
linux·redis·centos
设计师小聂!1 小时前
linux常用命令(一)
linux·运维·服务器
hnlucky1 小时前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web
cui_win1 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_congestion_control
linux·网络·tcp/ip
yqcoder1 小时前
12. 说一下 https 的加密过程
网络协议·http·https
roboko_2 小时前
TCP详解——流量控制、滑动窗口
服务器·网络·tcp/ip
笑稀了的野生俊2 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found
linux·人工智能·ubuntu·大模型·glibc·flash-attn