Debian 12.4,网络由 systemd networking.service
、双栈 IPv4 和 IPv6 管理。
我知道有很多问题询问如何停止系统从更新开始resolv.conf
,这不是重复的。
长话短说
在启动时,ifup
似乎正在覆盖resolv.conf
(我想要的),但做得“不正确”(我认为)。结果是resolv.conf
最终看起来像这样(前缀被混淆):
nameserver 26xx:xxxx:xxxx:xxxx:201:2eff:fe70:3bfe
这里缺少的是nameserver
IPv4 的条目和search
我的 LAN 域的条目。
细节
为了排除故障,我执行了以下操作:
- 删除了所有当前租约
/var/lib/dhcp
- 已开始在防火墙上对 DHCP 和 DHCP6 端口进行数据包捕获
- 重新启动 Debian 系统
- 使用 Wireshark 检查生成的捕获文件
研究结果是:
- IPv4 DHCP 事务请求服务器返回所有必要的信息,包括主机名、域名和 DNS 服务器 IP。
- IPv6 DHCP 事务请求相同的数据,但响应仅包括 DNS 服务器地址;主机名和域名不存在于 DHCP6 响应中。
我怀疑正在发生的事情是ifup
正确设置resolv.conf
IPv4 数据,然后用 IPv6 响应完全覆盖它,而不是组合它们。
问题resolv.conf
: DHCP 选项和双栈系统会发生什么情况?另一种问法是“谁有错,ifup
还是pfSense?”
笔记
软件包network-manager
和resolvconf
未安装,并且systemd-networkd
被禁用。网络由 systemd 的单元管理networking.service
。我不是故意这样设置的,这是我安装时默认得到的。
答案1
我怀疑正在发生的事情是 ifup 使用 IPv4 数据正确设置了 resolv.conf,然后用 IPv6 响应完全覆盖它而不是组合它们。
您的怀疑可能是完全正确的。
Plain ifup
(没有resolvconf
或没有其他处理多个 DNS 设置源的方法)没有以前的 DNS 设置的记忆,也没有任何方法可以组合多个源的设置;这是“最新的来源获胜”,简单明了。
在双栈系统上,DHCPv4 和 DHCPv6 是两个独立的 DNS 信息源。显然您的 DHCPv6 服务器未配置为分配主机名或提供域名信息。
“到底是谁的错,ifup 还是 pfSense?”
当然:除非使用或ifup
进行增强,否则它在这方面不适合您的设置。其中任何一个都可以提供合并来自两个或多个源的设置的功能,并且同一物理接口上的 DHCPv4 和 DHCPv6 被视为两个单独的源。resolvconf
systemd-resolved