Linux的NetworkManager的nmcli connection add
笔记250712
nmcli connection add
命令详解
nmcli connection add
是 NetworkManager 命令行工具中最核心的连接创建命令,用于创建各种类型的网络连接配置。下面我将从基础到高级全面解析这个命令的用法。
命令基本结构
bash
nmcli connection add [通用选项] type <连接类型> [类型专用选项]
核心参数
1. 连接类型 (type
)
必须参数,指定连接的类型:
ethernet
:以太网连接bridge
:网桥连接bond
:绑定(链路聚合)连接vlan
:虚拟局域网连接wifi
:无线网络连接tun
:隧道连接ip-tunnel
:IP 隧道连接infiniband
:InfiniBand 连接bluetooth
:蓝牙连接vpn
:VPN 连接wireguard
:WireGuard VPN 连接
2. 连接名称 (con-name
)
推荐使用,指定连接的名称:
bash
con-name my-connection
- 如果不指定,NetworkManager 会自动生成名称(如 "bridge-br0")
- 名称用于后续管理操作(修改、删除、激活)
3. 接口名称 (ifname
)
必须参数,指定网络接口名称:
bash
ifname br0
- 对于物理接口:使用实际接口名(如
enp3s0
) - 对于虚拟接口:自定义名称(如
br0
,bond0
,vlan100
)
4. 父设备 (dev
)
用于依赖型连接,指定父设备:
bash
dev enp3s0 # 用于 VLAN 或 bridge-slave
- VLAN:指定物理接口或绑定接口
- Bridge-slave:指定物理接口或绑定接口
- Bond-slave:指定物理接口
核心选项详解
1. 必需选项
-
type
:指定连接类型bashtype ethernet # 以太网 type wifi # 无线网络 type bridge # 网桥 type bond # 绑定(链路聚合) type vlan # VLAN type team # 另一种链路聚合技术 type vpn # VPN连接 type infiniband # InfiniBand type bluetooth # 蓝牙
-
con-name
:指定连接名称bashcon-name my-connection
-
ifname
:指定网络接口名称bashifname eth0 # 物理接口 ifname br0 # 虚拟接口
-
dev
:父设备, 用于 VLAN 或 bridge-slavebash
2. 常用可选选项
-
save
:是否保存配置(默认 yes)bashsave no # 创建临时连接(重启后消失)
-
autoconnect
:是否自动连接(默认 yes)bashautoconnect no # 需手动激活
-
master
:指定主设备(用于从属设备)bashmaster br0 # 用于bridge-slave或bond-slave
通用选项(适用于所有连接类型)
选项 | 说明 | 示例 |
---|---|---|
con-name <名称> |
指定连接配置的名称 | con-name my-connection |
ifname <接口名> |
指定网络接口名称 | ifname eth0 |
`autoconnect yes | no` | 是否在启动时自动连接 |
`save yes | no` | 是否保存配置到持久存储 |
--temporary |
创建临时连接(重启后消失) | 等同于 save no |
`ipv4.method auto | manual | disabled` |
ipv4.addresses <IP/掩码> |
设置静态 IPv4 地址 | ipv4.addresses 192.168.1.10/24 |
ipv4.gateway <网关> |
设置 IPv4 默认网关 | ipv4.gateway 192.168.1.1 |
ipv4.dns <DNS服务器> |
设置 DNS 服务器 | ipv4.dns 8.8.8.8 |
ipv4.dns-search <域名> |
设置 DNS 搜索域 | ipv4.dns-search example.com |
`ipv6.method auto | manual | disabled` |
通用选项详解(适用于所有连接类型)
1. 核心标识选项
选项 | 必选 | 说明 | 示例 |
---|---|---|---|
con-name |
✓ | 连接配置的逻辑名称(唯一标识) | con-name "office-lan" |
ifname |
✓ | 网络接口的实际设备名 | ifname eth0 |
type |
✓ | 连接类型(ethernet, bridge, bond, vlan等) | type ethernet |
-
type
连接类型及关键参数类型 描述 关键参数 示例 ethernet
物理以太网卡 ifname
type ethernet ifname eth0
wifi
无线网络 ssid
,wifi-sec.psk
type wifi ssid "MyWiFi" wifi-sec.psk "password"
vlan
VLAN接口 dev
,id
type vlan dev eth0 id 10
bond
绑定接口 mode
type bond mode 802.3ad
bridge
网桥 stp
type bridge stp yes
team
高级绑定 config
type team config '{"runner": {"name": "activebackup"}}'
tun
隧道接口 mode
type tun mode gre
vpn
VPN连接 vpn-type
type vpn vpn-type openvpn
2. 连接行为控制
选项 | 说明 | 默认值 | 示例 |
---|---|---|---|
autoconnect |
是否自动连接 | yes | autoconnect no |
autoconnect-priority |
自动连接优先级 (0-999) | 0 | autoconnect-priority 100 |
save |
是否保存配置到磁盘 | yes | save no |
3. IP配置选项
选项 | 说明 | 示例 |
---|---|---|
ipv4.method |
IPv4配置方法 (auto/manual/disabled/shared) | ipv4.method manual |
ipv4.addresses |
IPv4地址 (CIDR格式) | ipv4.addresses 192.168.1.100/24 |
ipv4.gateway |
IPv4默认网关 | ipv4.gateway 192.168.1.1 |
ipv4.dns |
IPv4 DNS服务器 | ipv4.dns "8.8.8.8 8.8.4.4" |
ipv6.method |
IPv6配置方法 (auto/ignore/dhcp/manual) | ipv6.method auto |
连接类型专用选项
1. ethernet (以太网)
bash
nmcli connection add type ethernet \
con-name "eth-static" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24
专用选项:
mac
:指定MAC地址mac 00:11:22:33:44:55
mtu
:设置MTUethernet.mtu 9000
2. bridge (网桥)
bash
nmcli connection add type bridge \
con-name "server-bridge" \
ifname br0 \
bridge.stp yes \
ipv4.method auto
专用选项:
选项 | 说明 | 示例 |
---|---|---|
bridge.stp |
启用STP | bridge.stp yes |
bridge.priority |
网桥优先级 (0-65535) | bridge.priority 16384 |
bridge.hello-time |
Hello时间 (1-10秒) | bridge.hello-time 2 |
3. bond (绑定)
bash
nmcli connection add type bond \
con-name "ha-bond" \
ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.method manual \
ipv4.addresses 10.0.0.5/24
专用选项:
选项 | 说明 | 示例 |
---|---|---|
bond.options |
绑定模式及参数 | bond.options "mode=802.3ad,miimon=100" |
mode |
绑定模式 (包含在options中) | mode=balance-rr |
4. vlan (虚拟局域网)
bash
nmcli connection add type vlan \
con-name "vlan100" \
ifname eth0.100 \
dev eth0 \
vlan.id 100 \
ipv4.method manual \
ipv4.addresses 192.168.100.10/24
专用选项:
选项 | 说明 | 示例 |
---|---|---|
dev |
父接口设备 | dev eth0 |
vlan.id |
VLAN ID (1-4094) | vlan.id 100 |
5. bridge-slave (网桥成员)
bash
nmcli connection add type bridge-slave \
con-name "bridge-port" \
ifname eth1 \
master br0
专用选项:
选项 | 说明 | 示例 |
---|---|---|
master |
所属主连接名称 | master br0 |
slave-type |
从属类型 (固定为bridge) | slave-type bridge |
6. bond-slave (绑定成员)
bash
nmcli connection add type bond-slave \
con-name "bond-port" \
ifname eth2 \
master bond0
专用选项:
选项 | 说明 | 示例 |
---|---|---|
master |
所属主连接名称 | master bond0 |
slave-type |
从属类型 (固定为bond) | slave-type bond |
高级用法与技巧
1. 批量创建连接
bash
for i in {1..4}; do
nmcli connection add type vlan \
con-name "vlan-10$i" \
ifname "eth0.10$i" \
dev eth0 \
vlan.id "10$i"
done
2. 使用JSON格式配置
bash
nmcli connection add type bond \
con-name json-bond \
ifname bond0 \
bond.options '{"mode":"balance-rr","miimon":"100"}' \
ipv4.method manual \
ipv4.addresses '192.168.2.50/24'
3. 创建临时连接(不保存)
bash
nmcli connection add \
save no \ # 不保存到磁盘
type ethernet \
con-name temp-eth \
ifname eth3 \
ipv4.method auto
4. 克隆现有连接
bash
# 1. 导出配置
nmcli -g all connection show eth-static > eth-static.conf
# 2. 修改配置
sed 's/eth0/eth1/g' eth-static.conf > eth-static-eth1.conf
# 3. 导入新连接
nmcli connection import type ethernet file eth-static-eth1.conf
五、综合,完整,企业级配置示例
企业级网络:绑定 → VLAN → 网桥
例一
bash
# 1. 创建绑定
nmcli connection add type bond \
con-name trunk-bond \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast"
# 2. 添加绑定成员
nmcli connection add type bond-slave \
con-name bond-slave-eth1 \
ifname eth1 \
master bond0
nmcli connection add type bond-slave \
con-name bond-slave-eth2 \
ifname eth2 \
master bond0
# 3. 在绑定上创建VLAN
nmcli connection add type vlan \
con-name vlan100 \
ifname vlan100 \
dev bond0 \
vlan.id 100
# 4. 创建网桥并添加VLAN
nmcli connection add type bridge \
con-name br-vlan100 \
ifname br100 \
bridge.stp no
nmcli connection add type bridge-slave \
con-name br100-port \
ifname vlan100 \
master br100
# 5. 配置网桥IP
nmcli connection modify br-vlan100 \
ipv4.method manual \
ipv4.addresses 10.100.0.1/24
例二
bash
# 1. 创建绑定
nmcli con add type bond con-name "bond0" ifname bond0 \
bond.options "mode=802.3ad,miimon=100"
# 2. 添加从属接口
nmcli con add type bond-slave con-name "bond0-eth1" \
ifname eth1 master bond0
nmcli con add type bond-slave con-name "bond0-eth2" \
ifname eth2 master bond0
# 3. 在绑定上创建VLAN
nmcli con add type vlan con-name "vlan-bond" \
ifname vlan30 dev bond0 id 30
# 4. 创建网桥
nmcli con add type bridge con-name "br-vlan30" \
ifname br-vlan30 bridge.stp no
# 5. 将VLAN加入网桥
nmcli con add type bridge-slave con-name "br-slave-vlan30" \
ifname vlan30 master br-vlan30
# 6. 配置网桥IP
nmcli con modify "br-vlan30" \
ipv4.addresses 192.168.30.1/24 \
ipv4.method manual
例三
bash
# 1. 创建绑定接口
nmcli con add type bond \
con-name mybond \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100" \
ipv4.method auto
# 2. 添加物理接口到绑定
nmcli con add type bond-slave \
con-name bond-eth1 \
ifname eth1 \
master mybond
nmcli con add type bond-slave \
con-name bond-eth2 \
ifname eth2 \
master mybond
# 3. 在绑定接口上创建VLAN
nmcli con add type vlan \
con-name vlan20 \
ifname bond0.20 \
dev bond0 \
id 20 \
ipv4.method manual \
ipv4.addresses 10.20.0.5/24
# 4. 激活连接
nmcli con up bond-eth1
nmcli con up bond-eth2
nmcli con up mybond
nmcli con up vlan20
例四
bash
# 1. 创建绑定接口
nmcli con add type bond con-name "core-bond" ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast"
# 2. 添加物理网卡到绑定
nmcli con add type bond-slave con-name "bond-slave1" ifname eth1 master bond0
nmcli con add type bond-slave con-name "bond-slave2" ifname eth2 master bond0
# 3. 在绑定上创建VLAN
nmcli con add type vlan con-name "vlan-mgmt" ifname vlan10 dev bond0 id 10
nmcli con add type vlan con-name "vlan-data" ifname vlan20 dev bond0 id 20
# 4. 创建管理网桥
nmcli con add type bridge con-name "br-mgmt" ifname br-mgmt \
ipv4.method manual \
ipv4.addresses 10.10.10.1/24 \
bridge.stp no
# 5. 将管理VLAN加入网桥
nmcli con add type bridge-slave con-name "br-slave-mgmt" \
ifname vlan10 master br-mgmt
# 6. 创建数据网桥
nmcli con add type bridge con-name "br-data" ifname br-data \
ipv4.method disabled \
bridge.stp no
# 7. 将数据VLAN加入网桥
nmcli con add type bridge-slave con-name "br-slave-data" \
ifname vlan20 master br-data
例五
bash
# 1. 创建绑定
nmcli con add type bond con-name bond0 ifname bond0 mode=802.3ad
# 2. 添加从接口
nmcli con add type ethernet con-name bond0-slave1 ifname enp3s0 master bond0
nmcli con add type ethernet con-name bond0-slave2 ifname enp4s0 master bond0
# 3. 在绑定上创建 VLAN
nmcli con add type vlan con-name bond0.300 ifname vlan300 dev bond0 id 300
# 4. 创建网桥并添加 VLAN
nmcli con add type bridge con-name br300 ifname br300
nmcli con add type bridge-slave con-name br300-port ifname vlan300 master br300
# 5. 配置网桥 IP
nmcli con mod br300 ipv4.addresses 172.16.30.1/24 ipv4.method manual
六、连接管理命令
1. 启动/停止连接
bash
nmcli connection up br-vlan100
nmcli connection down br-vlan100
2. 修改配置
bash
nmcli connection modify br-vlan100 \
ipv4.addresses "10.100.0.2/24" \
ipv4.gateway "10.100.0.254"
3. 重载配置
bash
nmcli connection reload
4. 删除连接
bash
nmcli connection delete br-vlan100
七、特殊连接类型
1. team (组合接口)
bash
nmcli connection add type team \
con-name team0 \
ifname team0 \
team.config '{"runner": {"name": "activebackup"}}' \
ipv4.method manual \
ipv4.addresses 192.168.5.5/24
2. ip-tunnel (IP隧道)
bash
nmcli connection add type ip-tunnel \
con-name gre-tunnel \
ifname gre1 \
ip-tunnel.mode gre \
ip-tunnel.local 192.168.1.100 \
ip-tunnel.remote 203.0.113.5 \
ipv4.method manual \
ipv4.addresses 10.8.0.2/24
3. vxlan (虚拟扩展LAN)
bash
nmcli connection add type vxlan \
con-name vxlan100 \
ifname vxlan100 \
vxlan.id 100 \
vxlan.local 192.168.1.100 \
vxlan.remote 203.0.113.10 \
vxlan.dev eth0
八、调试与排错
1. 模拟运行(dry-run)
bash
nmcli --ask connection add \
type bridge \
con-name test-br \
ifname br-test \
--dry-run
2. 详细日志
bash
NMCLI_DEBUG=debug,all nmcli -t connection add ...
3. 查看生成的文件
bash
# 查看生成的配置文件
ls /run/NetworkManager/system-connections/
# 查看最终配置文件
ls /etc/NetworkManager/system-connections/
九、最佳实践
-
命名规范:
bash# 好:明确用途 nmcli connection add type bridge con-name "server-bridge" ... # 差:模糊命名 nmcli connection add type bridge con-name "br0" ...
-
配置顺序:
graph LR A[物理接口] --> B[绑定] B --> C[VLAN] C --> D[网桥] D --> E[IP配置] -
参数验证:
bash# 检查参数是否有效 nmcli connection add help type bond
-
配置备份:
bash# 定期备份配置 cp -a /etc/NetworkManager/system-connections/ /backup/
十、常见错误解决
错误1: "Connection activation failed"
bash
# 查看详细日志
journalctl -u NetworkManager -f
# 常见原因:设备被占用/IP冲突
错误2: "Device not found"
bash
# 检查设备名称
ip link show
# 检查设备状态
nmcli device status
错误3: "Invalid option"
bash
# 检查选项拼写
nmcli connection add help type bridge
# 检查JSON格式
echo '{"runner":{"name":"activebackup"}}' | jq .
错误4: "Master connection not found"
bash
# 确保先创建主连接
nmcli connection show | grep bond0
# 正确顺序:
# 1. 创建主连接 (bond/bridge)
# 2. 创建从属连接 (slave)
nmcli connection add
是 Linux 网络配置的核心工具,掌握它可以高效管理从简单到复杂的各种网络拓扑。通过组合不同类型的连接和选项,可以构建出满足各种需求的网络架构。
nmcli connection add type
命令详解
nmcli connection add type
是 NetworkManager 中最核心的连接创建命令,用于创建各种类型的网络连接配置。以下是对该命令的全面解析:
一、命令基本结构
bash
nmcli connection add
type <connection-type>
[connection.id <name>]
[ifname <interface-name>]
[其他类型特定参数]
二、核心参数说明
1. type
- 连接类型(必需)
指定要创建的网络连接类型:
-
ethernet
:物理以太网 -
bridge
:网桥 -
bond
:绑定接口 -
vlan
:虚拟局域网 -
bridge-slave
:网桥从属接口 -
bond-slave
:绑定从属接口 -
team
:协作接口 -
vpn
:VPN连接 -
wifi
:无线网络 -
type
类型:类型( type
)扩展参数示例 说明 ethernet
[空]
常规以太网接口(无需额外参数)。 wifi
ssid <SSID>
wifi-sec.psk <密码>
配置无线网络需指定 SSID 和密码。 bridge
bridge.stp no
bridge.forward-delay 0
设置网桥参数(如生成树协议、转发延迟)。 bond
bond.options "mode=802.3ad,miimon=100"
绑定接口参数(模式、链路检测间隔)。 vlan
dev <父接口>
vlan.id <ID>
父接口名称和 VLAN ID。 bridge-slave
bond-slave
master <主接口名>
将接口加入主接口(网桥/绑定)。
2. `connection.id` - 连接名称(推荐) - **作用**:逻辑连接名称(配置文件标识) - **默认**:如果不指定,自动生成 "type-ifname" 格式名 - **示例**:`connection.id "Office-Network"`
3. ifname
- 接口名称(必需)
- 作用:操作系统识别的物理/虚拟接口名
- 注意:必须与实际存在的接口匹配
- 示例 :
ifname eth0
,ifname br0
三、不同类型配置详解
1. 以太网 (ethernet)
bash
nmcli con add type ethernet
con-name "eth-primary"
ifname eth0
ipv4.method auto # DHCP
# ipv4.method manual # 静态IP
# ipv4.addresses 192.168.1.100/24
# ipv4.gateway 192.168.1.1
# ipv4.dns "8.8.8.8"
2. 网桥 (bridge)
bash
nmcli con add type bridge
con-name "main-bridge"
ifname br0
bridge.stp no # 禁用生成树协议
ipv4.method manual
ipv4.addresses 10.0.0.1/24
3. 绑定 (bond)
bash
nmcli con add type bond
con-name "bond0"
ifname bond0
bond.options "mode=802.3ad,miimon=100"
ipv4.method auto
4. 虚拟局域网 (vlan)
bash
nmcli con add type vlan
con-name "vlan-finance"
ifname vlan10
dev eth0 # 父设备
id 10 # VLAN ID
ipv4.addresses 10.10.10.2/24
5. 网桥从属 (bridge-slave)
bash
nmcli con add type bridge-slave
con-name "br-slave-eth1"
ifname eth1
master br0 # 关联的网桥名称
6. 绑定从属 (bond-slave)
bash
nmcli con add type bond-slave
con-name "bond0-slave1"
ifname eth1
master bond0 # 关联的绑定名称
四、高级参数配置
1. IP 配置参数
bash
ipv4.method <auto|manual|disabled|link-local>
ipv4.addresses <IP/prefix> # 多个地址用逗号分隔
ipv4.gateway <gateway-ip>
ipv4.dns <dns-ip> # 多个DNS用逗号分隔
ipv4.dns-search <domain> # DNS搜索域
ipv4.ignore-auto-dns <yes|no>
2. 网桥专用参数
bash
bridge.stp <yes|no> # 生成树协议
bridge.priority <0-65535> # 网桥优先级
bridge.forward-delay <0-30> # 转发延迟(秒)
bridge.hello-time <1-10> # Hello包间隔
bridge.max-age <6-40> # 最大消息年龄
bridge.ageing-time <0-1000000> # MAC老化时间(秒)
3. 绑定专用参数
bash
bond.options "mode=<mode>,<key>=<value>,..."
# 模式选项:
# balance-rr, active-backup, balance-xor,
# broadcast, 802.3ad, balance-tlb, balance-alb
# 其他选项:
# miimon=100, lacp_rate=fast, xmit_hash_policy=layer3+4
五、配置关系图
六、完整配置示例
场景:绑定+网桥+VLAN
bash
# 1. 创建绑定
nmcli con add type bond con-name "bond0" ifname bond0 \
bond.options "mode=802.3ad,miimon=100"
# 2. 添加从属接口
nmcli con add type bond-slave con-name "bond0-eth1" \
ifname eth1 master bond0
nmcli con add type bond-slave con-name "bond0-eth2" \
ifname eth2 master bond0
# 3. 在绑定上创建VLAN
nmcli con add type vlan con-name "vlan-bond" \
ifname vlan30 dev bond0 id 30
# 4. 创建网桥
nmcli con add type bridge con-name "br-vlan30" \
ifname br-vlan30 bridge.stp no
# 5. 将VLAN加入网桥
nmcli con add type bridge-slave con-name "br-slave-vlan30" \
ifname vlan30 master br-vlan30
# 6. 配置网桥IP
nmcli con modify "br-vlan30" \
ipv4.addresses 192.168.30.1/24 \
ipv4.method manual
七、连接管理命令
1. 查看连接
bash
nmcli con show # 所有连接
nmcli con show <con-name> # 特定连接详情
nmcli -f GENERAL,IP4 con show # 特定字段
2. 控制连接状态
bash
nmcli con up <con-name> # 启用连接
nmcli con down <con-name> # 禁用连接
nmcli con delete <con-name> # 删除连接
3. 修改连接
bash
nmcli con mod <con-name> <property> <value>
# 示例:添加辅助IP
nmcli con mod "br-vlan30" +ipv4.addresses "10.30.0.1/24"
八、常见错误处理
错误 | 原因 | 解决方案 |
---|---|---|
Error: Connection activation failed: No suitable device found |
接口不存在 | 检查 ifname 是否正确 |
Error: Master connection not found |
依赖连接未创建 | 先创建主连接 |
Error: bond-slave option is required |
缺少必要参数 | 检查 master 参数 |
Error: VLAN connection needs dev and id properties |
VLAN配置不全 | 补全 dev 和 id |
九、最佳实践
-
命名规范:
bash# 物理连接: eth0-primary # 网桥: br-dmz, br-internal # VLAN: vlan10-finance # 绑定: bond0-lacp
-
配置顺序:
graph LR A[物理接口] --> B[绑定/VLAN] B --> C[网桥] C --> D[IP配置] -
持久化检查:
bash# 确认配置已保存 ls /etc/NetworkManager/system-connections/ # 重载配置 nmcli con reload
-
批量操作脚本:
bash#!/bin/bash # 创建基础网桥 nmcli con add type bridge con-name core-bridge ifname br-core # 添加物理接口 nmcli con add type bridge-slave ifname eth0 master core-bridge # 配置IP nmcli con mod core-bridge ipv4.addresses 10.0.0.1/24 ipv4.method manual # 激活 nmcli con up core-bridge
掌握 nmcli connection add type
命令,您可以高效地配置从简单到复杂的各种网络拓扑结构,满足不同场景的网络需求。
nmcli connection add
命令详解
nmcli connection add
是 NetworkManager 命令行工具中用于创建新网络连接配置的核心命令。它支持创建各种类型的网络连接,包括以太网、Wi-Fi、VLAN、绑定、网桥等。下面从多个维度详细解析该命令的使用方法和参数。
一、基础语法结构
bash
nmcli connection add [选项] type <连接类型> [属性键值对]
核心组成部分:
type
(必需):指定连接类型con-name
:自定义连接名称(逻辑标识)ifname
:绑定的网络接口名[属性键值对]
:类型特定的配置参数
二、type
连接类型及关键参数
类型 | 描述 | 关键参数 | 示例 |
---|---|---|---|
ethernet |
物理以太网卡 | ifname |
type ethernet ifname eth0 |
wifi |
无线网络 | ssid , wifi-sec.psk |
type wifi ssid "MyWiFi" wifi-sec.psk "password" |
vlan |
VLAN接口 | dev , id |
type vlan dev eth0 id 10 |
bond |
绑定接口 | mode |
type bond mode 802.3ad |
bridge |
网桥 | stp |
type bridge stp yes |
team |
高级绑定 | config |
type team config '{"runner": {"name": "activebackup"}}' |
tun |
隧道接口 | mode |
type tun mode gre |
vpn |
VPN连接 | vpn-type |
type vpn vpn-type openvpn |
三、常用选项详解
1. 基础选项
选项 | 描述 | 默认值 |
---|---|---|
con-name |
连接名称 | 自动生成 |
ifname |
接口名称 | - |
autoconnect |
是否自动连接 | yes |
save |
是否保存配置 | yes |
--temporary |
创建临时连接 | 不保存 |
2. IP配置选项
选项 | 描述 |
---|---|
ipv4.method |
auto (DHCP) 或 manual (静态) |
ipv4.addresses |
IPv4地址/掩码 (如 192.168.1.100/24 ) |
ipv4.gateway |
默认网关 |
ipv4.dns |
DNS服务器 |
ipv6.method |
IPv6配置方法 |
四、典型配置示例
1. 创建以太网连接
bash
# 静态IP配置
sudo nmcli connection add type ethernet \
con-name "office-lan" \
ifname eth0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8" \
ipv4.method manual
# DHCP配置
sudo nmcli connection add type ethernet \
con-name "dhcp-lan" \
ifname eth0 \
ipv4.method auto
2. 创建VLAN连接
bash
sudo nmcli connection add type vlan \
con-name "vlan10" \
ifname vlan10 \
dev eth0 \
id 10 \
ipv4.method auto
3. 创建绑定接口
bash
# 创建绑定接口
sudo nmcli connection add type bond \
con-name "bond0" \
ifname bond0 \
mode 802.3ad
# 添加从属接口
sudo nmcli connection add type bond-slave \
con-name "bond-slave1" \
ifname eth1 \
master bond0
4. 创建网桥
bash
# 创建网桥
sudo nmcli connection add type bridge \
con-name "br0" \
ifname br0 \
stp yes
# 添加物理接口到网桥
sudo nmcli connection add type bridge-slave \
con-name "br-slave" \
ifname eth0 \
master br0
5. 创建Wi-Fi连接
bash
sudo nmcli connection add type wifi \
con-name "home-wifi" \
ifname wlan0 \
ssid "HomeNetwork" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "mypassword"
五、高级用法
1. 批量添加多个IP地址
bash
sudo nmcli connection add type ethernet \
con-name "multi-ip" \
ifname eth0 \
ipv4.addresses "192.168.1.100/24, 10.0.0.100/8" \
ipv4.method manual
2. 创建临时连接(不保存)
bash
sudo nmcli connection add --temporary \
type ethernet \
ifname eth0 \
ipv4.method auto
3. 指定连接区域(防火墙)
bash
sudo nmcli connection add type ethernet \
con-name "dmz-eth" \
ifname eth0 \
connection.zone "dmz" \
ipv4.method manual
4. 创建VLAN over Bond
bash
# 创建绑定
sudo nmcli connection add type bond \
con-name "bond0" \
ifname bond0 \
mode 802.3ad
# 创建VLAN
sudo nmcli connection add type vlan \
con-name "vlan-bond10" \
ifname vlan10 \
dev bond0 \
id 10
六、属性操作技巧
1. 添加/删除属性值
bash
# 添加额外IP地址
sudo nmcli connection modify "my-conn" +ipv4.addresses "10.0.0.200/8"
# 删除IP地址
sudo nmcli connection modify "my-conn" -ipv4.addresses "10.0.0.200/8"
2. 查看支持的属性
bash
# 查看ethernet类型支持的属性
nmcli connection add type ethernet help
七、配置生命周期管理
1. 激活连接
bash
sudo nmcli connection up "office-lan"
2. 停用连接
bash
sudo nmcli connection down "office-lan"
3. 删除连接
bash
sudo nmcli connection delete "office-lan"
4. 重载配置
bash
sudo nmcli connection reload
八、最佳实践与注意事项
-
命名规范:
bash# 使用类型-用途命名 con-name: eth-office, vlan10-finance, br-database
-
配置顺序:
graph LR A[物理接口] --> B[绑定] B --> C[VLAN] C --> D[网桥]按顺序创建:物理接口 → 绑定 → VLAN → 网桥
-
权限管理:
bash# 配置文件位置 /etc/NetworkManager/system-connections/ # 权限设置 chmod 600 /etc/NetworkManager/system-connections/*
-
远程操作防护:
bash# 使用nohup防止中断 nohup sudo nmcli connection add type bridge ... & # 使用临时连接测试 nmcli connection add --temporary ...
-
配置备份:
bash# 备份所有连接 sudo cp -r /etc/NetworkManager/system-connections/ ~/nm-backup # 导出单个连接 nmcli connection show "office-lan" > office-lan-config.nmconnection
九、常见错误处理
1. "Connection activation failed"
bash
# 查看详细错误
journalctl -u NetworkManager -b -0 -e
# 常见原因:
# - 接口已被其他连接占用
# - IP地址冲突
# - 依赖服务未启动
2. "Device not managed"
bash
# 检查设备管理状态
nmcli device status
# 启用设备管理
sudo nmcli device set eth0 managed yes
3. "Invalid property"
bash
# 查看支持的属性
nmcli connection add type bridge help
# 检查属性拼写
# 正确:ipv4.method
# 错误:ipv4-method
4. "VLAN connection not working"
bash
# 检查父设备状态
ip link show eth0
# 验证VLAN模块加载
lsmod | grep 8021q
# 手动加载模块
sudo modprobe 8021q
十、总结
nmcli connection add
是配置 Linux 网络的核心命令:
- 灵活支持多种网络类型:从基础以太网到复杂 VLAN/网桥
- 细粒度控制:通过键值对精确配置每个参数
- 持久化存储:配置自动保存到文件系统
- 批量操作能力:适合自动化脚本部署
通过掌握此命令,您可以高效管理各种网络场景:
- 服务器网络配置
- 虚拟化网络拓扑
- 容器网络连接
- 复杂企业网络架构
nmcli connection add
命令详解
nmcli connection add
是 NetworkManager 命令行工具中最核心的连接创建命令,用于创建各种类型的网络连接配置。下面我将从基础到高级全面解析这个命令的用法。
一、命令基本结构
bash
nmcli connection add [通用选项] type <连接类型> [类型专用选项]
二、通用选项详解(适用于所有连接类型)
1. 核心标识选项
选项 | 必选 | 说明 | 示例 |
---|---|---|---|
con-name |
✓ | 连接配置的逻辑名称(唯一标识) | con-name "office-lan" |
ifname |
✓ | 网络接口的实际设备名 | ifname eth0 |
type |
✓ | 连接类型(ethernet, bridge, bond, vlan等) | type ethernet |
2. 连接行为控制
选项 | 说明 | 默认值 | 示例 |
---|---|---|---|
autoconnect |
是否自动连接 | yes | autoconnect no |
autoconnect-priority |
自动连接优先级 (0-999) | 0 | autoconnect-priority 100 |
save |
是否保存配置到磁盘 | yes | save no |
3. IP配置选项
选项 | 说明 | 示例 |
---|---|---|
ipv4.method |
IPv4配置方法 (auto/manual/disabled/shared) | ipv4.method manual |
ipv4.addresses |
IPv4地址 (CIDR格式) | ipv4.addresses 192.168.1.100/24 |
ipv4.gateway |
IPv4默认网关 | ipv4.gateway 192.168.1.1 |
ipv4.dns |
IPv4 DNS服务器 | ipv4.dns "8.8.8.8 8.8.4.4" |
ipv6.method |
IPv6配置方法 (auto/ignore/dhcp/manual) | ipv6.method auto |
三、连接类型专用选项
1. ethernet (以太网)
bash
nmcli connection add type ethernet \
con-name "eth-static" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24
专用选项:
mac
:指定MAC地址mac 00:11:22:33:44:55
mtu
:设置MTUethernet.mtu 9000
2. bridge (网桥)
bash
nmcli connection add type bridge \
con-name "server-bridge" \
ifname br0 \
bridge.stp yes \
ipv4.method auto
专用选项:
选项 | 说明 | 示例 |
---|---|---|
bridge.stp |
启用STP | bridge.stp yes |
bridge.priority |
网桥优先级 (0-65535) | bridge.priority 16384 |
bridge.hello-time |
Hello时间 (1-10秒) | bridge.hello-time 2 |
3. bond (绑定)
bash
nmcli connection add type bond \
con-name "ha-bond" \
ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.method manual \
ipv4.addresses 10.0.0.5/24
专用选项:
选项 | 说明 | 示例 |
---|---|---|
bond.options |
绑定模式及参数 | bond.options "mode=802.3ad,miimon=100" |
mode |
绑定模式 (包含在options中) | mode=balance-rr |
4. vlan (虚拟局域网)
bash
nmcli connection add type vlan \
con-name "vlan100" \
ifname eth0.100 \
dev eth0 \
vlan.id 100 \
ipv4.method manual \
ipv4.addresses 192.168.100.10/24
专用选项:
选项 | 说明 | 示例 |
---|---|---|
dev |
父接口设备 | dev eth0 |
vlan.id |
VLAN ID (1-4094) | vlan.id 100 |
5. bridge-slave (网桥成员)
bash
nmcli connection add type bridge-slave \
con-name "bridge-port" \
ifname eth1 \
master br0
专用选项:
选项 | 说明 | 示例 |
---|---|---|
master |
所属主连接名称 | master br0 |
slave-type |
从属类型 (固定为bridge) | slave-type bridge |
6. bond-slave (绑定成员)
bash
nmcli connection add type bond-slave \
con-name "bond-port" \
ifname eth2 \
master bond0
专用选项:
选项 | 说明 | 示例 |
---|---|---|
master |
所属主连接名称 | master bond0 |
slave-type |
从属类型 (固定为bond) | slave-type bond |
四、高级用法与技巧
1. 批量创建连接
bash
for i in {1..4}; do
nmcli connection add type vlan \
con-name "vlan-10$i" \
ifname "eth0.10$i" \
dev eth0 \
vlan.id "10$i"
done
2. 使用JSON格式配置
bash
nmcli connection add type bond \
con-name json-bond \
ifname bond0 \
bond.options '{"mode":"balance-rr","miimon":"100"}' \
ipv4.method manual \
ipv4.addresses '192.168.2.50/24'
3. 创建临时连接(不保存)
bash
nmcli connection add \
save no \ # 不保存到磁盘
type ethernet \
con-name temp-eth \
ifname eth3 \
ipv4.method auto
4. 克隆现有连接
bash
# 1. 导出配置
nmcli -g all connection show eth-static > eth-static.conf
# 2. 修改配置
sed 's/eth0/eth1/g' eth-static.conf > eth-static-eth1.conf
# 3. 导入新连接
nmcli connection import type ethernet file eth-static-eth1.conf
五、综合配置示例
企业级网络:绑定 → VLAN → 网桥
bash
# 1. 创建绑定
nmcli connection add type bond \
con-name trunk-bond \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast"
# 2. 添加绑定成员
nmcli connection add type bond-slave \
con-name bond-slave-eth1 \
ifname eth1 \
master bond0
nmcli connection add type bond-slave \
con-name bond-slave-eth2 \
ifname eth2 \
master bond0
# 3. 在绑定上创建VLAN
nmcli connection add type vlan \
con-name vlan100 \
ifname vlan100 \
dev bond0 \
vlan.id 100
# 4. 创建网桥并添加VLAN
nmcli connection add type bridge \
con-name br-vlan100 \
ifname br100 \
bridge.stp no
nmcli connection add type bridge-slave \
con-name br100-port \
ifname vlan100 \
master br100
# 5. 配置网桥IP
nmcli connection modify br-vlan100 \
ipv4.method manual \
ipv4.addresses 10.100.0.1/24
六、连接管理命令
1. 启动/停止连接
bash
nmcli connection up br-vlan100
nmcli connection down br-vlan100
2. 修改配置
bash
nmcli connection modify br-vlan100 \
ipv4.addresses "10.100.0.2/24" \
ipv4.gateway "10.100.0.254"
3. 重载配置
bash
nmcli connection reload
4. 删除连接
bash
nmcli connection delete br-vlan100
七、特殊连接类型
1. team (组合接口)
bash
nmcli connection add type team \
con-name team0 \
ifname team0 \
team.config '{"runner": {"name": "activebackup"}}' \
ipv4.method manual \
ipv4.addresses 192.168.5.5/24
2. ip-tunnel (IP隧道)
bash
nmcli connection add type ip-tunnel \
con-name gre-tunnel \
ifname gre1 \
ip-tunnel.mode gre \
ip-tunnel.local 192.168.1.100 \
ip-tunnel.remote 203.0.113.5 \
ipv4.method manual \
ipv4.addresses 10.8.0.2/24
3. vxlan (虚拟扩展LAN)
bash
nmcli connection add type vxlan \
con-name vxlan100 \
ifname vxlan100 \
vxlan.id 100 \
vxlan.local 192.168.1.100 \
vxlan.remote 203.0.113.10 \
vxlan.dev eth0
八、调试与排错
1. 模拟运行(dry-run)
bash
nmcli --ask connection add \
type bridge \
con-name test-br \
ifname br-test \
--dry-run
2. 详细日志
bash
NMCLI_DEBUG=debug,all nmcli -t connection add ...
3. 查看生成的文件
bash
# 查看生成的配置文件
ls /run/NetworkManager/system-connections/
# 查看最终配置文件
ls /etc/NetworkManager/system-connections/
九、最佳实践
-
命名规范:
bash# 好:明确用途 nmcli connection add type bridge con-name "server-bridge" ... # 差:模糊命名 nmcli connection add type bridge con-name "br0" ...
-
配置顺序:
graph LR A[物理接口] --> B[绑定] B --> C[VLAN] C --> D[网桥] D --> E[IP配置] -
参数验证:
bash# 检查参数是否有效 nmcli connection add help type bond
-
配置备份:
bash# 定期备份配置 cp -a /etc/NetworkManager/system-connections/ /backup/
十、常见错误解决
错误1: "Connection activation failed"
bash
# 查看详细日志
journalctl -u NetworkManager -f
# 常见原因:设备被占用/IP冲突
错误2: "Device not found"
bash
# 检查设备名称
ip link show
# 检查设备状态
nmcli device status
错误3: "Invalid option"
bash
# 检查选项拼写
nmcli connection add help type bridge
# 检查JSON格式
echo '{"runner":{"name":"activebackup"}}' | jq .
错误4: "Master connection not found"
bash
# 确保先创建主连接
nmcli connection show | grep bond0
# 正确顺序:
# 1. 创建主连接 (bond/bridge)
# 2. 创建从属连接 (slave)
nmcli connection add
是 Linux 网络配置的核心工具,掌握它可以高效管理从简单到复杂的各种网络拓扑。通过组合不同类型的连接和选项,可以构建出满足各种需求的网络架构。
nmcli connection add
命令详解
nmcli connection add
是 NetworkManager 中用于创建新网络连接的核心命令。它允许您配置各种类型的网络接口,包括以太网、Wi-Fi、网桥、绑定、VLAN 等。下面是该命令的全面解析:
基本语法
bash
nmcli connection add [通用选项] type <连接类型> [类型特定选项]
通用选项(适用于所有连接类型)
选项 | 说明 | 示例 |
---|---|---|
con-name <名称> |
指定连接配置的名称 | con-name my-connection |
ifname <接口名> |
指定网络接口名称 | ifname eth0 |
`autoconnect yes | no` | 是否在启动时自动连接 |
`save yes | no` | 是否保存配置到持久存储 |
--temporary |
创建临时连接(重启后消失) | 等同于 save no |
`ipv4.method auto | manual | disabled` |
ipv4.addresses <IP/掩码> |
设置静态 IPv4 地址 | ipv4.addresses 192.168.1.10/24 |
ipv4.gateway <网关> |
设置 IPv4 默认网关 | ipv4.gateway 192.168.1.1 |
ipv4.dns <DNS服务器> |
设置 DNS 服务器 | ipv4.dns 8.8.8.8 |
ipv4.dns-search <域名> |
设置 DNS 搜索域 | ipv4.dns-search example.com |
`ipv6.method auto | manual | disabled` |
常见连接类型及特定选项
1. 以太网 (ethernet)
bash
nmcli con add type ethernet \
con-name "eth-connection" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 1.1.1.1"
2. Wi-Fi (wifi)
bash
nmcli con add type wifi \
con-name "my-wifi" \
ifname wlan0 \
ssid "MyNetwork" \
802-11-wireless-security.key-mgmt wpa-psk \
802-11-wireless-security.psk "my-password"
3. 网桥 (bridge)
bash
# 创建网桥
nmcli con add type bridge \
con-name br0 \
ifname br0 \
ipv4.method auto
# 添加物理接口到网桥
nmcli con add type bridge-slave \
con-name br0-port1 \
ifname eth0 \
master br0
4. 绑定 (bond)
bash
# 创建绑定接口
nmcli con add type bond \
con-name bond0 \
ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.method manual \
ipv4.addresses 10.0.0.5/24
# 添加从属接口
nmcli con add type bond-slave \
con-name bond0-eth1 \
ifname eth1 \
master bond0
5. VLAN (vlan)
bash
nmcli con add type vlan \
con-name vlan10 \
ifname eth0.10 \
dev eth0 \
id 10 \
ipv4.method manual \
ipv4.addresses 192.168.10.5/24
6. 团队 (team) - 注意:较新系统推荐使用bond
bash
nmcli con add type team \
con-name team0 \
ifname team0 \
team.config '{"runner": {"name": "activebackup"}}'
高级选项和特性
绑定模式选项 (bond.options)
bash
# 常用模式
bond.options "mode=balance-rr" # 轮询
bond.options "mode=active-backup" # 主备
bond.options "mode=802.3ad" # LACP聚合
# 高级选项
bond.options "mode=802.3ad,miimon=100,xmit_hash_policy=layer3+4"
网桥选项
bash
bridge.stp yes # 启用生成树协议
bridge.priority 16384 # 设置桥优先级(0-65535)
bridge.forward-delay 15 # 设置转发延迟(秒)
bridge.vlan-filtering yes # 启用VLAN过滤
VLAN选项
bash
vlan.flags 1 # VLAN标志(1=重排序头)
vlan.ingress-priority-map "0:3,1:4" # 入口优先级映射
连接管理相关命令
命令 | 说明 |
---|---|
nmcli con show |
显示所有连接 |
nmcli con up <name> |
激活连接 |
nmcli con down <name> |
停用连接 |
nmcli con modify <name> <参数> |
修改现有连接 |
nmcli con delete <name> |
删除连接 |
nmcli con reload |
重载所有连接配置 |
重要注意事项
-
命名规范:
- 连接名称(
con-name
)和接口名称(ifname
)是不同的概念 con-name
是配置的名称,ifname
是实际的网络接口名
- 连接名称(
-
依赖关系:
- 创建从属接口(如bridge-slave)前需先创建主接口(如bridge)
- 激活顺序:先激活从属接口,再激活主接口
-
配置文件位置:
- 持久化配置存储在
/etc/NetworkManager/system-connections/
- 临时连接不会保存到磁盘
- 持久化配置存储在
-
冲突解决:
- 当多个连接可用于同一接口时,使用
connection.autoconnect-priority
控制优先级 - 使用
nmcli dev status
查看设备状态和当前连接
- 当多个连接可用于同一接口时,使用
-
组合配置: 可以创建复杂拓扑,如绑定接口上的VLAN:
bash# 在bond0上创建VLAN 20 nmcli con add type vlan con-name bond0-vlan20 ifname bond0.20 dev bond0 id 20
完整示例:创建带VLAN的绑定接口
bash
# 1. 创建绑定接口
nmcli con add type bond \
con-name mybond \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100" \
ipv4.method auto
# 2. 添加物理接口到绑定
nmcli con add type bond-slave \
con-name bond-eth1 \
ifname eth1 \
master mybond
nmcli con add type bond-slave \
con-name bond-eth2 \
ifname eth2 \
master mybond
# 3. 在绑定接口上创建VLAN
nmcli con add type vlan \
con-name vlan20 \
ifname bond0.20 \
dev bond0 \
id 20 \
ipv4.method manual \
ipv4.addresses 10.20.0.5/24
# 4. 激活连接
nmcli con up bond-eth1
nmcli con up bond-eth2
nmcli con up mybond
nmcli con up vlan20
通过nmcli connection add
命令,您可以高效地配置各种网络拓扑,从简单的以太网连接到复杂的绑定+网桥+VLAN组合。所有配置会立即生效并自动持久化(除非使用--temporary
选项)。
nmcli connection add
命令详解
nmcli connection add
是 NetworkManager 中最核心的命令之一,用于创建各种类型的网络连接配置。它提供了灵活的参数系统,可以配置从简单的以太网连接到复杂的虚拟网络拓扑。
一、命令基本结构
bash
nmcli connection add
[connection.property value]...
[type <type>]
[ifname <interface>]
[con-name <name>]
[其他类型特定参数]
二、核心参数详解
1. 通用参数
参数 | 必选 | 描述 | 示例 |
---|---|---|---|
type |
是 | 连接类型 | type ethernet , type bridge |
con-name |
否 | 连接名称(配置文件标识) | con-name "Office-LAN" |
ifname |
是 | 网络接口名称 | ifname eth0 , ifname br0 |
autoconnect |
否 | 是否自动连接 | autoconnect yes |
save |
否 | 是否保存配置 | save yes (默认) |
2. IP 配置参数
参数 | 描述 | 示例 |
---|---|---|
ipv4.method |
IPv4 配置方法 | auto (DHCP), manual , disabled |
ipv4.addresses |
IPv4 地址 | 192.168.1.100/24 |
ipv4.gateway |
IPv4 网关 | 192.168.1.1 |
ipv4.dns |
DNS 服务器 | 8.8.8.8,8.8.4.4 |
ipv4.dns-search |
DNS 搜索域 | example.com |
ipv6.method |
IPv6 配置方法 | auto , dhcp , manual , ignore |
三、不同连接类型的专用参数
1. 以太网 (ethernet)
bash
nmcli con add type ethernet
con-name "eth-primary"
ifname eth0
ipv4.method auto
2. 网桥 (bridge)
参数 | 描述 | 默认值 |
---|---|---|
bridge.stp |
启用生成树协议 | yes |
bridge.priority |
网桥优先级 | 32768 |
bridge.forward-delay |
转发延迟(秒) | 2 |
bridge.hello-time |
Hello包间隔(秒) | 2 |
bash
nmcli con add type bridge
con-name "main-bridge"
ifname br0
bridge.stp no
3. 绑定 (bond)
参数 | 描述 | 示例值 |
---|---|---|
bond.options |
绑定选项 | mode=802.3ad,miimon=100 |
bond.mode |
绑定模式 | balance-rr , active-backup |
bash
nmcli con add type bond
con-name "bond0"
ifname bond0
bond.options "mode=802.3ad,miimon=100"
4. VLAN (vlan)
参数 | 描述 | 必选 |
---|---|---|
dev |
父接口 | 是 |
id |
VLAN ID | 是 |
flags |
VLAN 标志 | 否 |
bash
nmcli con add type vlan
con-name "vlan10"
ifname vlan10
dev eth0
id 10
5. 网桥从属 (bridge-slave)
参数 | 描述 | 必选 |
---|---|---|
master |
主网桥名称 | 是 |
priority |
端口优先级 | 否 |
bash
nmcli con add type bridge-slave
con-name "br-slave-eth1"
ifname eth1
master br0
6. 绑定从属 (bond-slave)
参数 | 描述 | 必选 |
---|---|---|
master |
主绑定名称 | 是 |
queue-id |
队列ID | 否 |
bash
nmcli con add type bond-slave
con-name "bond0-slave1"
ifname eth1
master bond0
四、高级配置技巧
1. 多参数组合
bash
nmcli con add type bridge
con-name "secure-bridge"
ifname br-sec
bridge.stp no
bridge.forward-delay 0
ipv4.method manual
ipv4.addresses 10.10.10.1/24
ipv4.gateway 10.10.10.254
ipv4.dns "192.168.1.1"
2. 批量操作
bash
# 创建绑定
nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
# 添加两个从属接口
for i in {1..2}; do
nmcli con add type bond-slave con-name "bond0-slave$i" ifname eth$i master bond0
done
3. 连接克隆
bash
# 克隆现有连接
nmcli con clone "Office-WiFi" "Home-WiFi"
# 修改克隆连接
nmcli con mod "Home-WiFi" wifi.ssid "HomeNetwork"
五、配置关系图
六、完整配置示例
企业级网络配置
bash
# 1. 创建绑定接口
nmcli con add type bond con-name "core-bond" ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast"
# 2. 添加物理网卡到绑定
nmcli con add type bond-slave con-name "bond-slave1" ifname eth1 master bond0
nmcli con add type bond-slave con-name "bond-slave2" ifname eth2 master bond0
# 3. 在绑定上创建VLAN
nmcli con add type vlan con-name "vlan-mgmt" ifname vlan10 dev bond0 id 10
nmcli con add type vlan con-name "vlan-data" ifname vlan20 dev bond0 id 20
# 4. 创建管理网桥
nmcli con add type bridge con-name "br-mgmt" ifname br-mgmt \
ipv4.method manual \
ipv4.addresses 10.10.10.1/24 \
bridge.stp no
# 5. 将管理VLAN加入网桥
nmcli con add type bridge-slave con-name "br-slave-mgmt" \
ifname vlan10 master br-mgmt
# 6. 创建数据网桥
nmcli con add type bridge con-name "br-data" ifname br-data \
ipv4.method disabled \
bridge.stp no
# 7. 将数据VLAN加入网桥
nmcli con add type bridge-slave con-name "br-slave-data" \
ifname vlan20 master br-data
七、连接管理
1. 查看连接
bash
nmcli con show # 所有连接
nmcli con show "br-mgmt" # 特定连接详情
nmcli -f name,type,device con show # 特定字段
2. 控制连接状态
bash
nmcli con up "br-mgmt" # 启用连接
nmcli con down vlan-data # 禁用连接
nmcli con reload # 重载配置
3. 修改连接
bash
nmcli con mod "br-mgmt" ipv4.dns "10.10.10.53" # 修改DNS
nmcli con mod bond0 +bond.options "xmit_hash_policy=layer3+4" # 添加选项
八、故障排查
常见错误及解决
错误信息 | 原因 | 解决方案 |
---|---|---|
Error: Connection activation failed: No suitable device found |
接口不存在 | 检查 ifname 是否正确 |
Error: Master connection not found |
依赖连接未创建 | 先创建主连接 |
Error: bond-slave option is required |
缺少必要参数 | 检查 master 参数 |
Error: VLAN connection needs dev and id properties |
VLAN配置不全 | 补全 dev 和 id |
调试命令
bash
# 查看详细日志
journalctl -u NetworkManager -f
# 检查连接配置文件
ls -l /etc/NetworkManager/system-connections/
# 测试配置语法
nmcli con add --dry-run type bridge con-name test ifname test-br
九、最佳实践
-
命名规范
bash# 使用描述性名称 con-name "br-dmz" con-name "vlan30-finance"
-
配置顺序
graph TB A[物理接口] --> B[绑定/VLAN] B --> C[网桥] C --> D[IP配置] -
持久化备份
bash# 导出所有配置 nmcli con export > nm_backup.nmconnection # 导入配置 nmcli con import < nm_backup.nmconnection
-
批量操作脚本
bash#!/bin/bash # 创建基础网络配置 interfaces=(eth1 eth2) for iface in "${interfaces[@]}"; do nmcli con add type ethernet con-name "$iface" ifname "$iface" autoconnect no done
-
安全增强
bash# 禁用IPv6路由器通告 nmcli con mod "br0" ipv6.accept-ra no # 限制管理访问 nmcli con mod "br-mgmt" connection.permissions "user:admin"
通过掌握 nmcli connection add
命令,您可以高效地配置从简单到复杂的各种网络拓扑结构,实现灵活可靠的网络管理。
nmcli connection add
是 NetworkManager 命令行工具中用于创建新网络连接配置的命令。它支持多种网络类型(如以太网、Wi-Fi、网桥、VLAN 等),并允许通过参数灵活配置连接属性。以下是详细解析:
基本语法
bash
nmcli connection add [选项] [参数]
核心参数详解
1. 通用连接属性
参数 | 说明 |
---|---|
type <类型> |
必填 ,指定连接类型(如 ethernet , wifi , bridge , vlan , bond , vpn 等) |
con-name <名称> |
必填 ,自定义连接名称(如 office-wifi ) |
ifname <接口名> |
绑定的物理接口(如 eth0 , wlan0 ),若省略则自动分配 |
autoconnect <yes/no> |
是否开机自动连接(默认 yes ) |
save <yes/no> |
是否保存配置到文件(默认 yes ) |
2. IP 配置参数
参数 | 说明 |
---|---|
ipv4.method <auto/manual/disabled> |
IPv4 配置方式:auto (DHCP), manual (静态IP), disabled (禁用) |
ipv4.addresses <IP/掩码> |
静态 IPv4 地址(如 192.168.1.10/24 ) |
ipv4.gateway <网关IP> |
默认网关(如 192.168.1.1 ) |
ipv4.dns <DNS服务器> |
DNS 服务器(多个用逗号分隔,如 8.8.8.8,1.1.1.1 ) |
ipv6.method <auto/...> |
类似 IPv4 的配置方式 |
3. Wi-Fi 专用参数
参数 | 说明 |
---|---|
wifi.ssid <网络名> |
Wi-Fi 的 SSID(如 MyWiFi ) |
wifi-sec.key-mgmt <加密方式> |
安全协议(如 wpa-psk , none ) |
wifi-sec.psk <密码> |
Wi-Fi 密码 |
4. 高级配置(示例)
- 网桥 :
type bridge ifname br0 con-name my-bridge
- VLAN :
type vlan con-name vlan10 dev eth0 id 10
- 绑定(Bond) :
type bond con-name bond0 mode active-backup
常用示例
1. 创建 DHCP 以太网连接
bash
nmcli connection add type ethernet con-name dhcp-eth ifname eth0
2. 创建静态 IP 以太网连接
bash
nmcli connection add type ethernet con-name static-eth ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8"
3. 创建 Wi-Fi 连接
bash
nmcli connection add type wifi con-name home-wifi ifname wlan0 \
wifi.ssid MyHomeNetwork \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "your_password"
4. 创建网桥连接
bash
# 先创建网桥
nmcli connection add type bridge con-name my-bridge ifname br0
# 将 eth0 添加到网桥
nmcli connection add type ethernet slave-type bridge con-name br-port master br0 ifname eth0
5. 创建 VLAN 连接
bash
nmcli connection add type vlan con-name vlan10 dev eth0 id 10 \
ipv4.method auto
注意事项
-
配置保存位置 :
所有连接配置保存在/etc/NetworkManager/system-connections/
目录。 -
激活连接 :
创建后需手动激活:bashnmcli connection up <con-name>
-
优先级 :
若存在多个连接,NetworkManager 按配置文件中的autoconnect-priority
决定优先级。 -
查看连接 :
bashnmcli connection show # 列出所有连接 nmcli connection show <con-name> # 查看详情
错误排查
-
若命令执行失败,检查:
- 参数拼写是否正确(如
con-name
非name
)。 - 网络类型是否支持(
nmcli -f all general
查看支持的类型)。 - 物理接口是否存在(
nmcli device status
)。
- 参数拼写是否正确(如
-
使用
--debug
获取详细日志:bashnmcli --debug connection add ...
通过灵活组合参数,nmcli connection add
可高效管理各种网络配置,适合脚本化部署!
nmcli connection add
命令详解
nmcli connection add
是 NetworkManager 命令行工具中用于创建新网络连接的核心命令,它提供了灵活的方式来配置各种网络接口和虚拟设备。下面是对该命令的全面解析:
命令基本结构
bash
nmcli connection add [选项] [属性 值] ...
核心选项详解
1. 必需选项
-
type
:指定连接类型bashtype ethernet # 以太网 type wifi # 无线网络 type bridge # 网桥 type bond # 绑定(链路聚合) type vlan # VLAN type team # 另一种链路聚合技术 type vpn # VPN连接 type infiniband # InfiniBand type bluetooth # 蓝牙
-
con-name
:指定连接名称bashcon-name my-connection
-
ifname
:指定网络接口名称bashifname eth0 # 物理接口 ifname br0 # 虚拟接口
2. 常用可选选项
-
save
:是否保存配置(默认 yes)bashsave no # 创建临时连接(重启后消失)
-
autoconnect
:是否自动连接(默认 yes)bashautoconnect no # 需手动激活
-
master
:指定主设备(用于从属设备)bashmaster br0 # 用于bridge-slave或bond-slave
连接类型与属性详解
1. 以太网连接 (ethernet)
bash
nmcli con add type ethernet \
con-name "eth-static" \
ifname enp3s0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4" \
ethernet.mtu 1500
关键属性:
ipv4.method
:manual
(静态) 或auto
(DHCP)ipv6.method
: IPv6 配置方法ethernet.mac-address
: 设置MAC地址ethernet.wake-on-lan
: 网络唤醒设置
2. 网桥连接 (bridge)
bash
nmcli con add type bridge \
con-name br0 \
ifname br0 \
ipv4.method manual \
ipv4.addresses 192.168.1.200/24 \
bridge.stp no \
bridge.forward-delay 0
关键属性:
bridge.stp
: 生成树协议 (yes/no)bridge.priority
: 网桥优先级 (0-65535)bridge.forward-delay
: 转发延迟 (秒)bridge.hello-time
: STP Hello包间隔bridge.max-age
: STP最大消息年龄
3. 绑定连接 (bond)
bash
nmcli con add type bond \
con-name bond0 \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast" \
ipv4.method auto
绑定模式选项:
模式 | 值 | 描述 |
---|---|---|
负载均衡 | balance-rr |
轮询传输 |
活动备份 | active-backup |
故障切换 |
LACP动态聚合 | 802.3ad |
需要交换机支持 |
广播 | broadcast |
所有接口发送相同数据 |
XOR哈希 | balance-xor |
基于哈希策略 |
自适应传输负载均衡 | balance-tlb |
发送负载均衡 |
自适应负载均衡 | balance-alb |
发送接收负载均衡 |
4. VLAN连接 (vlan)
bash
nmcli con add type vlan \
con-name vlan10 \
ifname eth0.10 \
dev eth0 \
id 10 \
ipv4.method manual \
ipv4.addresses 10.10.10.1/24
关键属性:
id
: VLAN ID (必需, 1-4094)dev
: 父接口名称 (必需)vlan.flags
: 标志 (如reorder_hdr
)
5. 从属连接 (bridge-slave/bond-slave)
bash
# 网桥从属
nmcli con add type bridge-slave \
con-name br0-slave \
ifname eth0 \
master br0
# 绑定从属
nmcli con add type bond-slave \
con-name bond0-slave1 \
ifname eth1 \
master bond0
高级用法示例
1. 创建带VLAN过滤的网桥
bash
nmcli con add type bridge con-name br-filter ifname br0 \
bridge.vlan-filtering yes \
bridge.vlan-default-pvid 1
nmcli con add type bridge-slave con-name br-slave ifname eth0 master br0 \
bridge-port.vlans "1-10,20 pvid 1 untagged; 30-40"
2. 创建带QoS的VLAN
bash
nmcli con add type vlan con-name vlan-qos ifname eth0.100 dev eth0 id 100 \
vlan.ingress-qos-map "0:3 1:4 2:6" \
vlan.egress-qos-map "3:0 4:1 6:2"
3. 创建带故障转移的绑定
bash
nmcli con add type bond con-name bond-failover ifname bond0 \
bond.options "mode=active-backup,primary=eth0,fail_over_mac=active" \
ipv4.method auto
4. 创建无线网络连接
bash
nmcli con add type wifi con-name office-wifi ifname wlp2s0 \
wifi.ssid "Office-Network" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "mysecretpassword" \
ipv4.method auto
属性管理技巧
1. 修改现有连接属性
bash
nmcli con modify "eth-static" ipv4.addresses "192.168.1.101/24"
2. 添加/删除多值属性
bash
# 添加DNS服务器
nmcli con modify "eth-static" +ipv4.dns 1.1.1.1
# 删除DNS服务器
nmcli con modify "eth-static" -ipv4.dns 8.8.4.4
3. 查看支持的属性
bash
nmcli connection add help type bridge
连接生命周期管理
1. 激活连接
bash
nmcli con up "br0"
2. 停用连接
bash
nmcli con down "br0"
3. 删除连接
bash
nmcli con del "br0"
4. 导出连接配置
bash
nmcli -f all con show "br0" > br0-backup.nmconnection
最佳实践
-
命名规范:
bash# 类型.用途.序号 con-name bridge.lan con-name vlan.mgmt
-
配置验证:
bash# 试运行(不实际应用) nmcli --offline con add type bridge ... # 语法检查 nmcli con add --check
-
批量操作:
bash# 创建网桥和从属接口 nmcli -e yes con add type bridge con-name br0 ifname br0 nmcli -e yes con add type bridge-slave ifname eth0 master br0
-
持久化与临时连接:
bash# 临时连接(重启后消失) nmcli con add ... save no # 永久连接(保存到/etc) nmcli con add ... save yes
配置文件位置
创建的连接配置存储在:
bash
/etc/NetworkManager/system-connections/
├── br0.nmconnection
├── eth-static.nmconnection
└── vlan10.nmconnection
nmcli connection add
是构建复杂网络配置的核心工具,通过组合不同连接类型和属性,可以创建从简单以太网连接到多层虚拟化网络的任意拓扑结构。
nmcli connection add
是 NetworkManager 中用于创建新连接配置的核心命令。下面详细解析该命令的用法、参数和实际应用场景:
基本语法
bash
nmcli connection add [通用选项] [类型特定选项]
通用连接选项
这些选项适用于所有连接类型:
选项 | 描述 | 示例 |
---|---|---|
type <类型> |
必填 ,指定连接类型 (ethernet, bridge, bond, vlan, team, vpn 等) | type ethernet |
con-name <名称> |
必填,连接配置名称(自定义标识) | con-name "Server-LAN" |
ifname <接口> |
必填,绑定的网络接口名称 | ifname enp3s0 |
autoconnect <yes/no> |
是否自动连接(默认 yes) | autoconnect yes |
save <yes/no> |
是否保存配置(默认 yes) | save yes |
--temporary |
创建临时连接(重启后消失) | nmcli --temporary ... |
master <主连接> |
指定主连接(用于从属接口) | master br0 |
类型特定选项
根据不同的连接类型,需使用特定参数:
1. 以太网 (ethernet)
bash
nmcli con add type ethernet \
con-name "eth-static" \
ifname enp3s0 \
ipv4.method manual \
ipv4.addresses 192.168.1.10/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8,8.8.4.4" \
ipv6.method disabled
2. 网桥 (bridge)
bash
# 创建网桥
nmcli con add type bridge \
con-name br0 \
ifname br0 \
stp yes \
priority 32768 \
ipv4.method manual \
ipv4.addresses 10.0.0.1/24
# 添加网桥从接口
nmcli con add type bridge-slave \
con-name br0-port1 \
ifname enp3s0 \
master br0
3. 绑定 (bond)
bash
# 创建绑定接口
nmcli con add type bond \
con-name bond0 \
ifname bond0 \
mode active-backup \
miimon 100 \
primary enp3s0 \
ipv4.method auto
# 添加绑定从接口
nmcli con add type ethernet \
con-name bond0-slave1 \
ifname enp3s0 \
master bond0
nmcli con add type ethernet \
con-name bond0-slave2 \
ifname enp4s0 \
master bond0
4. VLAN
bash
# 在物理接口上创建 VLAN
nmcli con add type vlan \
con-name vlan100 \
ifname vlan100 \
dev enp3s0 \
id 100 \
ipv4.method manual \
ipv4.addresses 192.168.100.5/24
# 在绑定接口上创建 VLAN
nmcli con add type vlan \
con-name bond0.200 \
ifname vlan200 \
dev bond0 \
id 200
IP 配置选项
所有连接类型通用的 IP 设置:
选项 | 描述 | 示例 |
---|---|---|
ipv4.method <manual/auto/disabled> |
IPv4 配置方法 | ipv4.method manual |
ipv4.addresses <IP/前缀> |
IPv4 地址(支持多个) | ipv4.addresses "192.168.1.10/24, 10.0.0.1/24" |
ipv4.gateway <网关IP> |
默认网关 | ipv4.gateway 192.168.1.1 |
ipv4.dns <DNS服务器> |
DNS 服务器(支持多个) | ipv4.dns "8.8.8.8, 1.1.1.1" |
ipv4.routes <路由> |
自定义路由 | ipv4.routes "10.8.0.0/24 192.168.1.254" |
ipv6.method <manual/auto/ignore> |
IPv6 配置方法 | ipv6.method auto |
高级用法示例
组合配置:绑定 + VLAN + 网桥
bash
# 1. 创建绑定
nmcli con add type bond con-name bond0 ifname bond0 mode=802.3ad
# 2. 添加从接口
nmcli con add type ethernet con-name bond0-slave1 ifname enp3s0 master bond0
nmcli con add type ethernet con-name bond0-slave2 ifname enp4s0 master bond0
# 3. 在绑定上创建 VLAN
nmcli con add type vlan con-name bond0.300 ifname vlan300 dev bond0 id 300
# 4. 创建网桥并添加 VLAN
nmcli con add type bridge con-name br300 ifname br300
nmcli con add type bridge-slave con-name br300-port ifname vlan300 master br300
# 5. 配置网桥 IP
nmcli con mod br300 ipv4.addresses 172.16.30.1/24 ipv4.method manual
带优先级的 DHCP 回退配置
bash
nmcli con add type ethernet \
con-name "eth-primary" \
ifname enp5s0 \
ipv4.method auto \
connection.autoconnect-priority 100 # 高优先级
nmcli con add type ethernet \
con-name "eth-backup" \
ifname enp6s0 \
ipv4.method auto \
connection.autoconnect-priority 50 # 低优先级
连接管理命令
创建后管理连接:
bash
# 激活连接
nmcli con up "eth-static"
# 停用连接
nmcli con down "eth-static"
# 修改连接
nmcli con mod "eth-static" ipv4.dns "9.9.9.9"
# 删除连接
nmcli con del "eth-static"
重要注意事项
-
命名规范:
con-name
是配置标识,可自定义ifname
必须与实际接口名匹配(物理接口)或符合命名惯例(虚拟接口)
-
依赖关系:
- 从属接口(如
bridge-slave
,bond-slave
)需在创建主接口后添加 - VLAN 需要指定有效的
dev
(父接口)
- 从属接口(如
-
配置存储:
- 默认保存在
/etc/NetworkManager/system-connections/
- 使用
--temporary
创建临时内存配置
- 默认保存在
-
冲突处理:
- 避免多个连接绑定同一接口
- 使用
nmcli con show --active
检查冲突
-
原子操作:
- 单个
nmcli con add
命令是原子的 - 复杂配置需按顺序执行多个命令
- 单个
调试技巧
bash
# 1. 显示完整命令帮助
nmcli con add help
# 2. 查看特定类型帮助
nmcli con add type vlan help
# 3. 预览生成的配置
nmcli --offline con add type bridge ... > bridge.nmconnection
# 4. 检查日志
journalctl -u NetworkManager -f
# 5. 验证配置
nmcli -p con show "br0"
掌握 nmcli connection add
的用法,可以高效配置从简单到复杂的各种网络场景,是 Linux 网络管理的核心技能之一。
nmcli connection add
命令详解
nmcli connection add
是 NetworkManager 命令行工具中用于创建新网络连接的核心命令。它提供了灵活的参数来配置各种类型的网络连接,包括以太网、网桥、绑定、VLAN 等。以下是该命令的全面解析:
基本语法
bash
nmcli connection add [选项] [参数]
核心参数
1. 连接类型 (type
)
必须参数,指定连接的类型:
ethernet
:以太网连接bridge
:网桥连接bond
:绑定(链路聚合)连接vlan
:虚拟局域网连接wifi
:无线网络连接tun
:隧道连接ip-tunnel
:IP 隧道连接infiniband
:InfiniBand 连接bluetooth
:蓝牙连接vpn
:VPN 连接wireguard
:WireGuard VPN 连接
2. 连接名称 (con-name
)
推荐使用,指定连接的名称:
bash
con-name my-connection
- 如果不指定,NetworkManager 会自动生成名称(如 "bridge-br0")
- 名称用于后续管理操作(修改、删除、激活)
3. 接口名称 (ifname
)
必须参数,指定网络接口名称:
bash
ifname br0
- 对于物理接口:使用实际接口名(如
enp3s0
) - 对于虚拟接口:自定义名称(如
br0
,bond0
,vlan100
)
4. 父设备 (dev
)
用于依赖型连接,指定父设备:
bash
dev enp3s0 # 用于 VLAN 或 bridge-slave
- VLAN:指定物理接口或绑定接口
- Bridge-slave:指定物理接口或绑定接口
- Bond-slave:指定物理接口
类型特定参数
以太网 (type ethernet
)
bash
nmcli con add type ethernet \
con-name eth-static \
ifname enp3s0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8" \
ipv4.method manual
网桥 (type bridge
)
bash
# 创建桥接
nmcli con add type bridge \
con-name br0 \
ifname br0 \
ipv4.method auto \
bridge.stp no
# 添加物理接口到桥接
nmcli con add type bridge-slave \
con-name br0-port1 \
ifname enp3s0 \
master br0
绑定 (type bond
)
bash
# 创建绑定
nmcli con add type bond \
con-name bond0 \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp-rate=fast" \
ipv4.method auto
# 添加物理接口到绑定
nmcli con add type bond-slave \
con-name bond0-slave1 \
ifname enp3s0 \
master bond0
VLAN (type vlan
)
bash
nmcli con add type vlan \
con-name vlan100 \
ifname vlan100 \
dev enp3s0 \
id 100 \
ipv4.addresses 10.0.100.10/24 \
ipv4.method manual
IP 配置参数
IPv4
bash
ipv4.method auto # DHCP
ipv4.method manual # 静态 IP
ipv4.addresses "192.168.1.100/24" # 静态地址
ipv4.gateway 192.168.1.1 # 网关
ipv4.dns "8.8.8.8 8.8.4.4" # DNS
ipv4.dns-search "example.com" # DNS 搜索域
ipv4.ignore-auto-dns yes # 忽略自动 DNS
ipv4.never-default yes # 不作为默认路由
IPv6
bash
ipv6.method auto
ipv6.method manual
ipv6.addresses "2001:db8::1/64"
ipv6.gateway "2001:db8::1"
ipv6.dns "2001:4860:4860::8888"
高级选项
1. 连接行为
bash
autoconnect yes # 是否自动连接(默认yes)
autoconnect-priority 100 # 自动连接优先级
connection.multi-connect multiple # 允许多重连接
connection.zone trusted # 防火墙区域
2. 设备参数
bash
ethernet.mtu 9000 # 设置 MTU
ethernet.wake-on-lan magic # 启用 WOL
ethernet.accept-all-mac-addresses 1 # 接受所有 MAC
3. 绑定特定参数
bash
bond.options "mode=active-backup,primary=enp3s0"
支持的模式:balance-rr
, active-backup
, balance-xor
, broadcast
, 802.3ad
, balance-tlb
, balance-alb
4. 桥接特定参数
bash
bridge.stp yes # 启用生成树协议
bridge.priority 16384 # STP 优先级
bridge.forward-delay 4 # 转发延迟(秒)
bridge.hello-time 2 # Hello 时间(秒)
bridge.max-age 20 # 最大消息年龄(秒)
5. VLAN 特定参数
bash
vlan.flags 1 # 重新排序标头
vlan.ingress-priority-map "0:3,1:4" # 入口优先级映射
vlan.egress-priority-map "3:0,4:1" # 出口优先级映射
完整示例
复杂场景:Bond → Bridge → VLAN
bash
# 1. 创建绑定
nmcli con add type bond \
con-name bond0 \
ifname bond0 \
bond.options "mode=802.3ad"
# 2. 添加物理接口到绑定
nmcli con add type bond-slave \
con-name bond0-slave1 \
ifname enp3s0 \
master bond0
# 3. 创建桥接
nmcli con add type bridge \
con-name br-bond \
ifname br-bond0 \
ipv4.method auto \
master bond0
# 4. 在桥接上创建 VLAN
nmcli con add type vlan \
con-name br-vlan200 \
ifname vlan200 \
dev br-bond0 \
id 200 \
ipv4.addresses 10.0.200.10/24 \
ipv4.method manual
连接管理命令
创建后管理连接:
bash
# 激活连接
nmcli con up br-vlan200
# 查看连接详情
nmcli -p con show br-vlan200
# 修改连接
nmcli con modify br-vlan200 ipv4.addresses "10.0.200.20/24"
# 删除连接
nmcli con delete br-vlan200
特殊技巧
1. 克隆现有连接
bash
nmcli con clone "Wired connection 1" eth-backup
2. 导入连接配置
bash
nmcli con import type ethernet file /path/to/connection.nmconnection
3. 一次性添加多个设置
bash
nmcli con add type ethernet ifname enp4s0 \
ipv4.method manual \
ipv4.addresses "192.168.2.100/24" \
ipv4.gateway 192.168.2.1 \
ipv4.dns "192.168.2.53" \
connection.autoconnect no \
ethernet.mtu 1500 \
ethernet.wake-on-lan magic
4. 创建仅 IPv6 连接
bash
nmcli con add type ethernet ifname enp5s0 \
ipv4.method disabled \
ipv6.method manual \
ipv6.addresses "2001:db8::1/64" \
ipv6.gateway "2001:db8::fffe" \
ipv6.dns "2001:4860:4860::8888"
注意事项
- 权限要求:需要 root 权限或具有相应 PolicyKit 权限的用户
- 配置存储 :连接配置存储在
/etc/NetworkManager/system-connections/
- 生效顺序 :
- 先创建底层接口(物理接口、绑定)
- 再创建依赖型接口(VLAN、桥接)
- 名称冲突:避免使用已存在的接口名或连接名
- 持久性 :所有
nmcli con add
创建的连接都是持久的 - 自动激活 :默认
autoconnect=yes
,如需手动激活需设置为no
故障排除
常见错误及解决
错误信息 | 原因 | 解决方案 |
---|---|---|
Error: Connection creation failed: Device 'eth0' not available |
接口不存在或被占用 | 使用 nmcli device status 检查可用设备 |
Error: bond.options: invalid option 'mode=invalid' |
无效的绑定模式 | 使用 cat /sys/class/net/bond0/bonding/mode 查看支持模式 |
Error: vlan.id: property is missing |
缺少 VLAN ID | 添加 id <1-4094> 参数 |
Error: Connection 'br0' already exists |
连接名重复 | 使用不同的 con-name 或删除现有连接 |
调试命令
bash
# 查看详细错误信息
NM_LOG_LEVEL=debug nmcli con add ...
# 检查 NetworkManager 日志
journalctl -u NetworkManager -f
# 验证配置语法
nmcli -f all con show "connection-name"
nmcli connection add
提供了强大的网络配置能力,通过组合不同类型的连接和参数,可以构建从简单到复杂的各种网络拓扑结构。掌握其用法是在 Linux 系统中高效管理网络的关键技能。
nmcli connection add
是 NetworkManager 命令行工具中用于创建新网络连接配置的命令。以下详解其用法、常用参数及示例:
基本语法
bash
nmcli connection add [选项] [类型参数] [IP参数] [其他参数]
核心参数说明
1. 连接类型 (type
)
- 必需参数 ,指定连接类型:
ethernet
:有线连接wifi
:无线连接bridge
:网桥bond
:绑定(链路聚合)vlan
:VLANvpn
:VPN- 更多类型:
tun
,ip-tunnel
,team
,bluetooth
等
2. 通用标识参数
参数 | 说明 |
---|---|
con-name <名称> |
自定义连接名称(如不指定,自动生成) |
ifname <接口名> |
绑定的网络接口(如 eth0 , wlan0 ) |
autoconnect yes/no |
是否开机自动连接(默认 yes ) |
3. IP 配置参数
参数 | 说明 |
---|---|
ipv4.method auto |
使用 DHCP 获取 IPv4 地址 |
ipv4.method manual |
手动配置 IPv4 地址 |
ipv4.addresses <IP/掩码> |
静态 IPv4 地址(如 192.168.1.10/24 ) |
ipv4.gateway <网关> |
默认网关(如 192.168.1.1 ) |
ipv4.dns <DNS> |
DNS 服务器(如 8.8.8.8 ) |
ipv6.method auto/manual/ignore |
IPv6 配置方式 |
4. 类型专用参数
-
Wi-Fi 连接 :
bashwifi.ssid <网络名称> # Wi-Fi 的 SSID wifi-sec.key-mgmt <加密协议> # 如 `wpa-psk` (WPA2) wifi-sec.psk <密码> # Wi-Fi 密码
-
网桥/绑定 :
bashbridge.stp yes/no # 启用生成树协议 bond.options <选项> # 绑定模式(如 `mode=active-backup`)
常用示例
1. 创建 DHCP 有线连接
bash
nmcli connection add \
type ethernet \
con-name "my-eth" \
ifname eth0 \
autoconnect yes
2. 创建静态 IP 有线连接
bash
nmcli connection add \
type ethernet \
con-name "static-eth" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4"
3. 创建 Wi-Fi 连接
bash
nmcli connection add \
type wifi \
con-name "my-wifi" \
ifname wlan0 \
wifi.ssid "MyNetwork" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "my_password"
4. 创建网桥
bash
nmcli connection add \
type bridge \
con-name "my-bridge" \
ifname br0 \
ipv4.method auto
5. 创建绑定接口
bash
nmcli connection add \
type bond \
con-name "my-bond" \
ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.method auto
其他实用技巧
-
查看帮助:
bashnmcli connection add help
-
修改连接 :创建后可用
nmcli connection modify
调整配置。 -
激活连接:
bashnmcli connection up <连接名称>
-
删除连接:
bashnmcli connection delete <连接名称>
注意事项
- 需 root 权限执行(或使用
sudo
)。 - 配置保存在
/etc/NetworkManager/system-connections/
。 - 若省略
ifname
,连接可能适用于任意兼容接口(如多个以太网卡)。
通过灵活组合参数,可快速配置各类复杂网络场景(如 VLAN、VPN、聚合等)。
nmcli connection add
是 Linux 中 NetworkManager 工具的核心命令,用于创建新的网络连接配置。以下是其详细用法和参数解析:
命令语法
bash
nmcli connection add [通用参数] [类型特定参数]
通用参数
参数 | 说明 | 示例 |
---|---|---|
type |
连接类型(必填) | ethernet 、wifi 、bridge 、bond 、vlan 、vpn |
con-name |
自定义连接名称(必填) | con-name "MyOfficeConn" |
ifname |
绑定到的物理接口(可选) | ifname eth0 (以太网/VLAN) |
autoconnect |
开机自动连接(默认yes ) |
autoconnect no |
ipv4.method |
IPv4 配置方式 | manual (静态)、auto (DHCP)、disabled |
ipv6.method |
IPv6 配置方式 | 同 IPv4(如 manual 、auto ) |
类型特定参数
1. 以太网(Ethernet)
bash
nmcli connection add type ethernet \
con-name "Wired-Static" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8,8.8.4.4"
- 关键参数 :
ipv4.addresses
(IP/子网)、ipv4.gateway
(网关)、ipv4.dns
(DNS)。
2. 无线网(Wi-Fi)
bash
nmcli connection add type wifi \
con-name "Home-WiFi" \
ifname wlan0 \
ssid "MyWiFi" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "mypassword123" \
ipv4.method auto
- 关键参数 :
ssid
(网络名)、wifi-sec.key-mgmt
(加密方式)、wifi-sec.psk
(密码)。
3. 网桥(Bridge)
bash
nmcli connection add type bridge \
con-name "my-bridge" \
ifname br0 \
ipv4.method manual \
ipv4.addresses "192.168.1.200/24" \
bridge.stp no
- 关键参数 :
bridge.stp
(生成树协议,默认yes
)。
4. 绑定(Bond)
bash
nmcli connection add type bond \
con-name "my-bond" \
ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.method dhcp
- 关键参数 :
bond.options
(模式:active-backup
、balance-rr
、802.3ad
等)。
5. VLAN
bash
nmcli connection add type vlan \
con-name "eth0.100" \
dev eth0 \
id 100 \
ipv4.method manual \
ipv4.addresses "192.168.100.10/24"
- 关键参数 :
dev
(父接口)、id
(VLAN ID)。
常用操作示例
-
创建 DHCP 动态 IP 连接:
bashnmcli connection add type ethernet con-name "DHCP-Conn" ifname eth1 ipv4.method auto
-
创建静态 IP 连接并启用:
bashnmcli connection add type ethernet con-name "Static-Conn" ifname eth2 ipv4.method manual ipv4.addresses "10.0.0.10/24" ipv4.gateway "10.0.0.1" nmcli connection up "Static-Conn"
-
删除连接:
bashnmcli connection delete "Old-Conn"
注意事项
-
权限要求 :需使用
root
或sudo
执行。 -
持久化 :配置默认保存到
/etc/sysconfig/network-scripts/
(RHEL/CentOS)或/etc/NetworkManager/system-connections/
(通用)。 -
冲突避免 :确保
con-name
和ifname
未被占用。 -
验证配置 :
bashnmcli connection show "My-Conn" # 查看详细配置 ip addr show dev eth0 # 检查接口IP
高级技巧
-
批量配置 :通过脚本生成多条
nmcli
命令,实现自动化部署。 -
调试 :若连接失败,检查日志:
bashjournalctl -u NetworkManager --no-pager -n 50
通过 nmcli connection add
,可以灵活管理各种网络场景,包括服务器静态IP、家庭Wi-Fi、企业网桥/绑定等,无需手动编辑配置文件。
nmcli connection add
命令详解
一、命令结构与通用参数
1. 基本语法
bash
nmcli connection add [必要参数] [可选参数]
-
必要参数:
type
:指定连接类型(如ethernet
、bridge
、bond
、vlan
)。con-name
:自定义连接名称,用于标识不同连接。ifname
:绑定到具体网络接口(如eth0
、enp1s0
)。
-
常用可选参数:
ipv4.method
:IP 获取方式,manual
(静态)或auto
(DHCP)。ipv4.addresses
:静态 IP 地址及子网掩码(如192.168.1.100/24
)。ipv4.gateway
:网关地址。ipv4.dns
:DNS 服务器地址(多地址用逗号分隔)。
二、连接类型专项配置
1. 以太网(Ethernet)
静态 IP 配置
bash
nmcli connection add type ethernet \
con-name "eth0-static" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8,8.8.4.4"
DHCP 配置
bash
nmcli connection add type ethernet \
con-name "eth0-dhcp" \
ifname eth0 \
ipv4.method auto
2. 网桥(Bridge)
创建网桥并添加端口
bash
# 创建网桥
nmcli connection add type bridge \
con-name "br0" \
ifname "br0" \
ipv4.method manual \
ipv4.addresses "192.168.2.1/24"
# 添加从属接口(eth1 和 eth2)
nmcli connection add type ethernet \
con-name "br0-port1" \
ifname eth1 \
master br0
nmcli connection add type ethernet \
con-name "br0-port2" \
ifname eth2 \
master br0
3. 绑定(Bond)
创建绑定接口(以 balance-rr
模式为例)
bash
nmcli connection add type bond \
con-name "bond0" \
ifname "bond0" \
ipv4.method manual \
ipv4.addresses "192.168.3.100/24" \
bond.options "mode=balance-rr,miimon=100"
# 添加从属接口(eth3 和 eth4)
nmcli connection add type ethernet \
con-name "bond0-slave1" \
ifname eth3 \
master bond0
nmcli connection add type ethernet \
con-name "bond0-slave2" \
ifname eth4 \
master bond0
常用绑定模式
mode=balance-rr
:轮询策略(默认)。mode=active-backup
:主备模式。mode=802.3ad
:LACP 动态聚合(需交换机支持)。
4. VLAN
创建 VLAN 接口(VLAN ID 100)
bash
nmcli connection add type vlan \
con-name "eth0.100" \
ifname "eth0.100" \
dev eth0 \
id 100 \
ipv4.method manual \
ipv4.addresses "192.168.100.1/24"
三、高级配置选项
1. 绑定模式详解
balance-rr
:数据包轮询发送到所有从属接口,提升带宽。active-backup
:仅一个接口活跃,其他备份,提升可靠性。802.3ad
:动态链路聚合,需交换机支持 LACP 协议。
2. VLAN ID 设置
- 通过
id
参数指定 VLAN 标识,如id 100
。
3. MTU 设置
-
调整最大传输单元(MTU),示例:
bashnmcli connection modify bond0 ethernet.mtu 9000
四、操作与管理
1. 启用/禁用连接
bash
nmcli connection up <con-name> # 启用
nmcli connection down <con-name> # 禁用
2. 修改配置
bash
# 修改 IP 地址
nmcli connection modify <con-name> ipv4.addresses "192.168.1.200/24"
# 切换为 DHCP
nmcli connection modify <con-name> ipv4.method auto
# 重启配置
nmcli connection reload
3. 删除连接
bash
nmcli connection delete <con-name>
4. 持久化配置
nmcli
默认将配置持久化至以下路径:- RHEL/CentOS :
/etc/sysconfig/network-scripts/
- Ubuntu/Debian :
/etc/NetworkManager/system-connections/
- RHEL/CentOS :
五、注意事项与故障排除
1. 权限问题
- 需使用
sudo
或 root 用户执行命令。
2. 接口命名冲突
- 确保
ifname
与实际网卡名称一致,可通过ip link
或nmcli device
确认。
3. NetworkManager 版本兼容性
- 确保使用较新版本(≥ 1.14)以支持高级功能。
4. 配置不生效
-
检查配置文件权限(通常需
600
)。 -
重启 NetworkManager 服务:
bashsudo systemctl restart NetworkManager
通过以上命令和配置,您可以灵活管理 Linux 系统中的各类网络连接,实现静态 IP、DHCP、网桥、绑定和 VLAN 等高级网络配置。
nmcli connection add
是 nmcli
命令中用于创建新网络连接的核心命令之一。它允许用户通过命令行配置各种类型的网络连接(如以太网、Wi-Fi、桥接、绑定、VLAN 等),并指定连接的参数(如 IP 地址、网关、DNS 等)。以下是详细解析和示例:
1. 基本语法
bash
nmcli connection add [OPTIONS]
常用参数说明:
type
:指定连接类型(如ethernet
、wifi
、bridge
、bond
、vlan
等)。con-name
:连接名称(自定义,用于标识连接)。ifname
:绑定的网络接口名称(如eth0
、wlan0
等)。ipv4.addresses
:静态 IPv4 地址(格式为IP/子网掩码
)。ipv4.gateway
:IPv4 网关。ipv4.dns
:DNS 服务器地址。ipv4.method
:IP 获取方式(manual
表示静态 IP,auto
表示 DHCP)。ssid
:Wi-Fi 的 SSID(仅适用于 Wi-Fi 类型)。wifi-sec.psk
:Wi-Fi 的密码(仅适用于 Wi-Fi 类型)。bond.options
:绑定接口的参数(如mode=active-backup
)。vlan-id
:VLAN ID(仅适用于 VLAN 类型)。
2. 示例:添加不同类型的连接
2.1 添加以太网连接(静态 IP)
bash
nmcli connection add type ethernet con-name MyEth ifname eth0 \
ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8 ipv4.method manual
-
作用 :为
eth0
接口创建一个名为MyEth
的以太网连接,配置静态 IP 地址192.168.1.100
,网关192.168.1.1
,DNS 服务器8.8.8.8
。 -
激活连接 :
bashnmcli connection up MyEth
2.2 添加以太网连接(动态 IP,DHCP)
bash
nmcli connection add type ethernet con-name MyEth-DHCP ifname eth0 \
ipv4.method auto
-
作用 :为
eth0
接口创建一个名为MyEth-DHCP
的以太网连接,使用 DHCP 自动获取 IP。 -
激活连接 :
bashnmcli connection up MyEth-DHCP
2.3 添加 Wi-Fi 连接
bash
nmcli connection add type wifi con-name MyWiFi ifname wlan0 \
ssid "MySSID" wifi-sec.psk "MyPassword"
-
作用 :为
wlan0
接口创建一个名为MyWiFi
的 Wi-Fi 连接,连接 SSID 为MySSID
的网络,密码为MyPassword
。 -
激活连接 :
bashnmcli connection up MyWiFi
2.4 添加网桥(Bridge)
bash
# 创建桥接接口(br0)
nmcli connection add type bridge con-name br0 ifname br0 \
ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8 ipv4.method manual
# 将物理接口(eth0)添加到桥接中
nmcli connection add type bridge-slave con-name br0-slave ifname eth0 master br0
# 激活桥接和从属接口
nmcli connection up br0
nmcli connection up br0-slave
- 作用 :创建一个桥接接口
br0
,并将eth0
作为从属接口添加到桥接中。
2.5 添加绑定(Bonding)
bash
# 创建绑定接口(bond0),模式为 active-backup
nmcli connection add type bond con-name bond0 ifname bond0 \
ipv4.addresses 192.168.1.150/24 ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8 ipv4.method manual \
bond.options "mode=active-backup miimon=100"
# 添加物理接口(eth0 和 eth1)到绑定接口
nmcli connection add type bond-slave con-name bond0-slave1 ifname eth0 master bond0
nmcli connection add type bond-slave con-name bond0-slave2 ifname eth1 master bond0
# 激活绑定接口
nmcli connection up bond0
- 支持的 Bond 模式 :
balance-rr
:轮询负载均衡。active-backup
:主备冗余。802.3ad
:动态链路聚合(需交换机支持 LACP)。
2.6 添加 VLAN 子接口
bash
# 基于 eth0 创建 VLAN ID 为 10 的子接口
nmcli connection add type vlan con-name eth0-vlan10 ifname eth0.10 \
dev eth0 vlan-id 10 ipv4.addresses 192.168.10.100/24 \
ipv4.gateway 192.168.10.1 ipv4.dns 8.8.8.8 ipv4.method manual
# 激活 VLAN 连接
nmcli connection up eth0-vlan10
- 作用 :在
eth0
接口上创建 VLAN 子接口eth0.10
,配置静态 IP 地址192.168.10.100
。
3. 验证与调试
-
查看连接状态 :
bashnmcli connection show # 列出所有连接 nmcli connection show <con-name> # 查看特定连接的详细信息
-
检查设备状态 :
bashnmcli device status # 查看设备是否已激活 nmcli device show <interface> # 查看接口的详细信息
-
故障排查 :
- 日志 :
journalctl -u NetworkManager
查看 NetworkManager 日志。 - 网络连通性 :使用
ping
或traceroute
测试网络是否正常。
- 日志 :
4. 注意事项
- 权限 :需使用
sudo
执行命令(例如:sudo nmcli ...
)。 - 持久化 :配置保存在
/etc/NetworkManager/system-connections/
目录中。 - 冲突避免 :
- 不要同时使用
nmcli
和systemd-networkd
/netplan
混合配置。 - 确保接口名称(
ifname
)和连接名称(con-name
)唯一。
- 不要同时使用
- 参数依赖 :
- 对于 VLAN,需先配置物理接口的 IP(如果需要)。
- 对于绑定(Bond),需确保物理接口未被其他连接占用。
5. 常见错误及解决方法
-
错误 1 :
Error: Connection activation failed
- 原因:接口名称错误、IP 冲突或 DNS 配置错误。
- 解决 :检查
ifname
是否正确,确认 IP 地址和网关是否在同一个子网。
-
错误 2 :
No suitable device found for this connection
- 原因 :指定的接口(
ifname
)不存在或已被其他连接占用。 - 解决 :使用
nmcli device status
确认接口是否存在,或删除冲突的连接。
- 原因 :指定的接口(
-
错误 3 :
Failed to create connection: 'type' is required
- 原因 :未指定连接类型(
type
)。 - 解决 :添加
type
参数(如ethernet
、wifi
等)。
- 原因 :未指定连接类型(
6. 总结
nmcli connection add
是一个功能强大的命令,通过灵活组合参数,可以配置多种网络场景。掌握其语法和示例后,用户能够快速实现网络配置的自动化管理。对于复杂场景(如 VLAN 桥接或绑定),建议结合 nmcli device
和 nmcli connection
命令逐步调试。
nmcli connection add
是 nmcli
工具中用于创建新网络连接的核心命令之一。通过此命令,可以配置以太网(Ethernet)、Wi-Fi、网桥(Bridge)、绑定(Bonding)、VLAN 等网络连接类型。以下是详细解析:
1. 基本语法
bash
nmcli connection add [OPTIONS]
[OPTIONS]
:指定连接类型、接口名称、IP 配置等参数。
2. 常用参数
参数 | 说明 |
---|---|
type |
连接类型(如 ethernet 、wifi 、bridge 、bond 、vlan 等)。 |
con-name |
自定义连接名称(用于标识该连接)。 |
ifname |
指定绑定的物理接口名称(如 eth0 、wlan0 )。 |
ipv4.method |
IPv4 配置模式(manual 静态 IP 或 auto DHCP)。 |
ipv4.addresses |
静态 IP 地址和子网掩码(格式:IP/子网掩码 )。 |
ipv4.gateway |
默认网关地址。 |
ipv4.dns |
DNS 服务器地址(多个 DNS 用空格分隔)。 |
ssid |
Wi-Fi 网络名称(仅用于 Wi-Fi 连接)。 |
wifi-sec.key |
Wi-Fi 密码(仅用于加密 Wi-Fi)。 |
master |
主接口名称(用于 Bridge/Bond/VLAN 的从属接口)。 |
vlan-id |
VLAN ID(用于 VLAN 连接)。 |
3. 示例详解
3.1 创建以太网(Ethernet)连接
bash
nmcli connection add type ethernet con-name eth0-static ifname eth0 \
ipv4.method manual ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8
- 说明 :
type=ethernet
:以太网连接。con-name=eth0-static
:连接名称为eth0-static
。ifname=eth0
:绑定物理网卡eth0
。ipv4.method=manual
:静态 IP 配置。ipv4.addresses
:IP 地址和子网掩码。ipv4.gateway
:网关地址。ipv4.dns
:DNS 服务器。
3.2 创建 Wi-Fi 连接
bash
nmcli connection add type wifi con-name MyWiFi ifname wlan0 \
ssid "MySSID" wifi-sec.key "MyPassword"
- 说明 :
type=wifi
:Wi-Fi 连接。ssid="MySSID"
:Wi-Fi 网络名称。wifi-sec.key="MyPassword"
:Wi-Fi 密码(WPA/WPA2 加密)。
3.3 创建网桥(Bridge)
bash
# 创建网桥接口
nmcli connection add type bridge ifname br0 con-name br0
# 将物理网卡加入网桥
nmcli connection add type bridge-slave ifname eth0 master br0
# 为网桥配置 IP
nmcli connection modify br0 ipv4.method manual \
ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8
3.4 创建绑定(Bonding)
bash
# 创建 Bond 接口(mode=4:LACP)
nmcli connection add type bond ifname bond0 con-name bond0 \
bond.options "mode=4,miimon=100"
# 将物理网卡加入 Bond
nmcli connection add type bond-slave ifname eth0 master bond0
nmcli connection add type bond-slave ifname eth1 master bond0
# 为 Bond 接口配置 IP
nmcli connection modify bond0 ipv4.method manual \
ipv4.addresses 192.168.1.150/24 ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8
3.5 创建 VLAN 接口
bash
# 创建 VLAN 接口(基于 bond0,VLAN ID 100)
nmcli connection add type vlan con-name bond0-vlan100 ifname bond0.100 \
dev bond0 vlan-id 100
# 为 VLAN 接口配置 IP
nmcli connection modify bond0-vlan100 ipv4.method manual \
ipv4.addresses 192.168.100.1/24 ipv4.gateway 192.168.100.254 \
ipv4.dns 8.8.8.8
4. 激活连接
创建连接后,需使用以下命令激活:
bash
nmcli connection up <connection_name>
例如:
bash
nmcli connection up eth0-static
5. 验证配置
-
查看连接状态 :
bashnmcli connection show nmcli device status
-
查看接口详情 :
bashnmcli connection show <connection_name> ip addr show <interface>
6. 注意事项
-
权限问题 :需使用
sudo
执行命令。 -
冲突避免 :确保
NetworkManager
服务已启用并运行:bashsystemctl enable NetworkManager systemctl start NetworkManager
-
持久化配置 :配置保存在
/etc/NetworkManager/system-connections/
目录。 -
IP 冲突:配置静态 IP 时,需确保 IP 地址未被占用。
7. 常见问题排查
-
设备未启用 :
bashnmcli device set <interface> managed yes
-
Bond/VLAN 未生效:检查物理网卡状态或交换机配置。
-
连接失败 :查看日志:
bashjournalctl -u NetworkManager
通过 nmcli connection add
,可以灵活配置 Linux 网络环境,满足复杂网络需求。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但作用完全不同的参数,它们在 VLAN 配置中扮演着不同的角色:
核心区别
参数 | 全称 | 作用 | 是否必需 | 配置位置 |
---|---|---|---|---|
ifname |
Interface Name | 指定新创建的 VLAN 接口名称 | 可选 | 新 VLAN 接口 |
dev |
Device | 指定 VLAN 的父设备(物理接口) | 必需 | 已存在的物理/逻辑接口 |
详细解释
1. dev
(父设备)
-
作用 :指定 VLAN 所基于的底层物理或逻辑接口
-
必需性 :必须提供,否则 VLAN 无法创建
-
特点 :
- 指向一个已存在的接口(物理网卡、bond、bridge 等)
- 决定了 VLAN 流量实际通过的物理通道
- 在配置文件中的位置:
[vlan]
部分的parent=
-
示例 :
bash# 在物理网卡上创建 VLAN nmcli con add type vlan dev enp3s0 id 100 # 在绑定接口上创建 VLAN nmcli con add type vlan dev bond0 id 200 # 在网桥上创建 VLAN nmcli con add type vlan dev br0 id 300
2. ifname
(接口名称)
-
作用 :自定义新创建的 VLAN 接口名称
-
必需性:可选(不指定时自动生成名称)
-
特点 :
- 定义操作系统中显示的虚拟接口名称
- 不影响实际网络功能,只影响管理识别
- 在配置文件中的位置:
[connection]
部分的interface-name=
-
示例 :
bash# 自定义 VLAN 接口名 nmcli con add type vlan ifname mgmt-vlan dev enp3s0 id 100 # 自动生成名称(默认格式 vlan<ID>) nmcli con add type vlan dev enp3s0 id 100 # 自动创建 vlan100
配置对比示例
命令对比
bash
# 使用 dev 指定父接口(必需)
# 使用 ifname 自定义接口名(可选)
sudo nmcli con add type vlan \
con-name vlan100 \
ifname mgmt-vlan \ # ← 自定义接口名
dev enp3s0 \ # ← 指定物理父接口
id 100
生成的配置文件
/etc/NetworkManager/system-connections/vlan100.nmconnection
ini
[connection]
id=vlan100
type=vlan
interface-name=mgmt-vlan # ← ifname 的值
[vlan]
id=100
parent=enp3s0 # ← dev 的值
...其他配置...
实际效果演示
1. 只使用 dev
(必需)
bash
sudo nmcli con add type vlan con-name prod-vlan dev enp3s0 id 200
- 结果 :
- 创建 VLAN 接口:
vlan200
(自动命名) - 父接口:
enp3s0
- 查看接口:
ip link show vlan200
- 创建 VLAN 接口:
2. 同时使用 dev
和 ifname
bash
sudo nmcli con add type vlan \
con-name dev-vlan \
ifname vlan-dev \ # 自定义名称
dev enp4s0 \ # 父接口
id 300
- 结果 :
- 创建 VLAN 接口:
vlan-dev
(自定义名) - 父接口:
enp4s0
- 查看接口:
ip link show vlan-dev
- 创建 VLAN 接口:
3. 错误示例(缺少 dev
)
bash
sudo nmcli con add type vlan ifname vlan-error id 400
-
错误 :
vbnetError: vlan.parent: property is missing
使用场景建议
场景 | 推荐用法 | 说明 |
---|---|---|
简单配置 | 只指定 dev |
使用自动命名(vlan) |
多 VLAN 环境 | 同时指定 ifname |
自定义有意义的名称(如 vlan-mgmt ) |
脚本自动化 | 指定 ifname |
确保接口名可预测 |
临时测试 | 只指定 dev |
快速创建,无需自定义 |
重要注意事项
-
dev
必须指向有效接口:bash# 错误:dev 指向不存在的接口 sudo nmcli con add type vlan dev non-existent-interface id 100 # 正确:先确认可用接口 nmcli device status
-
接口名称冲突:
bash# 错误:ifname 使用已存在的接口名 sudo nmcli con add type vlan ifname enp3s0 dev enp4s0 id 100 # 解决方案:选择唯一名称 sudo nmcli con add type vlan ifname vlan-backup dev enp4s0 id 100
-
VLAN ID 范围:
- 有效范围:1-4094
- 避免使用保留 ID(如 0, 4095)
-
持久性:
dev
的配置是持久的,即使父接口重命名- 实际绑定基于接口 MAC 地址而非名称
关系图解
- 物理接口 (
dev
指定):真实网络设备 - VLAN 配置:连接定义
- 虚拟接口 (
ifname
指定):操作系统可见的逻辑设备
管理命令示例
bash
# 查看 VLAN 连接详情
nmcli -p con show vlan100
# 输出重点:
connection.interface-name: mgmt-vlan [ifname 的值]
vlan.parent: enp3s0 [dev 的值]
vlan.id: 100
# 修改 ifname
sudo nmcli con modify vlan100 connection.interface-name vlan-new-name
# 修改 dev(父接口)
sudo nmcli con modify vlan100 vlan.parent enp5s0
理解 ifname
和 dev
的区别对于正确配置 VLAN 至关重要:
dev
回答:"VLAN 流量从哪里来?"(物理通道)ifname
回答:"VLAN 接口叫什么名字?"(标识符)
实际配置中,dev
是功能性必需参数,而 ifname
是管理性可选参数,用于提高可读性和可管理性。
在 nmcli connection add type vlan
命令中,ifname
和 dev
是两个关键参数,它们有明确的区别和用途:
核心区别
参数 | 作用 | 必要性 | 示例值 |
---|---|---|---|
dev |
指定父接口(承载 VLAN 的物理/逻辑设备) | 必需 | dev=eth0 |
ifname |
指定 VLAN 接口名称(新建的虚拟接口) | 可选 | ifname=vlan10 |
详细说明
1. dev
(父设备)
- 作用 :指定 VLAN 标签附加的底层物理设备或逻辑设备
(如物理网卡eth0
、绑定接口bond0
、网桥br0
等) - 必要性 :必须提供,否则 VLAN 无法创建
- 特点 :
- 必须是系统中已存在的接口
- 实际承载 VLAN 流量
- 示例 :
dev=eth0
表示在物理网卡 eth0 上创建 VLAN
2. ifname
(VLAN 接口名)
- 作用 :指定新建的 VLAN 虚拟接口的名称
- 必要性 :可选(不指定时自动生成名称)
- 特点 :
- 名称格式通常为
<父接口>.<VLAN ID>
(如eth0.100
) - 可自定义名称(如
vlan100
) - 名称必须在系统中唯一
- 名称格式通常为
- 示例 :
ifname=mgmt_vlan
会创建名为mgmt_vlan
的 VLAN 接口
完整命令示例
bash
# 在 eth0 上创建 ID=100 的 VLAN,自定义接口名
nmcli connection add type vlan \
con-name "VLAN100" \
ifname mgmt_vlan \ # 自定义 VLAN 接口名
dev eth0 \ # 父接口(必需)
vlan.id 100 # VLAN ID(必需)
# 不指定 ifname(自动生成 eth0.100 接口)
nmcli connection add type vlan \
con-name "VLAN200" \
dev eth0 \ # 父接口
vlan.id 200 # VLAN ID
验证创建结果
bash
# 查看新建的 VLAN 接口
ip link show | grep vlan
# 输出示例:
# 5: mgmt_vlan@eth0: <BROADCAST,MULTICAST> ...
# 6: eth0.200@eth0: <BROADCAST,MULTICAST> ...
# 查看连接配置
nmcli connection show VLAN100
关键注意事项
-
dev
必须真实存在若指定不存在的父设备(如
dev=abc
),命令会失败 -
ifname
命名冲突自定义名称不能与现有接口重名(如不能与已有
eth0
同名) -
自动命名规则
当省略
ifname
时,生成的接口名 =<父接口>.<VLAN ID>
(如
dev=eth0
+vlan.id=100
→ 接口eth0.100
) -
VLAN 流量标签
实际 VLAN 标签由
vlan.id
参数决定,与ifname
无关
总结
场景 | 使用参数 |
---|---|
指定承载 VLAN 的物理网卡 | dev (必需) |
自定义 VLAN 虚拟接口的名称 | ifname (可选) |
定义 VLAN ID(802.1Q 标签) | vlan.id (必需) |
正确理解这两个参数可避免配置错误,特别是在复杂网络拓扑(如 VLAN over Bond/Bridge)中至关重要。
nmcli con add type vlan
中 ifname
和 dev
的区别详解
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但完全不同的参数,它们在 VLAN 配置中扮演着互补但独立的角色:
一、参数对比表
参数 | 作用对象 | 功能 | 是否必需 | 示例 | 实际位置 |
---|---|---|---|---|---|
ifname |
VLAN 接口本身 | 定义操作系统中的 VLAN 接口名称 | 必需 | ifname vlan10 |
/sys/class/net/vlan10 |
dev |
父级物理设备 | 指定 VLAN 所基于的底层物理设备 | 必需 | dev eth0 |
配置文件中的依赖关系 |
二、详细解析
1. ifname
- VLAN 接口名称
-
本质:VLAN 虚拟接口在操作系统中的唯一标识符
-
功能 :
- 定义系统看到的 VLAN 接口名称
- 用于所有网络操作命令(
ip addr
,ping
等) - 在
/sys/class/net/
中创建对应的设备节点
-
特点 :
- 必须唯一:不能与现有接口重名
- 可自定义 :支持任意有效名称(如
vlan10
,finance-net
) - 持久性:重启后保持不变
-
使用场景 :
bash# 创建名为 "vlan-office" 的 VLAN 接口 sudo nmcli con add type vlan ifname vlan-office ... # 在命令中使用该接口 ip addr show vlan-office
2. dev
- 父设备指定
-
本质:VLAN 依赖的底层物理设备
-
功能 :
- 指定 VLAN 流量承载的实际硬件
- 建立 VLAN 与物理设备的绑定关系
- 确定数据包的物理出口
-
特点 :
- 必须存在:设备必须预先可用
- 物理或虚拟:可以是物理网卡或绑定接口
- 不可省略:没有父设备就无法创建 VLAN
-
使用场景 :
bash# 在 eth0 上创建 VLAN sudo nmcli con add type vlan dev eth0 ... # 在绑定接口 bond0 上创建 VLAN sudo nmcli con add type vlan dev bond0 ...
三、配置示例分析
正确配置示例
bash
sudo nmcli con add type vlan \
con-name "vlan-finance" \ # 连接名称(逻辑标识)
ifname vlan10 \ # VLAN 接口名称(系统可见)
dev eth0 \ # 基于物理网卡 eth0
id 10 # VLAN ID
ifname
:vlan10
(操作系统中的接口名)dev
:eth0
(VLAN 的物理基础)
验证配置关系
bash
# 查看 VLAN 接口详情
ip -d link show vlan10
# 输出将显示:
# 10: vlan10@eth0: <BROADCAST,MULTICAST> ...
# vlan protocol 802.1Q id 10 <REORDER_HDR>
# link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
四、常见错误场景
错误 1:ifname
冲突
bash
sudo nmcli con add type vlan ifname eth0 dev eth1 id 20
# Error: interface name 'eth0' already in use
原因 :ifname
指定的名称已被其他接口使用
错误 2:dev
设备不存在
bash
sudo nmcli con add type vlan ifname vlan20 dev non_existent_eth id 30
# Error: Device 'non_existent_eth' not found
原因 :dev
指定的父设备不存在
错误 3:缺少必要参数
bash
sudo nmcli con add type vlan ifname vlan30
# Error: VLAN connection needs 'dev' and 'id' properties
原因 :未指定 dev
和 id
五、高级应用场景
1. 多层虚拟化
bash
# 在绑定接口上创建 VLAN
sudo nmcli con add type bond ifname bond0 ...
# 在 bond0 上创建 VLAN
sudo nmcli con add type vlan \
ifname vlan-bond \ # VLAN 接口名
dev bond0 \ # 父设备是绑定接口
id 40
2. 自定义命名方案
bash
# 按部门命名 VLAN 接口
sudo nmcli con add type vlan \
ifname net-finance \ # 自定义接口名
dev eth0 \
id 50
六、实际配置中的区别演示
配置前状态
bash
$ ip link show
1: eth0: <BROADCAST,MULTICAST> ...
2: eth1: <BROADCAST,MULTICAST> ...
执行 VLAN 创建
bash
sudo nmcli con add type vlan \
con-name "vlan-engineering" \
ifname eng-vlan \ # 自定义接口名
dev eth0 \ # 基于 eth0
id 100
配置后状态
bash
$ ip link show
1: eth0: <BROADCAST,MULTICAST> ...
2: eth1: <BROADCAST,MULTICAST> ...
3: eng-vlan@eth0: <BROADCAST,MULTICAST> ... # ifname 创建的新接口
七、管理命令参考
查看 ifname
和 dev
关系
bash
nmcli -p -f general,device,vlan dev show eng-vlan
# 输出:
# ========================================
# Device details (eng-vlan)
# ========================================
# GENERAL.DEVICE: eng-vlan
# GENERAL.TYPE: vlan
# VLAN.PARENT: eth0 <--- dev 指定的父设备
修改配置
bash
# 修改 ifname (需先停用连接)
sudo nmcli con mod "vlan-engineering" ifname eng-vlan-prod
# 修改 dev (需要删除重建)
sudo nmcli con delete "vlan-engineering"
sudo nmcli con add ... dev eth1 # 使用新父设备
八、最佳实践
-
命名规范:
bash# 统一命名方案 ifname vlan<ID>-<用途> # 如 vlan100-engineering
-
参数顺序:
bash# 先指定 dev,再定义 ifname nmcli con add type vlan dev eth0 ifname ...
-
依赖管理:
bash# 确保父设备已激活 nmcli con up eth0 # 在创建 VLAN 前激活父设备
-
配置备份:
bash# 导出 VLAN 配置 nmcli con export "vlan-engineering" > vlan-eng.nmconnection
通过理解 ifname
和 dev
的区别:
ifname
定义了 "我是谁"(VLAN 接口在系统中的身份)dev
定义了 "我从哪里来"(VLAN 的物理基础)
这种区分使您能够精确控制 VLAN 接口的创建和管理,确保网络配置的准确性和可维护性。
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键参数,它们有本质区别:
核心区别
参数 | 作用对象 | 功能描述 | 必要性 |
---|---|---|---|
dev |
父接口(物理设备) | 指定承载 VLAN 的底层物理接口(如 eth0 ) |
必填参数 |
ifname |
VLAN 虚拟接口 | 指定新建的 VLAN 虚拟接口名称(如 vlan10 ),若不指定则自动生成(如 eth0.10 ) |
可选参数 |
详细解释
1. dev
(父接口)
-
作用 :指定 VLAN 所依赖的物理网络设备(或底层接口)
-
必须显式声明:没有底层物理接口就无法创建 VLAN
-
示例 :
bashnmcli con add type vlan con-name vlan10 dev eth0 id 10
→ 表示在物理网卡
eth0
上创建 VLAN
2. ifname
(虚拟接口名)
-
作用 :为新建的 VLAN 虚拟接口指定名称
-
默认行为 :若省略,系统自动生成名称(格式:
<父接口>.<VLAN ID>
) -
示例 :
bashnmcli con add type vlan con-name vlan10 ifname myvlan dev eth0 id 10
→ 显式将 VLAN 虚拟接口命名为
myvlan
(而非默认的eth0.10
)
实际效果对比
情况1:不指定 ifname
(使用默认名称)
bash
nmcli con add type vlan con-name vlan10 dev eth0 id 10
-
生成的接口名 :
eth0.10
-
查看接口 :
bash$ ip link show 3: eth0.10@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
情况2:显式指定 ifname
bash
nmcli con add type vlan con-name vlan10 ifname office-vlan dev eth0 id 10
-
生成的接口名 :
office-vlan
-
查看接口 :
bash$ ip link show 3: office-vlan@eth0: <BROADCAST,MULTICAST> mtu 1500 ...
关键注意事项
-
dev
必须存在 :指定的物理接口(如
eth0
)必须存在于系统中(可通过ip link
验证)。 -
ifname
命名限制:- 名称不能与现有接口冲突
- 建议使用描述性名称(如
vlan-finance
)
-
操作优先级:
graph LR A[创建VLAN连接] --> B{dev 参数} B -->|指定物理接口| C[创建虚拟接口] C --> D{ifname 参数} D -->|存在| E[使用自定义名称] D -->|不存在| F[生成 ethX.Y 名称] -
查看配置 :
创建后可通过以下命令验证:
bashnmcli con show vlan10 | grep -E 'dev|ifname' # 输出示例: connection.interface-name: office-vlan # ifname 值 vlan.parent: eth0 # dev 值
典型应用场景
- 默认命名 :快速创建临时 VLAN 时省略
ifname
- 自定义命名 :
- 在脚本中固定接口名(避免动态名称导致问题)
- 多 VLAN 环境提高可读性(如
vlan10-admin
,vlan20-guest
) - 兼容某些依赖固定接口名的应用程序
💡 经验提示 :生产环境中建议始终指定
ifname
,避免因父接口名变化(如 eth0→enp0s3)导致的名称不一致问题。
nmcli con add type vlan
中 ifname
与 dev
的深度解析
在 nmcli con add type vlan
命令中,ifname
和 dev
是两个关键但容易混淆的参数,它们有完全不同的作用和意义:
核心区别对比
参数 | 作用对象 | 是否必需 | 示例值 | 本质区别 |
---|---|---|---|---|
ifname |
新创建的 VLAN 接口 | 是 | eth0.10 |
定义 VLAN 接口在系统中的名称 |
dev |
底层物理/逻辑接口 | 是 | eth0 |
指定 VLAN 基于哪个接口创建 |
详细解析
1. ifname
(接口名称)
-
作用 :指定要创建的 VLAN 接口的系统设备名称
-
特点 :
- 命名有特定格式要求(推荐:父接口名 + "." + VLAN ID)
- 必须是系统中唯一的接口名称
- 实际创建的网络接口将使用此名称
-
示例 :
bashifname enp3s0.10 # 创建名为 enp3s0.10 的 VLAN 接口
-
查看效果 :
baship link show enp3s0.10
2. dev
(父设备)
-
作用 :指定 VLAN 将基于哪个现有接口创建
-
特点 :
- 必须是已存在的物理接口或逻辑接口
- 可以是:以太网卡、绑定接口、网桥等
- 决定 VLAN 流量的物理承载
-
示例 :
bashdev enp3s0 # VLAN 基于物理网卡 enp3s0 创建 dev bond0 # VLAN 基于绑定接口 bond0 创建 dev br0 # VLAN 基于网桥 br0 创建
正确使用示例
基本用法
bash
nmcli con add type vlan \
con-name "VLAN10" \ # 连接名称(自定义)
ifname enp3s0.10 \ # 创建的 VLAN 接口名称
dev enp3s0 \ # 基于物理接口 enp3s0
id 10 \ # VLAN ID
ipv4.method manual \
ipv4.addresses 192.168.10.2/24
在绑定接口上创建 VLAN
bash
nmcli con add type vlan \
con-name "Bond-VLAN20" \
ifname bond0.20 \ # VLAN 接口名称
dev bond0 \ # 基于绑定接口
id 20
在网桥上创建 VLAN
bash
nmcli con add type vlan \
con-name "Bridge-VLAN30" \
ifname br0.30 \ # VLAN 接口名称
dev br0 \ # 基于网桥接口
id 30
常见错误及解决方案
错误 1:混淆参数位置
bash
# 错误:将父接口放在 ifname
nmcli con add type vlan ifname enp3s0 dev enp3s0.10 id 10
# 结果:创建名为 enp3s0 的接口,但尝试基于不存在的 enp3s0.10
解决方案 :严格遵循 ifname
= 新接口名,dev
= 现有接口名
错误 2:名称冲突
bash
# 错误:使用已存在的接口名
nmcli con add type vlan ifname enp3s0 dev enp4s0 id 10
# 结果:失败,因 enp3s0 已存在
解决方案 :使用唯一名称,推荐格式:<父接口>.<vlan_id>
错误 3:无效父接口
bash
# 错误:指定不存在的父接口
nmcli con add type vlan ifname vlan10 dev non_existent id 10
# 结果:失败,找不到父接口
解决方案 :先用 ip link
或 nmcli dev
验证父接口存在
高级用法技巧
1. 自定义命名规则
bash
# 使用描述性名称(非标准格式)
nmcli con add type vlan \
ifname mgmt_vlan \ # 自定义接口名
dev enp3s0 \
id 100
2. 多级 VLAN 嵌套
bash
# 在VLAN接口上再创建VLAN
nmcli con add type vlan \
ifname enp3s0.10.100 \ # 二级VLAN接口
dev enp3s0.10 \ # 基于一级VLAN接口
id 100
3. 临时 VLAN 接口
bash
# 创建不保存的临时VLAN
nmcli con add type vlan \
ifname temp_vlan \
dev enp3s0 \
id 50 \
save no # 重启后消失
技术原理图解
- 红色 :
dev
指向的物理接口 - 绿色 :
dev
指向的逻辑接口(绑定) - 蓝色 :
dev
指向的逻辑接口(网桥) - 所有输出 :
ifname
定义的系统接口
验证命令
bash
# 查看VLAN接口详细信息
ip -d link show enp3s0.10
# 输出关键信息:
# ... vlan protocol 802.1Q id 10 <REORDER_HDR> ...
# link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
# 查看父接口关联
nmcli -g general.device,connection.interface-name con show "VLAN10"
总结:
ifname
= 创建什么(新接口的名称)dev
= 基于什么 (已存在的承载接口)
两者共同定义了 VLAN 的标识和物理基础,缺一不可且不可互换。