%20%E3%81%8B%E3%82%89%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AF%E3%81%A9%E3%81%93%E3%81%AB%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
学習のために、私は独自のキャッシュ DNS サーバーを作成しています (dnsmasq に似ていますが、Python で作成しています)。NetworkManager は DHCP から上流のネームサーバーを取得し、 に配置します/etc/resolv.conf
。私のシステムは、/etc/resolv.conf
クエリするネームサーバーを見つけるために も参照します。
システムがクエリを実行するように独自の DNS サーバー ( 127.0.0.1
)を に配置する必要がありますが、NetworkManager によってファイルが上書きされます。 を上書きしないように NetworkManager を禁止または構成すると、NetworkManager がそこに書き込まないため、DNS サーバーはキャッシュ ネームサーバーを見つけることができません。/etc/resolv.conf
/etc/resolv.conf
/etc/resolv.conf
は へのシンボリックリンクのようです/var/run/NetworkManager/resolv.conf
ので、DNS サーバーに上流サーバーをそこで見つけさせるようにすればいいのではないでしょうか。NetworkManagerchattr -i /etc/resolv.conf
がそれを上書きしないようにしたいだけです。これが正しいやり方でしょうか、それとももっと良い方法があるでしょうか?
答え1
chattr は機能します。これは NM に resolv.conf をそのままにしておくように指示します。または、 を参照してrc-manager
くださいman NetworkManager.conf
。
NM は常に var/run 内の内部 resolv.conf に書き込むため、それをスクレイピングすることができます。または、 を使用するnmcli -f all device show
か、ディスパッチャ スクリプト ( man NetworkManager
) を使用します。
最後に、独自の DNS プラグインを作成することもできます。ただし、そのためには NM をソースから再構築する必要があり、プラグイン API も公開されておらず、安定していません。