⚠️ 提示:本站 AI 助手使用博主个人 API Token,没事别特么瞎用。
网络 ·

nmcli 命令行网络管理完全手册:CentOS/RHEL/Ubuntu 从入门到排障

在无图形界面的服务器上,nmcli 就是 NetworkManager 的瑞士军刀。从查看网卡、配静态 IP、DHCP、WiFi、Bond 绑定、Bridge 桥接、VLAN、DNS、路由,到抓包、配置文件结构、常见报错排障,全部命令都列好,随查随用。

nmcli 命令行网络管理完全手册:CentOS/RHEL/Ubuntu 从入门到排障

在有图形界面的桌面 Linux 上,网络配置点几下鼠标就完事;但到了无显示器的服务器、SSH 远程、最小化安装的环境,图形工具不存在,ifconfig / service network restart 这套旧方法已经被现代发行版(RHEL 8+、CentOS Stream、Rocky、Ubuntu 20.04+ 等)逐步淘汰。

现在的正统工具是 NetworkManager,它的命令行前端就是 nmcli。本文把所有日常会用到的操作按”从易到难 + 按场景分类”整理完整,基本做到”拿到问题 → 翻目录 → 复制命令”就解决。


零、前置:你到底要不要用 NetworkManager

先确认你装的发行版用的是什么网络管理:

# 看 NetworkManager 服务跑没跑
systemctl status NetworkManager
# 看是不是有配置文件被 network.service 接管(老系统才有)
ls /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null

# 如果没装 NetworkManager
# RHEL/CentOS/Rocky:
yum install -y NetworkManager
systemctl enable --now NetworkManager

# Ubuntu/Debian:
apt install -y network-manager
systemctl enable --now NetworkManager

注意:如果你同时启用 network.service(老的 ifcfg 脚本)+ NetworkManager,两者会打架,一定要保留一个关一个。推荐现代系统只留 NetworkManager。


一、核心概念:nmcli 里的「设备」和「连接」

nmcli 里最容易弄混的两个名词,必须先搞清楚:

概念英文是什么类比
设备(Device)device / dev物理/虚拟网卡硬件:ens33eth0wlan0bond0br0一台电脑的”网卡插槽”
连接(Connection)connection / con一份持久化的配置文件:比如”上班用静态 IP 的有线配置""家里 DHCP 的 WiFi 配置”每一份”配置模板”,可以存在磁盘上但不生效

一个设备同一时间只能有一个连接处于 up(激活)状态,但一个设备可以保存多套连接配置(比如笔记本在公司用静态、回家用 DHCP)。

记不住参数没关系,所有子命令都可以只打前几个字母 + Tab 补全:

nmcli d           # 等价于 nmcli device
nmcli c           # 等价于 nmcli connection
nmcli g           # 等价于 nmcli general
nmcli n           # 等价于 nmcli networking
nmcli r           # 等价于 nmcli radio

二、查看状态:三板斧先看明白

2.1 看总体状态

# 一眼看完 设备 / 连接 / 状态
nmcli

# 等价于 nmcli general status
nmcli g status
# STATE 显示 connected(global) 就说明联网正常

2.2 看设备列表(最常用)

nmcli device status
# 输出示例:
# DEVICE  TYPE      STATE         CONNECTION
# ens33   ethernet  connected     ens33_static
# ens34   ethernet  disconnected  --
# lo      loopback  unmanaged     --
# wlan0   wifi      disconnected  --

字段含义:

  • STATEconnected(已连上且生效)、disconnected(有网卡没配置)、unmanaged(NM 不接管,比如 lo)
  • CONNECTION:当前生效的连接名;-- 表示没激活任何连接

更详细地看单个设备的所有属性(IP、MAC、路由、DNS、MTU、驱动):

nmcli device show ens33

2.3 看连接列表(所有持久化配置)

nmcli connection show
# 或带 UUID、TYPE 的详表
nmcli -f NAME,UUID,TYPE,DEVICE,AUTOCONNECT con show

# 只看"当前活跃"的连接
nmcli con show --active

要查看某一份连接的完整参数(static IP、网关、DNS、自动连接等):

nmcli con show "ens33_static"      # 用连接名
nmcli con show 9a6c7f88-...        # 或者用 UUID

三、最常用:配静态 IP / 切 DHCP

⚠️ 远程 SSH 高危提示:你在通过 ens33 SSH 登录服务器时,如果直接把 ens33 的连接改了再 down,会把自己踢下线。安全做法是:新建一份连接 → 改完一次性 up,或者用 nmcli con mod 改完后用 nmcli con reload + nmcli con up 一次性切换。

3.1 给网卡加一份「静态 IP」连接

以网卡名 ens33,想配成 192.168.1.100/24、网关 192.168.1.1、DNS 223.5.5.5 119.29.29.29 为例:

# 创建一个新连接(连接名叫 static-ens33,对应设备 ens33)
nmcli connection add \
  type ethernet \
  ifname ens33 \
  con-name static-ens33 \
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns "223.5.5.5,119.29.29.29" \
  ipv4.dns-search "example.com,corp.local" \
  connection.autoconnect yes

参数全解:

参数含义
type ethernet以太网;WiFi 写 wifi,bond 写 bond,bridge 写 bridge
ifname ens33绑定到哪块物理网卡(nmcli d 里看到的 DEVICE 名)
con-name xxx连接的显示名,随便取,自己能认出来就行
ipv4.method manual手动静态 IP;自动 DHCP 写 auto
ipv4.addressesIP/掩码位,可以写多个,空格分隔,加 + 是追加
ipv4.gateway默认网关,只能有一个(多个默认网关没意义)
ipv4.dnsDNS,多个逗号分隔或多次写
ipv4.dns-search搜索域,写 ssh host1 时会自动补成 host1.example.com
connection.autoconnect yes开机自动连接

然后激活它(这一步才会真正应用到设备上):

nmcli connection up static-ens33

3.2 在「已有连接」上修改参数

nmcli connection modify(缩写 mod),改完不会立即生效,要 up 一下才会应用。

# 把连接 static-ens33 的 IP 改成 192.168.1.200/24,网关改 192.168.1.2
nmcli con mod static-ens33 \
  ipv4.addresses 192.168.1.200/24 \
  ipv4.gateway   192.168.1.2

# 追加第二个 DNS(保留原来的)
nmcli con mod static-ens33 +ipv4.dns 8.8.8.8

# 删掉某个 DNS
nmcli con mod static-ens33 -ipv4.dns 223.5.5.5

# 追加第二个 IP(多 IP 同网卡)
nmcli con mod static-ens33 +ipv4.addresses 192.168.1.201/24

# 应用修改
nmcli con up static-ens33

记住规则:前面加 + 是追加,- 是删除,什么都不加是覆盖

3.3 切回 DHCP

nmcli con mod static-ens33 \
  ipv4.method auto \
  ipv4.addresses "" \
  ipv4.gateway   "" \
  ipv4.dns       ""
nmcli con up static-ens33

# 验证
nmcli d show ens33 | grep -E 'IP4\.ADDRESS|IP4\.GATEWAY|IP4\.DNS'

四、开关网卡、启停连接、重载、重启 NM

# ============= 连接层面 =============
# 断开某份连接(不会删除配置,只是暂时不生效)
nmcli con down static-ens33
# 再拉起来
nmcli con up   static-ens33

# ============= 设备层面 =============
# 物理断开某块网卡(相当于拔网线)
nmcli d disconnect ens33
# 重新连接,NM 会选最优先的 autoconnect 连接激活
nmcli d connect    ens33

# ============= 全局 =============
# 让 NM 重新读所有 ifcfg/keyfile 配置(改完文件不想重启服务时用)
nmcli con reload

# 整个 NM 服务重启(远程慎用,可能断几秒)
systemctl restart NetworkManager

# 完全关闭网络(所有网卡断开)/ 再开
nmcli networking off
nmcli networking on

五、删除/克隆/改名/改优先级

# 删除一份连接配置(永久从磁盘删掉)
nmcli con delete static-ens33

# 克隆一份(基于已有连接复制一份再改参数)
nmcli con clone static-ens33 static-ens33-vlan100
nmcli con mod   static-ens33-vlan100 ipv4.addresses 10.0.100.2/24

# 改连接显示名
nmcli con mod static-ens33 connection.id "公司内网-静态IP"

# 改自动连接优先级(值越大越先被选中)
# 比如有线优先级要高于 WiFi:设为 999
nmcli con mod static-ens33 connection.autoconnect-priority 999
# WiFi 设低一点
nmcli con mod MyHomeWiFi   connection.autoconnect-priority 100

六、WiFi(无线网卡)管理

先看 WiFi 开关和网卡:

# 看所有无线网卡
nmcli device status | grep wifi

# WiFi 总开关
nmcli radio wifi off      # 关
nmcli radio wifi on       # 开
nmcli r wifi              # 查看状态

6.1 扫描 + 列出附近 WiFi

nmcli device wifi list
# 或强制重新扫描一遍
nmcli device wifi rescan
sleep 2
nmcli d wifi list

# 只看 SSID / 信号强度 / 加密
nmcli -f SSID,SIGNAL,SECURITY,BARS d wifi list

6.2 连一个开放 WiFi(没密码)

# 直接连,会自动存一份连接配置
nmcli device wifi connect "FreeWiFi"

6.3 连 WPA/WPA2 加密 WiFi

# 把密码直接拼后面(会自动存到 /etc/NetworkManager/ 下的 keyfile 里,权限 600)
nmcli d wifi connect "MyHomeWiFi" password "wifipassword123"

# 如果想隐藏密码,不让它出现在 history 里,用 --ask 交互输密码
nmcli d wifi connect "CorpWiFi" --ask
# 或者连接后只在内存里保留(重启消失),不存盘
nmcli d wifi connect "CoffeeWiFi" password "guest" save no

6.4 切换已记住的 WiFi / 忘记

# 列出所有 WiFi 连接
nmcli -f NAME,TYPE con show | grep 802-11-wireless

# 切到某一个(等价于你手机里点"连接")
nmcli con up "MyHomeWiFi"

# 彻底忘记(删除)
nmcli con delete "CoffeeWiFi"

6.5 隐藏 SSID 的 WiFi

nmcli con add \
  type wifi ifname wlan0 \
  con-name HiddenSSID-Conn \
  ssid "HiddenName" \
  wifi-sec.key-mgmt wpa-psk \
  wifi-sec.psk "mysecretpass" \
  802-11-wireless.hidden yes
nmcli con up HiddenSSID-Conn

6.6 企业级 802.1X(WPA2-Enterprise / PEAP)

常见于公司/大学 WiFi,要账号密码:

nmcli con add \
  type wifi ifname wlan0 \
  con-name CorpWiFi \
  ssid "CORP-WIFI" \
  wifi-sec.key-mgmt wpa-eap \
  802-1x.eap peap \
  802-1x.identity "zhangsan@corp.com" \
  802-1x.password "********" \
  802-1x.phase2-auth mschapv2
nmcli con up CorpWiFi

七、网卡 Bond(绑定 / 链路聚合)

Bond 是把两块物理网卡绑成一个逻辑 bond0,常见两种模式:

mode名字要交换机配合说明
active-backup主备❌ 不要一块挂了自动切另一块,最常用
802.3ad (LACP)动态聚合✅ 交换机要开 LACP带宽叠加 + 冗余
balance-alb自适应负载均衡发/收都负载,只在部分网卡驱动工作好

7.1 模式 1:active-backup 主备(最稳)

# Step 1: 建 master bond0
nmcli con add \
  type bond ifname bond0 \
  con-name bond0-main \
  bond.options "mode=active-backup,miimon=100,primary=ens33"
# miimon=100:每 100ms 检查一次链路是否通
# primary=ens33:主网卡是 ens33,正常流量都走它

# Step 2: 给 bond0 配 IP(也可以 ipv4.method auto 走 DHCP)
nmcli con mod bond0-main \
  ipv4.method manual \
  ipv4.addresses 10.0.0.50/24 \
  ipv4.gateway   10.0.0.1 \
  ipv4.dns "223.5.5.5,119.29.29.29"

# Step 3: 把两块物理网卡挂为 bond0 的 slave
nmcli con add type bond-slave ifname ens33 master bond0
nmcli con add type bond-slave ifname ens34 master bond0

# Step 4: 全起来
nmcli con up bond-slave-ens33
nmcli con up bond-slave-ens34
nmcli con up bond0-main

验证:

cat /proc/net/bonding/bond0
# 看 Currently Active Slave、MII Status 是否 up

7.2 模式 4:LACP 动态聚合(交换机要配)

只改第一步的 bond.options:

nmcli con add type bond ifname bond0 con-name bond0-lacp \
  bond.options "mode=802.3ad,miimon=100,lacp_rate=fast,xmit_hash_policy=layer3+4"
# xmit_hash_policy=layer3+4:按 源IP+目标IP+源端口+目标端口 散列,不同连接走不同物理卡

八、Bridge 桥接(虚拟机、Docker、KVM 常用)

Bridge 把一块物理网卡”桥接”出来,让 KVM 虚拟机/容器能像物理机一样在同一局域网拿 IP。

# Step 1: 建 br0
nmcli con add type bridge ifname br0 con-name br0
nmcli con mod br0 ipv4.method manual \
  ipv4.addresses 192.168.10.1/24

# 常见优化(k8s / docker 场景必做,防止二层转发被过滤)
nmcli con mod br0 bridge.stp no            # 关 STP
nmcli con mod br0 bridge.forward-delay 0    # 端口立刻到 forwarding

# Step 2: 把物理卡 ens33 挂为桥的从属
nmcli con add type bridge-slave ifname ens33 master br0
nmcli con up bridge-slave-ens33
nmcli con up br0

# Step 3: 把 br0 当作物理 IP 网关用(想让宿主机也走它就配 IP,纯转发不配也行)

验证桥接关系:

bridge link show
# 或
nmcli d show | grep -E 'DEVICE|TYPE|BRIDGE'

九、VLAN(单臂/多臂 VLAN 子接口)

交换机口是 Trunk 模式,过来的包带 802.1Q VLAN 标签,Linux 上要拆成子接口:

# 在物理卡 ens33 上建一个 VLAN 100,子接口名默认 ens33.100
nmcli con add \
  type vlan \
  ifname ens33.100 \
  con-name vlan100 \
  dev ens33 \
  id 100 \
  ipv4.method manual \
  ipv4.addresses 10.10.100.1/24

nmcli con up vlan100

# 同理加 VLAN 200
nmcli con add type vlan ifname ens33.200 con-name vlan200 dev ens33 id 200 \
  ipv4.method manual ipv4.addresses 10.10.200.1/24
nmcli con up vlan200

验证 VLAN 带标签出包:

tcpdump -i ens33 -nn -e vlan and host 10.10.100.2

十、Team(新版链路聚合,替代 Bond)

RHEL 7 起推出的 teamd 方案,比 Bond 更灵活,功能基本对等。这里只给最简示例:

nmcli con add type team ifname team0 con-name team0 \
  team.config '{"runner":{"name":"activebackup"}}'
nmcli con mod team0 ipv4.method manual ipv4.addresses 10.0.0.60/24

nmcli con add type team-slave ifname ens33 master team0
nmcli con add type team-slave ifname ens34 master team0

nmcli con up team-slave-ens33
nmcli con up team-slave-ens34
nmcli con up team0

# 查状态
teamdctl team0 state view

选 team 还是 bond:大多数生产继续用 Bond 就行,生态成熟;有复杂故障检测需求再考虑 Team。


十一、路由(静态路由、策略路由、多路由表)

11.1 普通静态路由

172.16.0.0/16192.168.1.254 这个下一跳,绑定到连接 static-ens33

# 临时加(重启失效)
ip route add 172.16.0.0/16 via 192.168.1.254 dev ens33

# 永久加(写到 NM 连接里,重启有效)
nmcli con mod static-ens33 +ipv4.routes "172.16.0.0/16 192.168.1.254"
nmcli con up static-ens33

# 多条路由
nmcli con mod static-ens33 +ipv4.routes "172.16.0.0/16 192.168.1.254, 10.20.0.0/16 192.168.1.253"

11.2 黑/黑洞路由、拒绝路由

# 黑洞:丢弃且不回 ICMP 不可达(推荐防攻击时用)
nmcli con mod static-ens33 +ipv4.routes "blackhole 203.0.113.0/24"
# prohibit:回 ICMP prohibited
nmcli con mod static-ens33 +ipv4.routes "prohibit 198.51.100.0/24"
# unreachable:回 ICMP 主机不可达
nmcli con mod static-ens33 +ipv4.routes "unreachable 10.99.0.0/16"

11.3 策略路由(多出口 / 源地址路由)

典型场景:服务器有两块网卡,两个公网 IP,要保证”从哪个口进来的流量,回复时原路回去”(源路由)。

# Step 1: 在 /etc/iproute2/rt_tables 加两张自定义路由表(1=电信,2=联通)
echo "100 isp1" >> /etc/iproute2/rt_tables
echo "200 isp2" >> /etc/iproute2/rt_tables

# Step 2: 给连接各自加规则:源 IP 是哪个 ISP 的就查哪张表
# ens33 是 ISP1 : IP 203.0.113.10/24,网关 203.0.113.1
nmcli con mod static-ens33 \
  ipv4.routes "0.0.0.0/0 203.0.113.1 table=100" \
  ipv4.routing-rules "priority 100 from 203.0.113.10/32 table 100"

# ens34 是 ISP2 : IP 198.51.100.20/24,网关 198.51.100.1
nmcli con mod static-ens34 \
  ipv4.routes "0.0.0.0/0 198.51.100.1 table=200" \
  ipv4.routing-rules "priority 200 from 198.51.100.20/32 table 200"

nmcli con up static-ens33
nmcli con up static-ens34

# Step 3: 验证
ip rule list
ip route show table 100
ip route show table 200

十二、DNS / Hostname / 搜索域

12.1 DNS

# 改某连接的 DNS(最常用)
nmcli con mod static-ens33 ipv4.ignore-auto-dns yes  # 忽略 DHCP 下发的 DNS
nmcli con mod static-ens33 ipv4.dns "223.5.5.5,119.29.29.29,8.8.8.8"
nmcli con mod static-ens33 ipv4.dns-search "corp.local,example.com"
nmcli con up  static-ens33

# 全局验证
cat /etc/resolv.conf
# 注意:NM 管理下 /etc/resolv.conf 往往是个软链,别手动改,改了会被覆盖
#   Ubuntu:     /run/NetworkManager/resolv.conf
#   RHEL:       /var/run/NetworkManager/resolv.conf

12.2 Hostname

# 查看
hostnamectl

# 改(立刻生效且持久化)
hostnamectl set-hostname web-01.corp.local
# 同步 NM 里的"主机静态名"
nmcli general hostname web-01.corp.local

12.3 临时 override DNS(不改配置)

# 只对当前这次解析追加一个 DNS,不写磁盘
resolvectl dns ens33 1.1.1.1 8.8.8.8
resolvectl domain ens33 corp.local
resolvectl status

十三、MTU / MAC 克隆 / 双栈 IPv6

# ============= MTU =============
# Jumbo Frame(内网存储/备份提速,交换机也要开 9000)
nmcli con mod static-ens33 802-3-ethernet.mtu 9000
nmcli con up  static-ens33
ip link show ens33       # 看 mtu 9000

# ============= MAC 地址克隆 =============
nmcli con mod static-ens33 802-3-ethernet.cloned-mac-address 00:11:22:33:44:55

# ============= IPv6 =============
# 静态
nmcli con mod static-ens33 \
  ipv6.method manual \
  ipv6.addresses 240e:3b1:4f01:1::55/64 \
  ipv6.gateway   240e:3b1:4f01:1::1 \
  ipv6.dns "2400:3200::1,2400:3200:baba::1"
# 或 SLAAC 自动
nmcli con mod static-ens33 ipv6.method auto
# 或关 IPv6
nmcli con mod static-ens33 ipv6.method ignore

十四、配置文件落地位置(keyfile 存储)

Modern NM 默认用 keyfile(INI 格式)存储,位置:

ls /etc/NetworkManager/system-connections/
# 每份连接一个 .nmconnection 文件,权限必须 600 root:root,否则 NM 会拒绝加载
# 如果手动改了这个文件,要 nmcli con reload 让 NM 重新读

看一眼文件结构(举例):

# /etc/NetworkManager/system-connections/static-ens33.nmconnection
[connection]
id=static-ens33
uuid=9a6c7f88-0d8e-4a3b-91a4-e8556bff1234
type=ethernet
autoconnect=true
autoconnect-priority=999
interface-name=ens33

[ethernet]
mtu=1500

[ipv4]
method=manual
address1=192.168.1.100/24,192.168.1.1
dns=223.5.5.5;119.29.29.29;
dns-search=corp.local;example.com;

[ipv6]
method=auto

另外还有老的 /etc/sysconfig/network-scripts/ifcfg-* 存储(ifcfg-rh 插件),RHEL 系列仍兼容但不推荐新建,未来版本会彻底移除。


十五、常见报错排障 Checklist

现象原因排查命令常见根因
连接创建完,nmcli con up 失败,提示 device not availablenmcli d statusnmcli n allrfkill list① 网卡被 NM 设置成 unmanaged ② WiFi 硬件开关锁住 rfkill unblock wlan ③ 物理接口被别的 bond/bridge 占用
配置了静态 IP 但还是拿到 DHCP 的 IPnmcli -f NAME,DEVICE con show --active① 网卡上有两份连接都在 auto,被另一优先级高的抢先 ② connection.autoconnect-priority 调高你的目标连接,或 nmcli con down <另一个>
改 DNS 不生效ls -l /etc/resolv.confcat /etc/NetworkManager/NetworkManager.conf[main] dns=① NM 把 resolv.conf 交给 systemd-resolved 管了(dns=systemd-resolved),要用 resolvectl 看 ② 文件权限错了 → chattr -i /etc/resolv.conf 解保护
SSH 远程改 IP 把自己踢下线,连不回去了远程机房要 KVM/IPMI;本地有 console 用 console远程改 IP 的黄金法则(sleep 300; nmcli con down static-ens33; nmcli con up old-safe-con)& 起后台任务回滚;你操作成功了再 kill 掉这个定时任务
bond0 up 但 MII Status 显示 downcat /proc/net/bonding/bond0ethtool ens33ip link show物理网线没插、交换机口没开、bond 的 miimon 太短 / 太长,或 slave 没加对
桥接后 KVM 虚拟机拿不到 DHCPbrctl show(或 bridge link);`nmcli con show br0grep -E ‘bridge.(stp
VLAN 接口 ping 不通同 VLAN 的主机ip -d link showtcpdump -i ens33 -nn -e vlan;看交换机对端是不是 trunk交换机端口没设 trunk + allowed vlan 缺这个标签;Linux 侧 nmcli con mod vlan100 vlan.flags 1(如果需要 reorder header)
802.1X 企业 WiFi 反复弹身份验证`journalctl -u NetworkManager -fgrep -i “supplicant|eap|1x”`
NM 日志太吵 / 调试要 verbosenmcli general logging level TRACE domains ALL 调完记得改回 INFO

抓日志三板斧

# 实时看 NM 日志(最好用,排查啥都能看)
journalctl -u NetworkManager -f

# 更底层的 WiFi / wpa_supplicant
journalctl -u wpa_supplicant -f

# 只看最近 10 分钟错误
journalctl -u NetworkManager --since "10 min ago" -p err

十六、速查表(Cheat Sheet)

# ===== 查看 =====
nmcli                                       # 总览
nmcli d status                              # 设备
nmcli c show                                # 所有连接
nmcli c show --active                       # 激活的连接
nmcli d show ens33                          # 某设备详情
nmcli c show "static-ens33"                 # 某连接所有配置
nmcli d wifi list                           # WiFi 扫描

# ===== 新建 =====
nmcli c add type ethernet ifname ens33 con-name STATIC \
  ipv4.method manual ipv4.addresses 10.0.0.10/24 \
  ipv4.gateway 10.0.0.1 ipv4.dns "223.5.5.5,119.29.29.29"
nmcli c up STATIC

nmcli d wifi connect "MyWiFi" password "mypassword"       # 连 WiFi

# ===== 修改(mod 后 + 追加 / - 删除 / 空 覆盖)=====
nmcli c mod STATIC +ipv4.addresses 10.0.0.11/24          # 加第 2 个 IP
nmcli c mod STATIC +ipv4.dns 8.8.8.8                     # 加第 2 个 DNS
nmcli c mod STATIC connection.autoconnect yes            # 开机自动
nmcli c mod STATIC connection.autoconnect-priority 999   # 优先级

# ===== 启停 =====
nmcli c up   STATIC
nmcli c down STATIC
nmcli d disconnect ens33
nmcli d connect    ens33
nmcli con reload
systemctl restart NetworkManager

# ===== 高级 =====
# Bond
nmcli c add type bond ifname bond0 con-name BOND0 \
  bond.options "mode=active-backup,miimon=100"
nmcli c add type bond-slave ifname ens33 master bond0
nmcli c add type bond-slave ifname ens34 master bond0
nmcli c up BOND0

# Bridge
nmcli c add type bridge ifname br0 con-name BR0 bridge.stp no
nmcli c add type bridge-slave ifname ens33 master br0
nmcli c up BR0

# VLAN
nmcli c add type vlan ifname ens33.100 con-name V100 dev ens33 id 100 \
  ipv4.method manual ipv4.addresses 10.100.0.1/24
nmcli c up V100

# 静态路由
nmcli c mod STATIC +ipv4.routes "172.16.0.0/16 10.0.0.2"
nmcli c up STATIC

# ===== 诊断 =====
nmcli general logging level TRACE domains ALL        # 调详细日志
journalctl -u NetworkManager -f                      # 实时看日志
cat /proc/net/bonding/bond0                          # bond 状态
bridge link show                                     # 桥接
ip rule list; ip route show table 100                # 策略路由

十七、延伸阅读 & 和老工具的映射

习惯了老命令,可以按下面对照找 nmcli 版本:

老命令 / 老方法nmcli 等效
ifconfig / ip addrnmcli d showip a
ifup eth0 / ifdown eth0nmcli con up eth0 / nmcli con down eth0
/etc/sysconfig/network-scripts/ifcfg-eth0 然后 service network restartnmcli con mod + nmcli con reload + nmcli con up
/etc/resolv.confnmcli con mod ... ipv4.dns ... + nmcli con up
iw dev wlan0 scan / wpa_clinmcli d wifi list / nmcli d wifi connect ...
手搓 bonding.conf + /etc/modprobe.d/bonding.confnmcli c add type bond + bond-slave

一句收尾nmcli 的设计原则是”所有配置一份不落盘,一份不临时”,通过 connection 这个抽象把所有持久化配置变成版本可控的对象。掌握它,你在 CentOS、RHEL、Ubuntu Server、Rocky、Oracle Linux 上的网络管理命令就统一成一套,不用再记发行版差异。

问问 AI