Active Directory是否支持带有空格的DNS名称?

在研究如何在我们的networking中设置一些静态DNS-SD服务时,我遇到了http://www.dns-sd.org/ServerStaticSetup.html ,它指出Active Directory的DNS服务器不支持带有空格的DNS名称在他们中。

有谁知道这是否仍然如此(页面感觉很老)?

更新:我主要是指PTR和SRVlogging,而不是A / CNAMElogging。

域名可以包含0到255之间的任何二进制八位字节。

但是,如果您的AD条目代表主机名称 ,则空格不是有效的字符。 主机名称(即指向AAAAAlogging的域名)必须遵循RFC 1123中的规则,该规则基本上将合法字符限制为LDH(“字母数字连字符”)。

因此,对于其他条目,MS很可能错误地解释了RFC。 他们不会是第一个,他们当然也不会是最后一个。

参考

RFC 1035的 §5.1:

引用约定允许将任意字符存储在域名中。

和§6.1.3.5。 的RFC 1123 :

DNS通常定义域名的语法 – 一串标签,每个标签包含多达63个8位八位字节,以点分隔

和RFC 2181的 §11:

任何二进制string都可以用作任何资源logging的标签

啊,对不起,你可以在这里遛狗。 AD并不是不支持带有空格的DNS名称,但是每个定义和RFC的DNS名称都不允许有空格开头。 RFC 952和1123都不允许将空格作为DNS名称的一部分。

所以,AD并不缺乏对DNS名称空间的支持,而是因为它遵循与其他人相同的规则。

您的具体问题的答案是NO ,Active Directory 不允许 DNS 主机名中的 空格 。 禁止的字符在KB 909264中有明确的规定- 计算机,域,站点和OU在Active Directory中的命名约定标记为不允许使用的字符部分:

DNS主机名不能包含空格或空格字符。

为了将答案扩展到Active Directory到DNS域名系统之外,情况有点棘手,因为虽然在某些情况下技术上允许使用空格,但在实践中,您可能永远不会遇到这种情况。

简短的回答: 不要在DNS主机中使用空间!

根据RFC 3696§2域名(DNS)名称限制的长答案是:

在DNS名称中允许任何字符或位组合(如八位字节)。

它继续说(强调我的):

但是,大多数应用程序都需要一个首选表单。 这种首选forms是顶级域名或顶级域名(TLD)名称中唯一允许的forms。 一般来说,它也是顶级域名(TLD)中注册的大多数二级域名中唯一允许的forms,但用户通常不会看到的一些域名遵守其他规则。 它来自最初的ARPANET主机命名规则(即“主机名”规则),也许更好地描述为“LDH规则”,在允许的字符之后。 更新后的LDH规则规定, 构成域名的标签(由句点分隔的单词或string)必须仅由ASCII [ASCII]字母和数字字符以及连字符组成。 没有其他符号或标点字符是允许的,也不是空格。 如果使用连字符,则不允许出现在标签的开头或结尾。 还有一个额外的规则,基本上要求顶级域名不是全数字。

在实践中,这意味着你不应该使用空格 ,即使在RFC 1035的§5.1的这些摘录中定义的最通用的域名规范中,也可以允许在域名中使用空格:

<domain-name>在主文件中占据大部分数据。 域名中的标签用string表示,并用点分隔。 引用约定允许将任意字符存储在域名中。

<character-string>以一种或两种方式expression:作为一个连续的没有内部空间的字符集,或者以一个以“以a结尾”的string。 在“分隔string内部,除了”本身,必须使用\(反斜杠)引用外,任何字符都可以出现。

请记住,在RFC 1035的其他部分,特别是§2.3 ,它警告说:

2.3。 约定

域系统有几个处理低层但是基本问题的约定。 虽然实施者可以在自己的系统内自由地违反这些惯例,但是他必须遵守这些惯例从其他主人观察到的所有行为。

2.3.1。 首选名称语法

DNS规范试图尽可能通用于构build域名的规则。 这个想法是,任何现有的对象的名称可以表示为一个域名,只需要很less的变化。

但是,在为对象分配域名时, 谨慎的用户将select既满足域系统规则又满足对象任何现有规则的名称,无论这些规则是已发布的还是已有的程序隐含的。

例如,在命名邮件域时,用户应该同时满足这个备忘录的规则和RFC-822中的规则。 当创build新的主机名时,应该遵循HOSTS.TXT的旧规则。 这避免了旧软件转换为使用域名时的问题。

我当然欢迎进一步澄清或更正我的解释,但请不要这样做,除非您能够引用RFC的特定部分来肯定或否认这种解释。