TXT 记录和 CNAME/A 记录之间的 DNS 命名冲突

TXT 记录和 CNAME/A 记录之间的 DNS 命名冲突

我观察到 Azure DNS 区域的使用过程中出现了意外行为。

我有以下 DNS 记录:

_acme_challenge.<mysubdomain1>  IN TXT   -> any value
*                               IN CNAME -> <mysubdomain2>.<mydomain>.com
<mysubdomain2>                  IN A     -> <myIPaddress> 

如果我现在对以下内容执行 nslookup <mysubdomain1>.<mydomain>.com,我期望获得以下内容的有效响应:myIPaddress。但是 TXT 记录阻止了解析。删除 TXT 条目后,我收到了预期的结果。

您知道这种行为是否正确吗?对我来说这似乎是错误的。但目前还不清楚它是否按预期和有目的的方式工作。

关于同一主题已经有一个讨论:https://github.com/cert-manager/cert-manager/issues/806,但最终结果却没有产生有意义的结果。

希望您能帮忙!谢谢

答案1

这实际上是预期的行为。

RFC1034有此信息:

通配符 RR 不适用:

  • 当查询位于另一个区域时。也就是说,委派会取消通配符默认值。

  • 当查询名称或通配符域与查询名称之间的名称已知存在时。例如,如果通配符 RR 的所有者名称为“*.X”,并且区域还包含附加到 BX 的 RR,则通配符将适用于名称 ZX 的查询(假设没有关于 ZX 的明确信息),但不适用于 BX、ABX 或 X。

这是此处的第二项内容。您的 LetsEncrypt 质询记录:

_acme_challenge.<mysubdomain1>  IN TXT   -> any value

引入了一个名称<mysubdomain1>,这取消了通配符。您需要的是:

<mysubdomain1>                  IN CNAME -> <mysubdomain2>.<mydomain>.com

正如@gapsf 所建议的(您可能在现有的 wildard 记录之外还拥有它)。

答案2

尝试

_acme_challenge.<mysubdomain1>  IN TXT   -> any value
<mysubdomain1>                  IN CNAME -> <mysubdomain2>.<mydomain>.com
<mysubdomain2>                  IN A     -> <myIPaddress> 

怎么运行的。

这种行为是预料之中的,不是Azure 特定。

RR 的顺序无关紧要。

使用您的配置

_acme_challenge.<mysubdomain1>  IN TXT   -> bla-bla-bla
*                               IN CNAME -> <mysubdomain2>.<mydomain>.com
<mysubdomain2>                  IN A     -> <myIPaddress>
  • query A _acme_challenge.mysubdomain1.mydomain.com不返回任何内容,因为没有ARR_acme_challenge.mysubdomain1.mydomain.com

  • query TXT _acme_challenge.mysubdomain1.mydomain.com返回bla-bla-bla

  • query A mysubdomain1.mydomain.com不返回任何内容,因为 RRmysubdomain1.mydomain.com存在(它是_acme_challenge.mysubdomain1.mydomain.com

  • query A mysubdomain2.mydomain.com返回myIPaddress

  • query A **anything_you_want**.mydomain.comCNAME mysubdomain2.mydomain.com由于存在通配符,因此返回*.mydomain.com CNAME

最好避免使用通配符。

相关内容