是否可以创建包含特殊字符的 DNS 子域?

Is it possible to create a DNS subdomain containing special characters?

是否可以创建包含特殊字符的 DNS 子域?

例如,根据 DNS 的 RFC,*.example.com 或 $.example.com 是否有效?

根据RFC 1034, domain name label can consist of letter, digit or hyphen (and it must begin with letter and end with letter or digit), so $ is not allowed. The exception that has special treatment is *, used for wildcards, and explained in more detail in RFC 4592

您问题的简短回答归结为 "Yes, but no, but sometimes yes"。

在协议层面,DNS字符串(包括名称)被编码为长度+数据,所以数据可以是任何东西。因此 *$ 完全没问题。

协议之上的级别是人名级别。在 that 级别上,您可以使用的名称有限制。自 80 年代以来,主要限制归结为字母、数字和 -(只要它不在标签的开头或结尾)。所以这样 *$ 是被禁止的(除了 * 因为标签的整个内容有特殊的含义)。

最重要的是,现在我们有了国际化的名字。这是一种将任何 Unicode 字符串编码为符合上述规则的形式的方法。这样,我们就可以拥有对人类来说看起来像 räksmörgås.se 而内部看起来像 xn--rksmrgs-5wao1o.se 的名字。开头的 xn-- 是一个前缀,表示这是一个编码名称。你仍然不能在你的名字中使用 *$,但你可能会在 Unicode 中找到其他看起来足够接近并且你 可以 使用的东西。 .. 这本身就是一个安全问题。

所有这些的规范分散在太多的 RFC 中。如果您好奇,请启动 here 并从那里访问许多链接。