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
またはそのようなもの。