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

NetworkManager 运维教程 / 第 2 章:安装与初始配置

第 2 章:安装与初始配置

2.1 各发行版安装

Debian / Ubuntu

# Debian / Ubuntu 桌面版通常已预装
# 服务器版需要手动安装
sudo apt update
sudo apt install network-manager network-manager-gnome

# 如果需要 CLI 工具(通常已随 NM 安装)
sudo apt install network-manager

# 如果需要 nmtui 文本界面
sudo apt install network-manager

# 如果需要 VPN 支持
sudo apt install network-manager-openvpn network-manager-wireguard
sudo apt install network-manager-openvpn-gnome   # GNOME 桌面 VPN GUI
sudo apt install network-manager-l2tp network-manager-l2tp-gnome

RHEL / CentOS / Fedora

# Fedora 通常已预装
# RHEL / CentOS 需要手动安装
sudo dnf install NetworkManager
sudo dnf install NetworkManager-tui                # nmtui
sudo dnf install NetworkManager-openvpn            # OpenVPN 插件
sudo dnf install NetworkManager-wireguard          # WireGuard 插件
sudo dnf install NetworkManager-l2tp               # L2TP 插件
sudo dnf install NetworkManager-libreswan           # IPSec/Libreswan

# CentOS 7 / RHEL 7 使用 yum
sudo yum install NetworkManager

Arch Linux

# NM 在 Arch 的 extra 仓库中
sudo pacman -S networkmanager

# 可选组件
sudo pacman -S networkmanager-openvpn    # OpenVPN
sudo pacman -S networkmanager-wireguard   # WireGuard (AUR)

# 如果使用 GNOME 桌面
sudo pacman -S networkmanager
# GNOME 控制中心已内建网络管理面板

openSUSE

# openSUSE Tumbleweed / Leap
sudo zypper install NetworkManager

# 可选插件
sudo zypper install NetworkManager-openvpn
sudo zypper install NetworkManager-wireguard
sudo zypper install NetworkManager-l2tp

安装后验证

# 检查 NM 是否安装成功
which nmcli
# /usr/bin/nmcli

NetworkManager --version
# 1.44.2 (示例)

# 检查服务状态
systemctl status NetworkManager

2.2 初始配置

启用 NetworkManager 服务

# 启动服务
sudo systemctl start NetworkManager

# 设置开机自启
sudo systemctl enable NetworkManager

# 验证
systemctl is-active NetworkManager   # active
systemctl is-enabled NetworkManager  # enabled

禁用冲突的网络管理服务

如果系统中同时存在其他网络管理服务,需要禁用冲突项:

# 禁用 systemd-networkd(如果之前在用)
sudo systemctl stop systemd-networkd
sudo systemctl disable systemd-networkd
sudo systemctl stop systemd-networkd.socket
sudo systemctl disable systemd-networkd.socket

# 禁用 systemd-resolved(如果 NM 接管 DNS)
# 注意:如果需要 systemd-resolved 管理 DNS,可以保留
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

# 禁用 ifupdown(Debian 系)
# 如果从 ifupdown 迁移,先确保 NM 已接管网络
sudo systemctl stop networking
sudo systemctl disable networking

# 查看所有网络相关服务的状态
systemctl list-units --type=service | grep -iE 'network|resolved'

主配置文件结构

NM 的主配置文件位于 /etc/NetworkManager/NetworkManager.conf,采用 INI 格式:

# 查看当前配置
cat /etc/NetworkManager/NetworkManager.conf

典型配置示例:

# /etc/NetworkManager/NetworkManager.conf

[main]
# DNS 后端:default, systemd-resolved, dnsmasq, none
dns=default

# 插件列表(按优先级)
plugins=ifupdown,keyfile

# 是否管理 /etc/resolv.conf
# default = 根据 DNS 后端自动决定
# true = NM 管理
# false = NM 不管理
# rc-manager = 使用 resolvconf 工具

[ifupdown]
# 是否管理 /etc/network/interfaces 中定义的连接
managed=false

[device]
# 为所有设备设置默认值
# wifi.scan-rand-mac-address=yes   # 随机 MAC 扫描

[logging]
# 日志级别:OFF, ERR, WARN, INFO, DEBUG, TRACE
level=INFO
domains=DEFAULT

推荐的配置片段方式

NM 支持在 /etc/NetworkManager/conf.d/ 目录下放置配置片段,便于管理和版本控制:

# 创建自定义配置
sudo mkdir -p /etc/NetworkManager/conf.d

# 示例:设置 DNS 后端为 systemd-resolved
sudo tee /etc/NetworkManager/conf.d/dns.conf << 'EOF'
[main]
dns=systemd-resolved
EOF

# 示例:禁用随机 MAC 地址(服务器场景)
sudo tee /etc/NetworkManager/conf.d/no-random-mac.conf << 'EOF'
[device]
wifi.scan-rand-mac-address=no
wifi.cloned-mac-address=preserve
ethernet.cloned-mac-address=preserve
EOF

# 示例:启用详细日志(调试时使用)
sudo tee /etc/NetworkManager/conf.d/debug-logging.conf << 'EOF'
[logging]
level=DEBUG
domains=ALL
EOF

# 修改配置后需重载
sudo systemctl reload NetworkManager
# 或
sudo nmcli general reload conf

注意:配置片段按文件名字母顺序加载,后面的文件可覆盖前面的设置。

2.3 服务管理

systemd 管理

# 基本服务操作
sudo systemctl start NetworkManager      # 启动
sudo systemctl stop NetworkManager       # 停止
sudo systemctl restart NetworkManager    # 重启
sudo systemctl reload NetworkManager     # 重载配置(不断开连接)
sudo systemctl status NetworkManager     # 查看状态

# 查看服务是否正在运行
systemctl is-active NetworkManager

# 查看服务是否开机启动
systemctl is-enabled NetworkManager

# 查看服务启动耗时
systemd-analyze blame | grep NetworkManager

nmcli 管理 NM 自身

# 查看 NM 总体状态
nmcli general status
# 输出示例:
# STATE      CONNECTIVITY  WIFI-HW  WIFI    WWAN-HW  WWAN
# connected  full          enabled  enabled enabled  enabled

# 查看 NM 版本
nmcli --version

# 重载 NM 配置(不重启服务)
nmcli general reload conf

# 重载特定类型的配置
nmcli connection reload    # 重载连接配置
nmcli general reload dns   # 重载 DNS 配置

# 网络连接状态
nmcli networking
# enabled

# 禁用/启用所有网络
sudo nmcli networking off   # 关闭所有网络
sudo nmcli networking on    # 恢复所有网络

# WiFi 开关
nmcli radio wifi            # 查看状态
sudo nmcli radio wifi on    # 开启
sudo nmcli radio wifi off   # 关闭

# WWAN(移动网络)开关
nmcli radio wwan on
nmcli radio wwan off

2.4 日志系统

journalctl 查看 NM 日志

# 查看 NM 服务日志
journalctl -u NetworkManager

# 查看最近 50 行
journalctl -u NetworkManager -n 50

# 实时跟踪日志
journalctl -u NetworkManager -f

# 查看今天的日志
journalctl -u NetworkManager --since today

# 查看指定时间段的日志
journalctl -u NetworkManager --since "2026-05-10 10:00" --until "2026-05-10 12:00"

# 按优先级过滤
journalctl -u NetworkManager -p err     # 只看错误
journalctl -u NetworkManager -p warning  # 及以上级别

# 查看最近一次启动的日志
journalctl -u NetworkManager -b

# 输出为 JSON 格式(便于脚本处理)
journalctl -u NetworkManager -o json-pretty | head -50

NM 日志级别配置

# 查看当前日志级别
nmcli general logging

# 设置日志级别(临时,重启后恢复)
sudo nmcli general logging level DEBUG domains ALL

# 生产环境推荐
sudo nmcli general logging level INFO domains DEFAULT

# 可用日志域:
# DEFAULT, ETHERNET, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN,
# IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS,
# SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX, INFINIBAND,
# FIREWALL, ADSL, BOND, VLAN, BRIDGE, TEAM, CONCHECK, DCB, DISPATCH

# 只调试 WiFi 和 DHCP
sudo nmcli general logging level DEBUG domains WIFI,DHCP4,DHCP6

# 写入配置文件持久化
sudo tee /etc/NetworkManager/conf.d/debug-wifi.conf << 'EOF'
[logging]
level=DEBUG
domains=WIFI,DHCP4,DHCP6
EOF
sudo systemctl reload NetworkManager

常见日志模式

# 查找连接失败的原因
journalctl -u NetworkManager | grep -i "error\|fail\|disconnect"

# 查看 DHCP 相关日志
journalctl -u NetworkManager | grep -i "dhcp"

# 查看 WiFi 认证失败
journalctl -u NetworkManager | grep -i "auth\|wpa\|supplicant"

# 查看设备状态变化
journalctl -u NetworkManager | grep -i "device.*state"

2.5 插件系统

NM 通过插件管理连接配置的存储格式和行为。

常用插件

插件名配置存储格式说明
keyfileINI 格式,路径 /etc/NetworkManager/system-connections/NM 原生格式,推荐使用
ifcfg-rh/etc/sysconfig/network-scripts/ifcfg-*RHEL/CentOS 传统格式
ifupdown读取 /etc/network/interfacesDebian 传统格式,只读
cloud-setup自动检测云环境云实例网络自动配置

查看和管理插件

# 查看当前加载的插件
NetworkManager --print-config
# 输出示例:
# [main]
# plugins=ifupdown,keyfile

# 查看 NM 编译时支持的插件
ls /usr/lib/x86_64-linux-gnu/NetworkManager/  # Debian/Ubuntu
ls /usr/lib64/NetworkManager/                  # RHEL/Fedora 64-bit
ls /usr/lib/NetworkManager/                    # 32-bit

# 典型输出:
# libnm-settings-plugin-ifcfg-rh.so
# libnm-settings-plugin-keyfile.so
# libnm-settings-plugin-ifupdown.so

keyfile 插件详解

keyfile 是 NM 推荐的默认存储格式,每个连接一个文件:

# 查看已有的连接文件
sudo ls -la /etc/NetworkManager/system-connections/

# 查看某个连接文件内容
sudo cat /etc/NetworkManager/system-connections/"Wired connection 1.nmconnection"

典型 keyfile 格式示例:

[connection]
id=Wired connection 1
uuid=a1b2c3d4-e5f6-7890-abcd-ef1234567890
type=ethernet
interface-name=eth0
autoconnect=true

[ethernet]
mac-address=AA:BB:CC:DD:EE:FF

[ipv4]
method=auto
dns=8.8.8.8;8.8.4.4;

[ipv6]
method=auto
addr-gen-mode=stable-privacy

[proxy]

ifcfg-rh 插件

RHEL/CentOS 传统格式,NM 同样支持读写:

# ifcfg 格式的连接文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0

# 典型内容:
# TYPE=Ethernet
# DEVICE=eth0
# BOOTPROTO=dhcp
# ONBOOT=yes
# UUID=a1b2c3d4-...

# NM 可以读写此格式,但推荐迁移到 keyfile

cloud-setup 插件

云实例网络自动配置插件,支持 AWS、Azure、GCP、阿里云等:

# 检查 cloud-setup 是否运行
systemctl status nm-cloud-setup

# 启用(适用于云实例)
sudo systemctl enable --now nm-cloud-setup

# 手动触发
sudo nm-cloud-setup

# 查看日志
journalctl -u nm-cloud-setup

配置插件优先级

# 在 /etc/NetworkManager/conf.d/ 中配置
sudo tee /etc/NetworkManager/conf.d/plugins.conf << 'EOF'
[main]
plugins=keyfile
EOF

# 如果同时需要 ifcfg-rh 兼容
sudo tee /etc/NetworkManager/conf.d/plugins.conf << 'EOF'
[main]
plugins=keyfile,ifcfg-rh
EOF

# 重载配置
sudo nmcli general reload conf

2.6 其他配置选项

设备管理策略

# NM 默认管理所有设备
# 以下配置可控制 NM 管理哪些设备

# 方法 1:通过 udev 规则
# 创建 /etc/udev/rules.d/99-nm-unmanaged.rules
echo 'ENV{ID_NET_DRIVER}=="veth", ENV{NM_UNMANAGED}="1"' | \
    sudo tee /etc/udev/rules.d/99-nm-unmanaged.rules

# 方法 2:通过 NM 配置
sudo tee /etc/NetworkManager/conf.d/unmanaged.conf << 'EOF'
[keyfile]
unmanaged-devices=mac:AA:BB:CC:DD:EE:FF;interface-name:veth*
EOF

# 方法 3:设置连接为不可自动连接
nmcli connection modify "连接名" autoconnect no

并发连接(多连接同时激活)

# 查看同时可激活的连接数
# 默认同类型只能一个,不同类型可多个

# 允许同类型的多个连接同时激活
sudo tee /etc/NetworkManager/conf.d/multi-connect.conf << 'EOF'
[connection]
# 对于以太网,允许多个连接同时激活
connection.multi-connect=3
EOF

# 值说明:
# 0 = 默认行为
# 1 = 单连接(默认)
# 2 = 多连接,等待用户手动激活
# 3 = 多连接,自动激活匹配的连接

2.7 本章小结

要点操作
安装 NMapt install network-manager / dnf install NetworkManager
启用服务systemctl enable --now NetworkManager
禁用冲突停止 systemd-networkd / networking 服务
配置文件/etc/NetworkManager/NetworkManager.conf,推荐使用 conf.d/ 片段
查看日志journalctl -u NetworkManager -f
调试日志nmcli general logging level DEBUG domains ALL
推荐插件keyfile(默认),RHEL 环境可保留 ifcfg-rh

扩展阅读