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

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

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

是否有人知道这是否仍然正确(因为该页面感觉相当旧)?

更新:我主要指的是 PTR 和 SRV 记录,而不是 A/CNAME 记录。

答案1

A域名可以包括 0 到 255 范围内的任意二进制八位字节。

但是如果您的 AD 条目代表主机名A,则空格不是有效字符。主机名(即指向或记录的域名AAAA)必须遵循以下规则:RFC 1123,这实质上将合法字符限制为 LDH(“字母数字连字符”)。

因此,对于其他条目,MS 完全有可能误解了 RFC。这不会是第一次,当然也不会是最后一次。

参考

§5.1RFC 1035

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

和 §6.1.3.5.RFC 1123

DNS 对域名语法的定义非常笼统——一串标签,每个标签最多包含 63 个 8 位八位字节,以点分隔

以及第 11 条RFC 2181

任何二进制字符串都可以用作任何资源记录的标签

答案2

啊 - 抱歉,我有点尖刻,但你在这里说错话了。这并不是说 AD 不支持带空格的 DNS 名称,而是每个定义和 RFC 都不允许 DNS 名称以空格开头。RFC 952 和 1123 都不允许空格作为 DNS 名称的一部分。

因此,AD 并不缺乏对 DNS 名称中的空格作为缩写的支持,而是因为它遵循与其他所有名称相同的规则。

答案3

你的具体问题的答案是,Active Directory 确实不允许有空格在 DNS 中主机名. 禁止使用的字符在KB 909264 - Active Directory 中针对计算机、域、站点和 OU 的命名约定在标有禁止使用的字符内容如下:

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

要将答案从 Active Directory 扩展到 DNS 域名系统,通常情况会稍微棘手一些,因为虽然在某些情况下技术上允许使用空格,但实际上您可能永远不会遇到这种情况。

简短的回答是:请勿在 DNS 主机名中使用空格!

长答案根据RFC 3696 第 2 节,域名 (DNS) 限制,就是它:

DNS 名称中允许使用任意字符或位的组合(以八位字节形式)。

它继续指出(重点是我的):

但是,大多数申请都需要一种首选格式。这种首选格式是顶级域名 (TLD) 中唯一允许使用的形式。一般来说,这也是大多数在 TLD 中注册的二级名称中唯一允许使用的形式, 尽管有些名称通常不会被用户看到,但还是要遵守其他规则。它源自 ARPANET 的主机命名规则(即“主机名”规则),根据它允许的字符,也许最好将其描述为“LDH 规则”。LDH 规则在更新后规定:组成域名的标签(用句点分隔的单词或字符串)必须仅由 ASCII [ASCII] 字母和数字字符以及连字符组成。不允许使用其他符号或标点符号,也不允许使用空格。 如果使用连字符,则不允许将其出现在标签的开头或结尾。还有一条附加规则,本质上要求顶级域名不能全是数字。

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

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

<character-string> 可以用一种或两种方式表示:一组连续的字符,内部没有空格,或者是一个以“”开头并以“”结尾的字符串。在“”分隔的字符串中,可以出现任何字符,但“”本身除外,必须用 \(反斜杠)将其括起来。

请记住,在其他地方RFC 1035,特别是§2.3,它警告说:

2.3. 约定

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

2.3.1. 首选名称语法

DNS 规范试图在域名构造规则方面尽可能通用。其理念是,任何现有对象的名称都可以用域名来表示,且只需进行最少的更改。

然而,在为对象分配域名时,谨慎的用户将选择一个既满足域系统规则又满足对象现有规则的名称,无论这些规则是已发布的还是由现有程序暗示的。

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

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

答案4

默认情况下,Windows DNS 服务器不支持 DNS 名称中的空格,但是通过将设置“服务器属性 -> 高级选项卡 -> 名称检查”更改为“所有名称”,服务器将很乐意接受并提供带有空格的条目。

相关内容