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 通过插件管理连接配置的存储格式和行为。
常用插件
| 插件名 | 配置存储格式 | 说明 |
|---|---|---|
| keyfile | INI 格式,路径 /etc/NetworkManager/system-connections/ | NM 原生格式,推荐使用 |
| ifcfg-rh | /etc/sysconfig/network-scripts/ifcfg-* | RHEL/CentOS 传统格式 |
| ifupdown | 读取 /etc/network/interfaces | Debian 传统格式,只读 |
| 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 本章小结
| 要点 | 操作 |
|---|---|
| 安装 NM | apt 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 |