我观察到 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
不返回任何内容,因为没有A
RR_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.com
CNAME mysubdomain2.mydomain.com
由于存在通配符,因此返回*.mydomain.com CNAME
。
最好避免使用通配符。