为什么使 dnsmasq 具有权威性会破坏 CNAME 解析?

为什么使 dnsmasq 具有权威性会破坏 CNAME 解析?

CNAME在 dnsmasq 中设置如下

cname=ch1-lampe-bureau.swtk.info,switch-3

它被正确解析(switch-3是一个通过 DHCP 从 dnsmasq 获取其 IP 的设备):

root@rpi1 ~# host switch-3
switch-3 has address 10.200.0.123
root@rpi1 ~# host ch1-lampe-bureau.swtk.info
ch1-lampe-bureau.swtk.info is an alias for switch-3.
switch-3 has address 10.200.0.123

然后我想通过添加以下代码来使 dnsmasq 对我的域具有权威性

auth-zone=swtk.info
auth-server=rpi1.swtk.info
auth-peer=192.168.0.13

区域转移方面,它是有效的:192.168.0.13可以转移区域。

但s的解析却CNAME停止了。我仍然可以解析A记录(switch-3例如上面的记录),CNAME但不能。

root@rpi1 ~# host switch-3
switch-3 has address 10.200.0.123
root@rpi1 ~# host ch1-lampe-bureau.swtk.info
Host ch1-lampe-bureau.swtk.info not found: 3(NXDOMAIN)

dnsmasq 的权威性和它解析问题的能力有什么关系CNAME

注意:这是内部DNS,与swtk.info外部注册的域名没有关系。

答案1

这种行为似乎非常dnsmasq具体,从 DNS 的角度来看,如何遵循这一点并不明显。
在我看来,值得考虑设置一个“真正的”名称服务器(此时对 DNS 的普遍适用理解将变得相关),但这无疑会使设置不太集成。

我自己不是dnsmasq用户,但在我看来,以下部分来自dnsmasq手动的解释其在此场景中的行为和要求(重点添加):

当 dnsmasq 配置为权威服务器时,以下数据用于填充权威区域。

--mx-host、--srv-host、--dns-rr、--txt-record、--naptr-record、--caa-record,只要记录名称在权威域中。

--cname 只要记录名称在权威域中。如果 CNAME 的目标不合格,则它以权威区域名称为合格。以这种方式使用的 CNAME (仅)可以是通配符,例如

--cname=*.example.com,default.example.com 来自 /etc/hosts (和 --addn-hosts )以及 --host-record 和 --interface-name 的 IPv4 和 IPv6 地址,前提是该地址属于 --auth-zone 中指定的子网之一。

DHCP 租用的地址,前提是该地址属于 --auth-zone 中指定的子网之一。(如果使用构建的 DHCP 范围,这取决于动态分配给接口的地址,则应使用通过接口的动态地址定义子网的 --auth-zone 形式来确保满足此条件。)

在默认模式下,DHCP 租约具有非限定名称,并且可能具有使用 --domain 构造的限定名称,则权威区域中的名称由非限定名称和区域的域构造。这可能等于或不等于 --domain 指定的值。如果设置了 --dhcp-fqdn,则使用与 DHCP 租约关联的完全限定名称,并且必须与区域的域匹配。

即根据他们手册的上述部分,我的理解是您的cname=ch1-lampe-bureau.swtk.info,switch-3意思ch1-lampe-bureau.swtk.info. CNAME switch-3.swtk.info.

此外,如果还指定了与其分配的 IP 地址匹配的子网,则从 DHCP 注册的名称似乎仅与身份验证区域内的名称一起添加auth-zone=...。(按照--auth-zone=<domain>[,<subnet>[/<prefix length>][,<subnet>[/<prefix length>].....][,exclude:<subnet>[/<prefix length>]].....]

因此目前switch-3.swtk.info.可能不存在,但如果您为区域指定适当的子网,则该名称应该出现,此时--cname也应该开始工作。

相关内容