AlmaLinux 9:用 nmcli 离线预生成静态 IP 配置
在 almalinux:9 容器(AlmaLinux 9.8,NetworkManager 1.54.3-5.el9_8)中实际执行:nmcli --version、nmcli general status、nmcli --offline connection add …(静态与 DHCP 各一次)。日志:plans/content-expansion/evidence/logs/alma-network-basics.log。
nmcli connection up、nmcli device reapply、重启后是否自动激活未在本环境验证(容器没有 NM 守护进程),文中标注为 E3。
为什么需要「离线生成」
Section titled “为什么需要「离线生成」”nmcli --versionnmcli general statusnmcli tool, version 1.54.3-5.el9_8Error: Could not create NMClient object: Could not connect: No such file or directory.nmcli 的常规子命令要通过 D-Bus 连 NetworkManager 守护进程;在容器、救援环境、或还没起 NM 的机器上就连不上。
但 nmcli --offline 不需要守护进程:它只在内存里构造连接配置并打印 keyfile,正好用来「先在别处生成好配置,再搬到目标机器」。
生成静态 IP 的 keyfile
Section titled “生成静态 IP 的 keyfile”nmcli --offline connection add type ethernet ifname enp1s0 con-name static-enp1s0 \ ipv4.method manual ipv4.addresses 192.0.2.10/24 \ ipv4.gateway 192.0.2.1 ipv4.dns 192.0.2.53[connection]id=static-enp1s0uuid=bd58671c-def9-4f00-b5fe-4cc6c41d09fctype=ethernetinterface-name=enp1s0
[ethernet]
[ipv4]address1=192.0.2.10/24dns=192.0.2.53;gateway=192.0.2.1method=manual
[ipv6]addr-gen-mode=defaultmethod=auto对照着看几个字段:
| 字段 | 含义 |
|---|---|
ipv4.method=manual | 静态地址(auto 是 DHCP) |
ipv4.address1 | 地址/前缀;多个地址会写成 address2=… |
ipv4.gateway | 默认路由 |
ipv4.dns | DNS 服务器,多个用分号分隔 |
把这段内容保存成文件即可:
nmcli --offline connection add type ethernet ifname enp1s0 con-name static-enp1s0 \ ipv4.method manual ipv4.addresses 192.0.2.10/24 ipv4.gateway 192.0.2.1 ipv4.dns 192.0.2.53 \ | sudo tee /etc/NetworkManager/system-connections/static-enp1s0.nmconnectionsudo chmod 600 /etc/NetworkManager/system-connections/static-enp1s0.nmconnection权限必须是 600:NetworkManager 会忽略权限过宽的 keyfile。
启用(需真实系统)
Section titled “启用(需真实系统)”sudo nmcli connection reloadsudo nmcli connection up static-enp1s0nmcli -p connection show static-enp1s0reload 让 NM 重新读目录里的 keyfile,up 才真正把配置应用到网卡。改网络有断连风险,远程操作前先准备好控制台。
ip -4 addr show enp1s0ip route show defaultcat /etc/resolv.confping -c 2 192.0.2.1地址在、默认路由指向网关、resolv.conf 有 nameserver、网关能通,四步都过才算完成。
- keyfile 权限不是 600:NM 直接忽略该文件,看起来像「配置没生效」;
- 只
reload不up:配置已加载但没应用到设备; - 手写 ifcfg 文件:EL9 默认 keyfile 后端,
/etc/sysconfig/network-scripts/ifcfg-*可能完全不起作用。
练习:为另一台机器预生成配置
Section titled “练习:为另一台机器预生成配置”nmcli --offline connection add type ethernet ifname enp1s0 con-name app01-static \ ipv4.method manual ipv4.addresses 10.0.0.10/24 ipv4.gateway 10.0.0.1 ipv4.dns 10.0.0.2 \ | sudo tee /etc/NetworkManager/system-connections/app01-static.nmconnectionsudo chmod 600 /etc/NetworkManager/system-connections/app01-static.nmconnectionsudo nmcli connection reloadsudo nmcli connection up app01-static检查:
nmcli -f ipv4.method,ipv4.addresses connection show app01-static→manual与目标地址ip -4 addr show enp1s0→ 地址生效ip route show default→ 网关正确- 重启后
nmcli connection show --active→ 连接仍激活
常见问题
`nmcli --offline` 生成的配置能直接用吗?
可以,它就是标准的 keyfile 内容。保存到 /etc/NetworkManager/system-connections/ 并 chmod 600,再 nmcli connection reload + up 即可;注意把 uuid 与 con-name 改成目标机器上唯一的值。
为什么 nmcli 报 Could not create NMClient object?
因为没有运行中的 NetworkManager 守护进程(容器、救援模式、或服务未启动)。常规子命令都要连 D-Bus;只想生成配置文件时用 nmcli --offline。
keyfile 里能写多个地址和 DNS 吗?
能。地址写成 address1=、address2=…;DNS 用分号分隔(dns=1.1.1.1;8.8.8.8;)。生成后建议用 nmcli --offline connection show 回读确认解析结果。
- 放行端口:firewall-cmd 放行端口
- 安装后核对:新装系统 7 项核对
- 审计包来源:包来源审计