PXE 起動時に NetworkManager を使用して DNS IP を取得できません。

PXE 起動時に NetworkManager を使用して DNS IP を取得できません。

NetworkManagerを唯一のネットワークデーモンとして使用し、PXE経由でボードを起動するカスタムBuildrootを構築しました。問題は、/etc/resolv.conf実際のDNS IPとドメインが欠落していることです。カーネルが起動すると、DHCP要求を送信し、DHCPサーバーは必要なすべてのネットワーク設定を含む応答を送信します。

[   8.278182] Sending DHCP requests ..., OK
[   16.272817] IP-Config: Got DHCP answer from X.X.X.X, my address is X.X.X.X
[   16.280985] IP-Config: Complete:
[   16.284623]      device=eth1, hwaddr=X:X:X:X:X:X, ipaddr=X.X.X.X, mask=255.255.0.0, gw=X.X.0.1
[   16.295317]      host=X.X.X.X, domain=*my-domain*.com, nis-domain=(none)
[   16.302670]      bootserver=0.0.0.0, rootserver=X.X.X.X, rootpath=
[   16.302692]      nameserver0=X.X.1.30, nameserver1=X.X.1.100

しかし、/etc/resolv.conf行方不明です。

# cat /etc/resolv.conf
# This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).
# Do not edit.
...

nameserver 1.1.1.1
nameserver 8.8.8.8
search .

/proc/net/pnpによると、NFSルートを使用するときに必要な実際のネームサーバーとドメインがあります。文書

# cat /proc/net/pnp
#PROTO: DHCP
domain my-domain.com
nameserver X.X.1.30
nameserver X.X.1.100
bootserver 0.0.0.0

ただし、/etc/resolv.confリンクする代わりにリンクしてください/run/systemd/resolve/resolv.conf

また、ホスト名でマザーボードをpingできないため、カーネルが最初のDHCP要求を送信したときにそれを保存するFSがないため、DNSサーバーでさえマザーボードIPとホスト名を含むレコードを生成しないと結論付けることができます。ホスト名。 PXEの起動中にカーネルコマンドラインパラメータでホスト名を設定できることはわかっていますが、Linuxでは「hostname」コマンドを使用して設定したいと思います。

DHCP クライアントを使用するには、この systemd-networkd 構成を使用します。

# cat /etc/systemd/network/80-dhcp.network               
[Match]
Name=eth*

[Network]
DHCP=yes

[DHCP]
UseDomains=true
UseHostname=false
ClientIdentifier=mac
CriticalConnection=true

この構成では、systemd-networkd は内部 DHCP クライアントを起動して別の DHCP 要求を送信し、/etc/resolv.conf実際のネットワーク設定を入力します。すべてがうまく機能しているようで、単にsystemd-networkdを再起動してDHCPリースを更新できますが、systemd-networkdを削除してNetworkManagerを唯一のネットワークデーモンとして使用したいと思います。

だから私はNetworkManagerがボードのホスト名で始まり、ネットワーク設定を受信して​​入力するときに別のDHCP要求を送信すると仮定しましたが、/etc/resolv.confそうではなく、ipv4.ethインタフェースのメソッドで手動でそれを行います。

設定されたインターフェイスからDHCP要求を送信するようにNetworkManagerをトリガする方法はありますか?より一般的な質問は、NetworkManagerがPXEブートで使用するのに適していますか、それとも別のネットワークユーティリティに切り替える必要がありますか?

修正する:

解決策dhcpcd起動後、パラメータを使用して手動で起動します。

dhcpcd --nooption host_name --clientid -h $(hostname) -1

nfs-client.target と network.target の後、systemd サービスでこのコマンドを実行します。 NFSが依存するイーサネットインターフェイスのIPは変更されず、マイボードは関連するネットワーク設定を取得し、そのホスト名が解決されます。

答え1

解決策起動後、次のパラメータを使用してdhcpcdを手動で起動します。

dhcpcd --nooption host_name --clientid -h $(hostname) -1

nfs-client.target と network.target の後、systemd サービスでこのコマンドを実行します。 NFSが依存するイーサネットインターフェイスのIPは変更されず、マイボードは関連するネットワーク設定を取得し、そのホスト名が解決されます。

答え2

起動プロセスや展開などをどのように設定したのかわかりません。これが私が見たものですresolv.conf

cat /etc/resolv.conf 
# This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).
# Do not edit.
#
# This file might be symlinked as /etc/resolv.conf. If you're looking at
# /etc/resolv.conf and seeing this text, you have followed the symlink.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0 trust-ad
search lan

まず、Fedora 38+ではデフォルトでresolv.confによって管理されます。また、NetworkManagerのバージョンに応じて他のオプションを使用することも/etc/NetworkManager/NetworkManager.confできます。/etc/NetworkManager/conf.d/dns=...

また、そのテキストに基づいてファイルリンクがあるかどうかが、少なくともによって動的に実行されないように聞こえますresoved。したがって、設定でシンボリックリンクとして設定できます。

フルブート後に再接続するには、おそらく

nmcli connection down int
nmcli connection up int

または

nmcli nm enable false
nmcli nm enable true

またはそのようなもの。

関連情報