强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第 4 章:连接类型管理

第 4 章:连接类型管理

4.1 概述

NetworkManager 支持多种连接类型,每种类型有不同的参数和使用场景:

连接类型type 值典型场景
以太网ethernet有线网络
WiFiwifi无线网络
VPNvpn / wireguard远程访问
桥接bridge虚拟化、容器
VLANvlan网络隔离
Bondbond网卡冗余/负载均衡
Teamteam高级网卡聚合
回环loopback本地通信
网格wifi-p2pWiFi Direct
DSLadslADSL 拨号

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 "[email protected]" \
    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.stpyes生成树协议,防止环路
bridge.priority32768STP 优先级,越小越优先
bridge.forward-delay15转发延迟(秒)
bridge.max-age20BPDU 最大存活时间
bridge.ageing-time300MAC 地址老化时间
bridge.multicast-snoopingyes组播监听

虚拟化场景

# 场景: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.3adLACP 动态链路聚合(交换机需支持)
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 常用选项

选项默认值说明
miimon100链路监控间隔(毫秒)
downdelay0检测到故障后延迟多久标记为 down
updelay0检测到恢复后延迟多久标记为 up
primary主接口名(active-backup 模式)
lacp_rateslowLACP 收发频率
xmit_hash_policylayer2负载均衡哈希算法

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 连接类型对比

特性BondTeamBridge
冗余
负载均衡
LACP
虚拟化支持⚠️⚠️
性能
配置复杂度中高
推荐场景服务器高可用高级聚合需求虚拟化/容器

4.9 本章小结

要点说明
以太网最基础的连接类型,支持 DHCP/静态/多 IP/802.1X
WiFi支持 WPA2/WPA3/Enterprise/隐藏网络
桥接虚拟化和容器的标准网络方案
VLAN通过 802.1Q 实现网络隔离
Bond服务器网卡冗余和带宽聚合的标准方案
TeamBond 的替代方案,新部署建议用 Bond

扩展阅读