在有限的嵌入式环境中由 DHCP 创建时动态更新 resolv.conf

在有限的嵌入式环境中由 DHCP 创建时动态更新 resolv.conf

我正在为使用 yocto 构建的嵌入式设备使用自定义 Linux 映像。除了 ifup/ifdown 的接口配置外,它没有任何网络管理功能。 /etc/resolv.conf 是通过 dhcp (dhcpcd) 创建的,并且系统没有任何其他软件来管理这些文件(例如 resolvconf 或 dnsmasq)。

# Generated by dhcpcd from eth0.dhcp
# /etc/resolv.conf.head can replace this line
domain routername.home
nameserver 192.168.0.1

通过此设置,如何动态更新 /etc/resolv.conf 并保持更新?

答案1

只需谷歌搜索 update resolv.conf 就可以得到大量结果,其中许多来自这个社区。例如:

当 resolv.conf 被覆盖时,如何设置我的 DNS?

了解您的发行版将有助于找到合适的发行版。例如,这不适用于基于 Debian 10 的 Bunsenlabs Lithium 3,但可能对纯 Debian 10 有帮助。

答案2

根据它的手册页dhcpcd显然使用dhcpcd-run-hooks在每个 DHCP 事件上运行任意数量的 shell 脚本(例如 IP 地址的初始获取、更新和重新配置)。

这些钩子脚本的位置作为/libexec/dhcpcd-hooks系统默认钩子和用户定义钩子的目录/etc/dhcpcd.enter-hook给出/etc/dhcpcd.exit-hook,但这部分当然可以由系统构建者自定义。

您可以找出这些脚本在自定义构建中的位置,检查它们以了解它们的用途,然后扩充、修改或彻底替换修改 DNS 设置的脚本,以准确实现您想要的效果。

的手册页dhcpcd.conf表示甚至有一个nohook配置关键字可用于禁用一个或多个挂钩脚本。

使用示例与您的问题高度相关:

nohook script

不要运行这个钩子脚本。匹配全名,或以 2 个数字为前缀(可选)以 结尾.sh。所以阻止 dhcpcd 接触您的 DNS 设置或者开始wpa_supplicant你会这样做:

nohook resolv.conf, wpa_supplicant

相关内容