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 将名称规范化为小写。
如果您希望您的名称以大小写混合显示,保留您在区域文件中放置的任何内容,您将需要使用不同的名称服务器,例如 BIND。毕竟,它是伯克利互联网名称守护程序......
虽然有可能破解 NSD 源代码以使其保留大小写,但您应该警惕这样做,因为可能无法预测此类更改可能会引入哪些错误或意外后果,而您的名称服务器就是其中之一您希望神秘错误出现的最后一个地方。
看起来您的 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
因此您也需要跟踪它并修复它。