如何在我的域中使用大写字母(类似于 Berkeley.EDU)

cns*_*nst 7 domain-name-system

我正在使用 NSD3,但我试图在我的域名中使用大写字母没有成功。

您的 DNS 中怎么可能有大写字母?

在各种 OSS 文档中,经常看到 Berkeley.EDU 大写,事实上他们的 DNS 直到今天仍然大写:

% traceroute www.berkeley.edu
…
15  t1-3.inr-201-sut.Berkeley.EDU (128.32.0.65)  168.794 ms  169.906 ms  168.714 ms
16  t5-5.inr-210-srb.Berkeley.EDU (128.32.255.37)  168.850 ms  168.912 ms t5-4.inr-210-srb.Berkeley.EDU (128.32.255.125)  168.886 ms
Run Code Online (Sandbox Code Playgroud)

在正向 DNS 中,它们也将各种域大写:

% dig @ns.cs.berkeley.edu. cs.berkeley.edu.
…
;; AUTHORITY SECTION:
cs.berkeley.edu.        86400   IN      NS      cgl.UCSF.edu.
cs.berkeley.edu.        86400   IN      NS      adns1.berkeley.edu.
cs.berkeley.edu.        86400   IN      NS      ns.cs.berkeley.edu.
cs.berkeley.edu.        86400   IN      NS      vangogh.cs.berkeley.edu.
cs.berkeley.edu.        86400   IN      NS      adns2.berkeley.edu.
cs.berkeley.edu.        86400   IN      NS      ns.EECS.berkeley.edu.
…
Run Code Online (Sandbox Code Playgroud)

Mic*_*ton 14

正如NSD 文档中(一个晦涩的地方)所指出

NSD 将名称规范化为小写。

如果您希望您的名称以大小写混合显示,保留您在区域文件中放置的任何内容,您将需要使用不同的名称服务器,例如 BIND。毕竟,它是伯克利互联网名称守护程序......

虽然有可能破解 NSD 源代码以使其保留大小写,但您应该警惕这样做,因为可能无法预测此类更改可能会引入哪些错误或意外后果,而您的名称服务器就是其中之一您希望神秘错误出现的最后一个地方。

  • 更不用说它在平滑推出安全更新时增加的延迟,特别是如果补丁在修订之间中断。在技​​术性较低的情况下,这不是我想向新经理解释的事情,作为我为什么公司基础设施运行一组自定义补丁的理由。 (3认同)

use*_*517 8

看起来您的 DNS3 服务器正在修改(规范化)它具有权威性的记录。看看源代码http://www.nlnetlabs.nl/svn/nsd/trunk/dname.c,特别是 dname_make 和 DNAME_NORMALIZE,这只是tolower。来自http://www.nlnetlabs.nl/svn/nsd/trunk/dname.h

#if defined(NAMEDB_UPPERCASE) || defined(USE_NAMEDB_UPPERCASE)
#define DNAME_NORMALIZE        toupper
#else
#define DNAME_NORMALIZE        tolower
#endif
Run Code Online (Sandbox Code Playgroud)

拉取 SVN 存储库对 dname.h 进行更改重新编译,然后获得所需的内容应该相当容易。当然,这样做是你自己的支持。


正如迈克尔汉普顿指出的这个功能

const dname_type *
dname_make_from_packet(region_type *region, buffer_type *packet,
               int allow_pointers, int normalize)
{
    uint8_t buf[MAXDOMAINLEN + 1];
    if(!dname_make_wire_from_packet(buf, packet, allow_pointers))
        return 0;
    return dname_make(region, buf, normalize);
}
Run Code Online (Sandbox Code Playgroud)

使用硬编码参数调用,normalize因此您也需要跟踪它并修复它。

  • 如果你想这样做,你必须破解代码的不同部分。从 packet.c 调用的 `dname_make_from_packet` 函数中有一个 `normalize` 参数,它被硬编码为 1。但是你会遇到系统管理员是否应该在名称服务器内部乱搞的问题...... (4认同)