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 | 物理/虚拟网卡硬件:ens33、eth0、wlan0、bond0、br0 | 一台电脑的”网卡插槽” |
| 连接(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 --
字段含义:
- STATE:
connected(已连上且生效)、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 高危提示:你在通过
ens33SSH 登录服务器时,如果直接把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.addresses | IP/掩码位,可以写多个,空格分隔,加 + 是追加 |
ipv4.gateway | 默认网关,只能有一个(多个默认网关没意义) |
ipv4.dns | DNS,多个逗号分隔或多次写 |
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/16 走 192.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 available | nmcli d status;nmcli n all;rfkill list | ① 网卡被 NM 设置成 unmanaged ② WiFi 硬件开关锁住 rfkill unblock wlan ③ 物理接口被别的 bond/bridge 占用 |
| 配置了静态 IP 但还是拿到 DHCP 的 IP | nmcli -f NAME,DEVICE con show --active | ① 网卡上有两份连接都在 auto,被另一优先级高的抢先 ② connection.autoconnect-priority 调高你的目标连接,或 nmcli con down <另一个> |
| 改 DNS 不生效 | ls -l /etc/resolv.conf;cat /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 显示 down | cat /proc/net/bonding/bond0;ethtool ens33;ip link show | 物理网线没插、交换机口没开、bond 的 miimon 太短 / 太长,或 slave 没加对 |
| 桥接后 KVM 虚拟机拿不到 DHCP | brctl show(或 bridge link);`nmcli con show br0 | grep -E ‘bridge.(stp |
| VLAN 接口 ping 不通同 VLAN 的主机 | ip -d link show;tcpdump -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 -f | grep -i “supplicant|eap|1x”` |
| NM 日志太吵 / 调试要 verbose | nmcli 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 addr | nmcli d show 、 ip a |
ifup eth0 / ifdown eth0 | nmcli con up eth0 / nmcli con down eth0 |
改 /etc/sysconfig/network-scripts/ifcfg-eth0 然后 service network restart | nmcli con mod + nmcli con reload + nmcli con up |
改 /etc/resolv.conf | nmcli con mod ... ipv4.dns ... + nmcli con up |
iw dev wlan0 scan / wpa_cli | nmcli d wifi list / nmcli d wifi connect ... |
手搓 bonding.conf + /etc/modprobe.d/bonding.conf | nmcli c add type bond + bond-slave |
一句收尾:
nmcli的设计原则是”所有配置一份不落盘,一份不临时”,通过connection这个抽象把所有持久化配置变成版本可控的对象。掌握它,你在 CentOS、RHEL、Ubuntu Server、Rocky、Oracle Linux 上的网络管理命令就统一成一套,不用再记发行版差异。