@ (BIND) 中的 CNAME

ale*_*nst 2 domain-name-system bind

我可以在我的 .zone 文件中放入这样的内容吗?

@       IN      CNAME   srvr-01.foo.bar.
Run Code Online (Sandbox Code Playgroud)

或者那是无效的?如果无效,如何将访问者重定向mydomain.com到服务器srvr-01.foo.bar?(请注意,我没有得到服务器 IP,只有域,这让我认为它可能会随机更改)

编辑:对不起,我的错。我替换NSCNAME,这正是我真正想写的。

tim*_*tim 5

RFC1912 是非法的:

RFC1912 2.4:“不允许 CNAME 记录与任何其他数据共存。”

然而 RFC1034 只声明它“不应该”被使用。这对我来说意味着它在技术上并不违法(RFC2119)。如果您的 DNS 软件支持它并且您知道自己在做什么,则可以使用它。然而,互联网上的一些实现依赖于“CNAME xor 其他数据”(例如 MS Exchange)。

简短的回答:不要。

  • 值得注意的是 rfc1912 纯粹是信息性的(作为更多的意见仍然很有趣)。然而,[rfc2181(“DNS 规范的澄清”)](http://tools.ietf.org/html/rfc2181#section-10.1) 是在标准轨道上,并明确指出这是不合法的。我认为将 CNAME 和其他基于它的数据混合在一起是一个非常糟糕的主意,只有在 27 年前的标准中才被推荐,而后来的标准文件指出这是非法的,并且依赖于这种情况。 (2认同)

Håk*_*ist 5

首先,重要的是要了解这@意味着什么。

@是对当前原点值的引用。默认情况下,原点是区域的名称,但可以使用$ORIGIN指令(例如$ORIGIN foo.example.com.)在区域文件中的任何位置重新定义。

这意味着不能做出一般性声明,@ IN CNAME ...因为含义完全取决于当前的原始值是什么。

可以说,添加一条CNAME记录的合法性取决于是否还有其他同名记录。CNAME记录不允许与其他数据共存。

作为上述的直接结果,CNAME在区域顶点拥有记录永远是不合法的,因为区域顶点总是至少有SOANS记录。