NetworkManager 运维教程 / 第 4 章:连接类型管理
第 4 章:连接类型管理
4.1 概述
NetworkManager 支持多种连接类型,每种类型有不同的参数和使用场景:
| 连接类型 | type 值 | 典型场景 |
|---|---|---|
| 以太网 | ethernet | 有线网络 |
| WiFi | wifi | 无线网络 |
| VPN | vpn / wireguard | 远程访问 |
| 桥接 | bridge | 虚拟化、容器 |
| VLAN | vlan | 网络隔离 |
| Bond | bond | 网卡冗余/负载均衡 |
| Team | team | 高级网卡聚合 |
| 回环 | loopback | 本地通信 |
| 网格 | wifi-p2p | WiFi Direct |
| DSL | adsl | ADSL 拨号 |
4.2 以太网(Ethernet)
DHCP 连接
# 最简方式:DHCP 自动获取
nmcli connection add \
type ethernet \
con-name "eth0-dhcp" \
ifname eth0
# 启用连接
nmcli connection up "eth0-dhcp"
静态 IP 连接
# 完整静态配置
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" \
ipv4.dns-search "example.com" \
ipv6.method disabled \
ethernet.mtu 1500 \
connection.autoconnect yes
# 激活
nmcli connection up "eth0-static"
多 IP 地址
# 为一个接口配置多个 IP
nmcli connection modify "eth0-static" \
ipv4.addresses "192.168.1.100/24,192.168.1.101/24,10.0.0.100/24"
# 或逐个添加
nmcli connection modify "eth0-static" +ipv4.addresses "192.168.1.101/24"
nmcli connection modify "eth0-static" +ipv4.addresses "10.0.0.100/24"
# 查看
nmcli connection show "eth0-static" | grep ipv4.addresses
# 生效
nmcli connection up "eth0-static"
高级以太网设置
# 设置 MTU(巨型帧)
nmcli connection modify "eth0-static" ethernet.mtu 9000
# 设置双工模式和速率
nmcli connection modify "eth0-static" ethernet.auto-negotiate yes
# 设置 MAC 地址(克隆)
nmcli connection modify "eth0-static" \
ethernet.cloned-mac-address "AA:BB:CC:DD:EE:FF"
# 固定 MAC(不随机化)
nmcli connection modify "eth0-static" \
ethernet.cloned-mac-address preserve
# 静态路由
nmcli connection modify "eth0-static" \
+ipv4.routes "10.10.0.0/16 192.168.1.254"
nmcli connection modify "eth0-static" \
+ipv4.routes "172.16.0.0/12 192.168.1.254"
# 策略路由(基于表)
nmcli connection modify "eth0-static" \
+ipv4.route-table 100
nmcli connection modify "eth0-static" \
+ipv4.routing-rules "priority 100 from 192.168.1.0/24 table 100"
# 查看所有属性
nmcli -f ethernet connection show "eth0-static"
802.1X 认证(企业有线网络)
# 使用 EAP-TLS(证书认证)
nmcli connection add \
type ethernet \
con-name "Corp-8021x" \
ifname eth0 \
802-1x.eap tls \
802-1x.identity "user@example.com" \
802-1x.client-cert "/path/to/client-cert.pem" \
802-1x.private-key "/path/to/client-key.pem" \
802-1x.private-key-password "keypass" \
802-1x.ca-cert "/path/to/ca-cert.pem" \
802-1x.domain-suffix-match "example.com"
# 使用 PEAP(用户名/密码)
nmcli connection add \
type ethernet \
con-name "Corp-PEAP" \
ifname eth0 \
802-1x.eap peap \
802-1x.phase2-auth mschapv2 \
802-1x.identity "username" \
802-1x.password "password"
4.3 WiFi 连接
# 连接到开放网络
nmcli connection add \
type wifi \
con-name "Cafe-WiFi" \
ifname wlan0 \
ssid "CafeWiFi" \
wifi-sec.key-mgmt none \
ipv4.method auto
# WPA/WPA2-PSK
nmcli connection add \
type wifi \
con-name "HomeWiFi" \
ifname wlan0 \
ssid "MyHomeNetwork" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "MyPassword123" \
ipv4.method auto
# WPA3-Personal (SAE)
nmcli connection add \
type wifi \
con-name "WiFi6-Network" \
ifname wlan0 \
ssid "WiFi6" \
wifi-sec.key-mgmt sae \
wifi-sec.psk "SecurePassword" \
ipv4.method auto
# 隐藏网络
nmcli connection add \
type wifi \
con-name "Hidden-WiFi" \
ifname wlan0 \
ssid "HiddenSSID" \
wifi.hidden yes \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "password"
# 绑定特定 BSSID(AP)
nmcli connection modify "HomeWiFi" \
wifi.bssid "AA:BB:CC:DD:EE:FF"
# 设置 WiFi 频段偏好
nmcli connection modify "HomeWiFi" \
wifi.band a # 5GHz only
# bg = 2.4GHz only, a = 5GHz only
4.4 桥接(Bridge)
桥接常用于虚拟化和容器场景,将多个接口合并为一个逻辑桥。
创建桥接
# 创建桥接接口
nmcli connection add \
type bridge \
con-name "br0" \
ifname br0 \
ipv4.method manual \
ipv4.addresses "192.168.1.10/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8" \
bridge.stp yes \
bridge.priority 32768 \
bridge.forward-delay 15
# 创建桥接端口(将 eth0 加入桥接)
nmcli connection add \
type ethernet \
con-name "br0-port1" \
ifname eth0 \
master br0 \
slave-type bridge
# 查看桥接状态
bridge link show
brctl show # 如果安装了 bridge-utils
# 查看桥接详细信息
nmcli connection show "br0" | grep bridge
桥接属性说明
| 属性 | 默认值 | 说明 |
|---|---|---|
bridge.stp | yes | 生成树协议,防止环路 |
bridge.priority | 32768 | STP 优先级,越小越优先 |
bridge.forward-delay | 15 | 转发延迟(秒) |
bridge.max-age | 20 | BPDU 最大存活时间 |
bridge.ageing-time | 300 | MAC 地址老化时间 |
bridge.multicast-snooping | yes | 组播监听 |
虚拟化场景
# 场景:KVM/QEMU 使用桥接网络
# 1. 创建桥接
nmcli connection add type bridge con-name "virbr0" ifname virbr0 \
ipv4.method manual ipv4.addresses "192.168.122.1/24"
# 2. 将物理网卡加入桥接
nmcli connection add type ethernet con-name "virbr0-eth0" ifname eth0 \
master virbr0 slave-type bridge
# 3. KVM 虚拟机使用 virbr0 作为桥接网络
# virt-install ... --network bridge=virbr0
4.5 VLAN
VLAN 用于在物理网络上创建逻辑隔离的子网络。
# 创建 VLAN(假设 eth0 为父接口,VLAN ID 100)
nmcli connection add \
type vlan \
con-name "vlan100" \
ifname eth0.100 \
vlan.parent eth0 \
vlan.id 100 \
ipv4.method manual \
ipv4.addresses "10.100.0.1/24"
# 创建 VLAN 200
nmcli connection add \
type vlan \
con-name "vlan200" \
ifname eth0.200 \
vlan.parent eth0 \
vlan.id 200 \
ipv4.method manual \
ipv4.addresses "10.200.0.1/24"
# 查看 VLAN 配置
nmcli connection show "vlan100" | grep vlan
# 验证 VLAN 接口
ip -d link show eth0.100
# VLAN + 桥接组合
# 先创建 VLAN
nmcli connection add type vlan con-name "vlan100" \
ifname eth0.100 vlan.parent eth0 vlan.id 100
# 创建桥接并关联 VLAN
nmcli connection add type bridge con-name "br-vlan100" ifname br-vlan100 \
ipv4.method manual ipv4.addresses "10.100.0.1/24"
# 将 VLAN 接口加入桥接
nmcli connection add type vlan con-name "br-vlan100-port" \
ifname eth0.100 master br-vlan100 slave-type bridge
4.6 Bond(网卡绑定)
Bond 将多个物理网卡绑定为一个逻辑接口,提供冗余和/或带宽聚合。
Bond 模式说明
| 模式 | NM 参数 | 说明 |
|---|---|---|
| balance-rr (0) | balance-rr | 轮询,提供负载均衡 |
| active-backup (1) | active-backup | 主备,高可用推荐 |
| balance-xor (2) | balance-xor | 基于 MAC 地址的 XOR 哈希 |
| broadcast (3) | broadcast | 广播,所有从接口发送 |
| 802.3ad (4) | 802.3ad | LACP 动态链路聚合(交换机需支持) |
| balance-tlb (5) | balance-tlb | 自适应发送负载均衡 |
| balance-alb (6) | balance-alb | 自适应负载均衡(收发均均衡) |
创建 Bond
# 创建 Bond 接口(active-backup 模式,高可用)
nmcli connection add \
type bond \
con-name "bond0" \
ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.method manual \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8"
# 添加从接口 eth0
nmcli connection add \
type ethernet \
con-name "bond0-slave0" \
ifname eth0 \
master bond0 \
slave-type bond
# 添加从接口 eth1
nmcli connection add \
type ethernet \
con-name "bond0-slave1" \
ifname eth1 \
master bond0 \
slave-type bond
# 查看 Bond 状态
cat /proc/net/bonding/bond0
# 查看 Bond 当前活跃接口
nmcli connection show "bond0" | grep bond
LACP Bond(交换机支持时)
# 802.3ad (LACP) 模式
nmcli connection add \
type bond \
con-name "bond-lacp" \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast,xmit_hash_policy=layer3+4" \
ipv4.method manual \
ipv4.addresses "10.0.0.10/24"
# lacp_rate=fast → 每秒发送 LACPDU
# lacp_rate=slow → 每 30 秒发送 LACPDU(默认)
# xmit_hash_policy → 负载均衡算法
# layer2 = 基于 MAC(默认)
# layer3+4 = 基于 IP+端口(推荐)
# layer2+3 = 基于 MAC+IP
Bond 常用选项
| 选项 | 默认值 | 说明 |
|---|---|---|
miimon | 100 | 链路监控间隔(毫秒) |
downdelay | 0 | 检测到故障后延迟多久标记为 down |
updelay | 0 | 检测到恢复后延迟多久标记为 up |
primary | 无 | 主接口名(active-backup 模式) |
lacp_rate | slow | LACP 收发频率 |
xmit_hash_policy | layer2 | 负载均衡哈希算法 |
4.7 Team(网卡聚合)
Team 是 Bond 的现代替代方案,使用 teamd 守护进程实现,功能更灵活。
注意:Team 功能已在较新的 NetworkManager 中逐步被 Bond 取代,Bond 已支持大部分 Team 的特性。新部署建议优先使用 Bond。
# 安装 teamd(如果未安装)
sudo apt install teamd # Debian/Ubuntu
sudo dnf install teamd # RHEL/Fedora
# 创建 Team 接口
nmcli connection add \
type team \
con-name "team0" \
ifname team0 \
team.config '{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}' \
ipv4.method manual \
ipv4.addresses "192.168.1.100/24"
# 添加从接口
nmcli connection add type ethernet con-name "team0-slave0" \
ifname eth0 master team0 slave-type team
nmcli connection add type ethernet con-name "team0-slave1" \
ifname eth1 master team0 slave-type team
# Team 运行模式
# runner.name 可选值:
# broadcast - 广播
# roundrobin - 轮询
# activebackup - 主备
# loadbalance - 负载均衡
# lacp - LACP
# 查看 Team 状态
teamdctl team0 state
teamdctl team0 state view
4.8 连接类型对比
| 特性 | Bond | Team | Bridge |
|---|---|---|---|
| 冗余 | ✅ | ✅ | ❌ |
| 负载均衡 | ✅ | ✅ | ❌ |
| LACP | ✅ | ✅ | ❌ |
| 虚拟化支持 | ⚠️ | ⚠️ | ✅ |
| 性能 | 高 | 高 | 中 |
| 配置复杂度 | 中 | 中高 | 低 |
| 推荐场景 | 服务器高可用 | 高级聚合需求 | 虚拟化/容器 |
4.9 本章小结
| 要点 | 说明 |
|---|---|
| 以太网 | 最基础的连接类型,支持 DHCP/静态/多 IP/802.1X |
| WiFi | 支持 WPA2/WPA3/Enterprise/隐藏网络 |
| 桥接 | 虚拟化和容器的标准网络方案 |
| VLAN | 通过 802.1Q 实现网络隔离 |
| Bond | 服务器网卡冗余和带宽聚合的标准方案 |
| Team | Bond 的替代方案,新部署建议用 Bond |