跳转到内容
搜索 AlmaLinux 文档

    浏览当前文档目录

    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。

    Terminal window
    nmcli --version
    nmcli general status
    nmcli tool, version 1.54.3-5.el9_8
    Error: Could not create NMClient object: Could not connect: No such file or directory.

    nmcli 的常规子命令要通过 D-Bus 连 NetworkManager 守护进程;在容器、救援环境、或还没起 NM 的机器上就连不上。

    但 nmcli --offline 不需要守护进程:它只在内存里构造连接配置并打印 keyfile,正好用来「先在别处生成好配置,再搬到目标机器」。

    Terminal window
    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-enp1s0
    uuid=bd58671c-def9-4f00-b5fe-4cc6c41d09fc
    type=ethernet
    interface-name=enp1s0
    [ethernet]
    [ipv4]
    address1=192.0.2.10/24
    dns=192.0.2.53;
    gateway=192.0.2.1
    method=manual
    [ipv6]
    addr-gen-mode=default
    method=auto

    对照着看几个字段:

    字段含义
    ipv4.method=manual静态地址(auto 是 DHCP)
    ipv4.address1地址/前缀;多个地址会写成 address2=…
    ipv4.gateway默认路由
    ipv4.dnsDNS 服务器,多个用分号分隔

    把这段内容保存成文件即可:

    Terminal window
    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.nmconnection
    sudo chmod 600 /etc/NetworkManager/system-connections/static-enp1s0.nmconnection

    权限必须是 600:NetworkManager 会忽略权限过宽的 keyfile。

    Terminal window
    sudo nmcli connection reload
    sudo nmcli connection up static-enp1s0
    nmcli -p connection show static-enp1s0

    reload 让 NM 重新读目录里的 keyfile,up 才真正把配置应用到网卡。改网络有断连风险,远程操作前先准备好控制台。

    Terminal window
    ip -4 addr show enp1s0
    ip route show default
    cat /etc/resolv.conf
    ping -c 2 192.0.2.1

    地址在、默认路由指向网关、resolv.conf 有 nameserver、网关能通,四步都过才算完成。

    • keyfile 权限不是 600:NM 直接忽略该文件,看起来像「配置没生效」;
    • 只 reload 不 up:配置已加载但没应用到设备;
    • 手写 ifcfg 文件:EL9 默认 keyfile 后端,/etc/sysconfig/network-scripts/ifcfg-* 可能完全不起作用。

    练习:为另一台机器预生成配置

    Section titled “练习:为另一台机器预生成配置”
    Terminal window
    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.nmconnection
    sudo chmod 600 /etc/NetworkManager/system-connections/app01-static.nmconnection
    sudo nmcli connection reload
    sudo nmcli connection up app01-static

    检查:

    1. nmcli -f ipv4.method,ipv4.addresses connection show app01-static → manual 与目标地址
    2. ip -4 addr show enp1s0 → 地址生效
    3. ip route show default → 网关正确
    4. 重启后 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 回读确认解析结果。