跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

NetworkManager 完全使用指南:从入门到精通

NetworkManager 是 Linux 世界中最强大的网络管理工具之一。它不仅仅是一个命令行工具,更是一整套完整的网络管理框架。本文将从最基础的日常操作,到高级的自动化配置,为您全面解析 NetworkManager 的使用方法。

一、核心概念速览

在开始操作之前,必须理解两个最基本的概念:

概念说明类比
设备 (Device)物理或虚拟的网络接口硬件网卡本身,如 ens33、wlan0
连接 (Connection)一套网络配置参数(IP、DNS、Wi-Fi SSID等)配置方案,如“家里Wi-Fi”、“办公室有线”

核心关系:一个设备可以有多个“连接”配置,但同一时间只有一个“连接”是激活的。例如,你的无线网卡可以有“Home”和“Office”两个连接,但同一时刻只能连一个。

二、三大管理工具

NetworkManager 提供了三种管理工具,适用不同场景:

工具适用场景学习曲线
图形界面日常桌面使用⭐ 最简单
nmtui纯终端环境、SSH 连接⭐⭐ 中等
nmcli服务器、脚本、自动化⭐⭐⭐ 功能最强

三、图形界面使用详解

GNOME 桌面环境的网络管理完全基于 NetworkManager,所有操作都在调用其 D-Bus API。

3.1 右上角网络菜单

点击右上角的网络图标,你会看到:

  • 有线网络:显示“有线连接”状态,点击可开启/关闭
  • Wi-Fi 网络:显示可用网络列表,点击即可连接
  • VPN 连接:已配置的 VPN 列表
  • 网络设置:进入详细的设置面板

3.2 “设置”应用中的网络配置

打开“设置”(Settings)→“网络”(Network),你可以进行更详细的配置:

有线网络配置:

  • 开启/关闭有线网络
  • 进入“齿轮”图标 → 设置静态 IP、DNS、路由
  • 设置代理

Wi-Fi 配置:

  • 查看已连接网络
  • “齿轮”图标 → 查看 IP、MAC 地址
  • 设置是否自动连接
  • 修改 Wi-Fi 密码(保存的密码可以在“可见密码”处查看)
  • 设置静态 IP

所有图形界面的配置最终都保存在:

/etc/NetworkManager/system-connections/*.nmconnection

四、nmtui 文本菜单工具

nmtui 是一个基于文本的图形化界面,适合纯终端环境或 SSH 远程管理。

启动 nmtui

nmtui

你会看到一个简单的菜单:

  1. Edit a connection:编辑现有连接或添加新连接
  2. Activate a connection:激活/停用连接
  3. Set system hostname:设置主机名

操作方式

  • 方向键:上下移动光标
  • Tab 键:切换焦点区域
  • Enter 键:确认选择
  • Esc 键:返回上一级

示例:添加一个静态 IP 的有线连接

  1. 选择 “Edit a connection” → “Add” → “Ethernet”
  2. 设置 Profile name(连接名称)
  3. 在 IPv4 CONFIGURATION 中选择 “Manual”
  4. 填入 Address(如 192.168.1.100/24)、Gateway(192.168.1.1)、DNS(8.8.8.8)
  5. 选择 “OK” 保存

优点:无需记忆命令,菜单式操作,适合偶尔需要快速配置的场景。

五、nmcli 命令行完全指南

nmcli 是最强大的管理工具,几乎可以做任何事情。它是服务器管理和自动化脚本的首选。

5.1 查看状态

查看 NetworkManager 整体状态:

nmcli general status

输出示例:

STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN
connected  full          enabled  enabled  enabled  enabled

查看所有网络设备:

nmcli device status

输出示例:

DEVICE  TYPE      STATE         CONNECTION
ens33   ethernet  connected     Wired connection 1
wlan0   wifi      disconnected  --
lo      loopback  unmanaged     --

查看所有连接配置:

nmcli connection show

只查看当前活跃的连接:

nmcli connection show --active

查看某个连接的详细信息:

nmcli connection show "Wired connection 1"

这会显示该连接的所有配置参数,包括 IP、DNS、MAC 地址等。

扫描附近的 Wi-Fi:

nmcli device wifi list

5.2 管理设备

启用/禁用 Wi-Fi 或 WWAN:

nmcli radio wifi on
nmcli radio wifi off
nmcli radio wwan on

连接/断开设备:

nmcli device connect ens33        # 连接有线网卡
nmcli device disconnect wlan0     # 断开无线网卡

5.3 管理连接

激活连接:

nmcli connection up "Wired connection 1"

停用连接:

nmcli connection down "Wired connection 1"

删除连接:

nmcli connection delete "旧连接名"

重新加载配置文件:

nmcli connection reload

5.4 创建和修改连接

创建一个新的有线连接(使用 DHCP):

nmcli connection add type ethernet con-name "办公室有线" ifname ens33

创建一个新的有线连接(静态 IP):

nmcli connection add type ethernet con-name "服务器静态IP" ifname ens33 \
  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"

连接 Wi-Fi(命令行最常用):

# 连接到开放网络
nmcli device wifi connect "网络名称"

# 连接到加密网络(WPA/WPA2)
nmcli device wifi connect "网络名称" password "密码"

# 连接隐藏的 Wi-Fi
nmcli device wifi connect "网络名称" password "密码" hidden yes

修改现有连接:

# 将 DHCP 改为静态 IP
nmcli connection modify "Wired connection 1" \
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns "8.8.8.8"

# 改为 DHCP
nmcli connection modify "Wired connection 1" ipv4.method auto

# 设置自动连接(开机自启)
nmcli connection modify "Wired connection 1" autoconnect yes

# 设置 MTU
nmcli connection modify "Wired connection 1" 802-3-ethernet.mtu 1500

# 设置 VLAN
nmcli connection add type vlan con-name "VLAN10" ifname "ens33.10" \
  dev ens33 id 10 ipv4.method manual ipv4.addresses 192.168.10.1/24

查看修改历史(调试用):

nmcli connection show "连接名" | grep -E "^ipv4|^802-3-ethernet"

5.5 高级操作

创建网桥(用于虚拟机):

# 创建网桥
nmcli connection add type bridge con-name "br0" ifname br0
# 添加物理网卡到网桥
nmcli connection add type ethernet con-name "br0-slave" ifname ens33 master br0
# 启用网桥
nmcli connection up br0

创建链路聚合 (Bonding):

# 创建 bond
nmcli connection add type bond con-name "bond0" ifname bond0 \
  bond.options "mode=802.3ad"
# 添加两个网卡到 bond
nmcli connection add type ethernet con-name "bond0-slave1" ifname ens33 master bond0
nmcli connection add type ethernet con-name "bond0-slave2" ifname ens34 master bond0
# 设置 IP
nmcli connection modify bond0 ipv4.method manual ipv4.addresses 10.0.0.1/24
nmcli connection up bond0

配置 VPN:

# 导入 OpenVPN 配置
nmcli connection import type openvpn file /path/to/config.ovpn

# 手动创建 WireGuard 连接
nmcli connection add type wireguard con-name "wg0" ifname wg0 \
  wireguard.private-key /path/to/private.key
# 添加 peer
nmcli connection modify wg0 wireguard.peers "公钥=允许IP"

5.6 脚本友好的输出

对于自动化脚本,nmcli 提供了 -t (terse, 简洁) 和 -f (fields, 字段) 选项:

# 获取所有活跃连接的 UUID
nmcli -t -f UUID,NAME connection show --active

# 获取 Wi-Fi 信号强度
nmcli -t -f IN-USE,SIGNAL device wifi list

六、配置文件详解

6.1 主配置文件:/etc/NetworkManager/NetworkManager.conf

这是 NetworkManager 的全局配置文件,控制其核心行为。

[main]
plugins=keyfile,ifcfg-rh
dns=default

[ifupdown]
managed=false

[connectivity]
uri=http://connectivity-check.ubuntu.com/

[keyfile]
unmanaged-devices=interface-name:eth1

各段落说明:

段落选项说明
[main]plugins设置插件,keyfile 是主要配置文件格式
[main]dnsDNS 管理方式:default、dnsmasq、unbound
[ifupdown]managed是否让 NM 管理 /etc/network/interfaces 中的接口
[connectivity]uri连接性检查的 URL,用于检测是否真正联网
[keyfile]unmanaged-devicesNM 忽略的设备列表

⚠️ 最佳实践:不要直接修改此文件,而是在 /etc/NetworkManager/conf.d/ 目录下创建 *.conf 文件来覆盖设置。

6.2 连接配置文件:/etc/NetworkManager/system-connections/*.nmconnection

这是每个网络连接的详细配置。文件格式类似 Windows INI 文件:

[connection]
id=Wired connection 1
uuid=27afa607-ee36-43f0-b8c3-9d245cdc4bb3
type=802-3-ethernet
autoconnect=true
autoconnect-priority=100
interface-name=ens33
timestamp=1721567890

[802-3-ethernet]
mac-address=00:23:5a:47:1f:71

[ipv4]
method=auto
dns-search=localdomain

[ipv6]
method=auto

[proxy]

重要字段解析:

字段含义
id连接名称(显示名)
uuid唯一标识符
type连接类型:802-3-ethernet、802-11-wireless、vpn 等
autoconnect是否开机自动连接
autoconnect-priority自动连接的优先级(数字越大优先级越高)
interface-name绑定的设备名
methodauto=DHCP,manual=静态

⚠️ 注意:uuid 必须唯一,且文件权限必须为 600(仅 root 可读写)。

七、事件响应脚本 (Dispatcher)

NetworkManager 允许在网络事件发生时自动执行脚本,这是实现自动化的强大功能。

7.1 基本原理

  • 脚本位置:/etc/NetworkManager/dispatcher.d/
  • 执行顺序:按文件名字母顺序
  • 接收参数:接口名 + 事件类型(如 up、down)
  • 要求:脚本必须由 root 所有,权限不超过 0755

7.2 事件类型

事件触发时机说明
pre-up设备激活前用于准备操作,执行后会阻塞网络启动
up设备激活后用于启动依赖于网络的服务
pre-down设备停用前用于清理操作,可阻塞网络停用
down设备停用后用于清理依赖于网络的服务
vpn-upVPN 连接建立VPN 隧道建立后触发
vpn-downVPN 连接断开VPN 隧道断开后触发
dhcp4-changeDHCPv4 租约更新IP 地址变化时触发
connectivity-change连通性状态改变从 none → full 或反之

7.3 环境变量

脚本执行时可访问大量环境变量:

变量名含义
CONNECTION_UUID连接 UUID
CONNECTION_ID连接名称
DEVICE_IFACE设备接口名
IP4_ADDRESS_0IPv4 地址
IP4_GATEWAYIPv4 网关
DHCP4_HOST_NAMEDHCP 获取的主机名
IP4_NAMESERVERSIPv4 DNS 服务器列表

7.4 示例脚本

/etc/NetworkManager/dispatcher.d/10-update-iptables:在 VPN 连接时自动更新防火墙规则

#!/bin/bash
# 10-update-iptables

if [ "$2" = "vpn-up" ]; then
    iptables -I OUTPUT -o tun0 -j ACCEPT
    iptables -I INPUT -i tun0 -j ACCEPT
    logger "VPN connected, firewall rules updated"
fi

if [ "$2" = "vpn-down" ]; then
    iptables -D OUTPUT -o tun0 -j ACCEPT
    iptables -D INPUT -i tun0 -j ACCEPT
    logger "VPN disconnected, firewall rules removed"
fi

脚本调试:可在脚本中添加 logger 命令查看执行情况:

logger "NetworkManager event: $2 on interface $1"

7.5 特殊目录

  • pre-up.d/ 和 pre-down.d/:软链接到 dispatcher.d/ 中的脚本,但会阻塞操作,必须执行完毕才能继续
  • no-wait.d/:脚本不会阻塞,可以并行执行,适合耗时操作

八、故障排除

8.1 查看日志

# 实时查看 NetworkManager 日志
sudo journalctl -u NetworkManager -f

# 查看最近 100 条日志
sudo journalctl -u NetworkManager -n 100

# 查看特定时间段的日志
sudo journalctl -u NetworkManager --since "1 hour ago"

8.2 常见问题与解决

问题1:Wi-Fi 列表为空

# 检查 Wi-Fi 是否被硬件开关关闭
nmcli radio wifi
# 开启 Wi-Fi
nmcli radio wifi on
# 如果硬件开关被关闭,可能需要物理开关或 `rfkill` 命令
rfkill list
rfkill unblock wifi

问题2:无法获取 IP 地址

# 查看 DHCP 客户端日志
sudo journalctl -u NetworkManager -f | grep dhcp
# 手动释放并重新获取
sudo dhclient -v ens33

问题3:配置不生效

# 重新加载配置
nmcli connection reload
# 重启 NetworkManager
sudo systemctl restart NetworkManager

问题4:网桥或 VLAN 配置失败
检查 NetworkManager 版本是否支持:NetworkManager --version。某些高级功能需要较新版本。

8.3 重置 NetworkManager

如果配置完全混乱,可以重置:

# 重置所有连接配置
sudo rm -rf /etc/NetworkManager/system-connections/*
# 重启 NetworkManager
sudo systemctl restart NetworkManager
# 重新创建连接

九、常用命令速查表

操作命令
查看状态nmcli general status
查看设备nmcli device status
查看连接nmcli connection show
查看活跃连接nmcli connection show --active
查看连接详情nmcli connection show "连接名"
扫描 Wi-Finmcli device wifi list
连接 Wi-Finmcli device wifi connect "SSID" password "密码"
启用/禁用 Wi-Finmcli radio wifi on/off
激活连接nmcli connection up "连接名"
停用连接nmcli connection down "连接名"
删除连接nmcli connection delete "连接名"
创建 DHCP 连接nmcli connection add type ethernet con-name "名称" ifname ens33
创建静态连接nmcli connection add type ethernet con-name "名称" ifname ens33 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8"
修改为静态 IPnmcli connection modify "连接名" ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8"
修改为 DHCPnmcli connection modify "连接名" ipv4.method auto
设置自动连接nmcli connection modify "连接名" autoconnect yes
创建网桥nmcli connection add type bridge con-name "br0" ifname br0
重新加载配置nmcli connection reload
查看实时日志sudo journalctl -u NetworkManager -f
重启服务sudo systemctl restart NetworkManager

总结

NetworkManager 提供了一套完整的网络管理方案:

  • 图形界面:适合日常桌面使用,直观易用
  • nmtui:适合纯终端环境,菜单式操作
  • nmcli:功能最强大,适合服务器和自动化脚本
  • 配置文件:所有操作最终都保存在 /etc/NetworkManager/system-connections/
  • 事件脚本:可实现网络状态变化时的自动化响应

无论你是普通桌面用户、系统管理员,还是需要自动化运维的工程师,NetworkManager 都能提供从简单到复杂的完整工具链。掌握它,你就掌握了 Linux 网络管理的核心。

作者

老丹

关注我
其他文章
上一个

告别混乱,拥抱秩序:Netplan 的全面解析

下一个

开源视频监控系统完整指南:从入门到选型

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

近期文章

  • Linux系统的安全基石:深入理解可插拔认证模块(PAM) 2026年7月27日
  • vsftpd 完全指南:从核心原理到Docker容器化部署 2026年7月27日
  • 互联网的”导航”安全卫士:深入解读DNSSEC 2026年7月27日
  • Ubuntu DNS 配置完全指南 2026年7月27日
  • 在 Ubuntu 中使用 Certbot 的操作指南 2026年7月27日

文章分类

  • C/C++开发 (13)
  • Docker容器 (3)
  • Linux工具包 (10)
  • Linux服务配置 (33)
  • Linux系统 (10)
  • OpenWrt路由 (2)
  • Shell脚本 (3)
  • 安防技术 (4)
  • 数据安全 (30)
  • 网络协议 (17)
  • 计算机理论 (22)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号