当 dracut.cmdline 提供的静态 IP 不同时,NetworkManager 不会更改 IP 地址

当 dracut.cmdline 提供的静态 IP 不同时,NetworkManager 不会更改 IP 地址

Centos 7.6 全新安装。

我在启动期间需要一个静态 IP,以便使用 Clevis / TANG 并遵循 dracut.conf 来解密我的 LUKS-Container

kernel_cmdline="ip=10.30.0.25 netmask=255.255.255.0 gateway=10.30.0.1 nameserver=10.30.0.1"
omit_dracutmodules+="ifcfg"

通过此配置,容器将打开,系统将启动,并且 ifcfg 文件将不受影响。

我使用 nmtui 配置了具有不同 IP 地址 (10.30.0.26) 的 NetworkManager 连接。

当我启动系统时,NetworkManager 不会加载配置的连接,因为 IP 地址不同。为此,创建与“dracut-IP”的临时内存连接。

调试日志文件 nm

Mär 14 18:55:07 mgmt1 NetworkManager[4686]: <debug> [1552586107.8933] Connection 'enp0s25' differs from candidate 'AAAA' in ipv4.addresses

Mär 14 18:55:07 mgmt1 NetworkManager[4686]: <debug> [1552586107.8933] manager: (enp0s25): assume: generated connection 'enp0s25' (21f53190-22d9-4bc0-9526-9dc5afab2cf4)

是否可以“强制”NetworkManager 使用我创建的提供的连接,而不是创建基于 dracut-IP 的临时连接?

答案1

我通过使用一个单独的 systemd-Service 解决了这个问题,该服务在网络之前启动并刷新 IP。

# /etc/systemd/system/networkflushforclevis.service
[Unit]
Description=Network Flush Service for Clevis / Dracut problem
Before=network-pre.target
Wants=network-pre.target

[Service]
ExecStart=/usr/bin/networkflush.sh

[Install]
WantedBy=default.target

/usr/bin/networkflush.sh:

#!/bin/bash
ip addr flush dev enp0s25

答案2

对于 Clevis+Tang,我发现它很有用:

  1. 允许 dracut 配置网络以解锁根 LUKS 卷
  2. 告诉 dracut 跳过创建 ifcfg-* 文件并且
  3. 删除 dracut 安装的 IP 地址,这允许 NetworkManager 配置接口。
[root@clevis ~]# cat /etc/dracut.conf.d/clevis-nbde.conf
# DHCP for a specific interface
kernel_cmdline="ip=eth0:dhcp"

# Static IP for a specific interface
# man dracut.cmdline
#   ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<dns1>][:<dns2>]]
#kernel_cmdline="ip=192.168.0.221::192.168.0.1:255.255.255.0::eth0:none:192.168.0.99"

# Don't create /etc/sysconfig/network-scripts/ifcfg-* files during boot
omit_dracutmodules+="ifcfg"
[root@clevis ~]# cat /etc/systemd/system/flush-dracut-network\@.service 
# Remove Dracut's network configuration
# https://access.redhat.com/solutions/3017441
# https://unix.stackexchange.com/questions/506331/networkmanager-doesnt-change-ip-address-when-dracut-cmdline-provided-static-ip

[Unit]
Description=Remove dracut's network configuration for %I
Before=network-pre.target
Wants=network-pre.target

[Service]
ExecStartPre=/usr/sbin/ip address show %i
ExecStart=/usr/sbin/ip -statistics address flush dev %i

[Install]
WantedBy=default.target
[root@clevis ~]# systemctl daemon-reload

[root@clevis ~]# systemctl enable flush-dracut-network@eth0
Created symlink from /etc/systemd/system/default.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].

答案3

以下服务也有效:

[Unit]
Description=Remove dracut's NetworkManager connection for %I
After=NetworkManager.service
Wants=NetworkManager.service

[Service]
ExecStart=/usr/bin/bash -c "test $(nmcli c show |grep '%I'|wc -l) -gt 1 && nmcli c delete $(nmcli c show |grep '%I'|head -n 1|awk '{print $2; }')"

[安装] WantedBy=多用户.target

相关内容