NetworkManager는 dracut.cmdline에서 제공하는 고정 IP가 다른 경우 IP 주소를 변경하지 않습니다.

NetworkManager는 dracut.cmdline에서 제공하는 고정 IP가 다른 경우 IP 주소를 변경하지 않습니다.

Centos 7.6 새로 설치.

Clevis/TANG을 사용하고 dracut.conf를 따라 LUKS-Container를 해독하려면 부팅 중에 고정 IP가 필요합니다.

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 연결을 구성했습니다.

시스템을 시작하면 IP 주소가 다르기 때문에 NetworkManager가 구성된 연결을 로드하지 않습니다. 이렇게 하려면 "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)

임시 dracut-IP 기반 연결을 생성하는 대신 내가 생성한 제공된 연결을 NetworkManager가 사용하도록 "강제"할 수 있습니까?

답변1

네트워크 이전에 시작하고 IP를 새로 고치는 별도의 systemd-Service를 사용하여 이 문제를 해결했습니다.

# /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. ifcfg-* 파일 생성을 건너뛰도록 dracut에 지시하고
  3. NetworkManager가 인터페이스를 구성할 수 있도록 dracut 설치의 IP 주소를 제거합니다.
[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=multi-user.target

관련 정보