mic*_*con 34 domain-name-system hostname case-sensitive
主机名是否区分大小写?是
ping MYHOST
Run Code Online (Sandbox Code Playgroud)
等于
ping myhost
Run Code Online (Sandbox Code Playgroud)
它是否取决于所使用的 DNS?Win/Mac/Unix 系统之间有区别吗?
Bil*_*hor 33
从 DNS 解析的名称不区分大小写。这对于防止混淆很重要。如果区分大小写,那么我们将有 .com 的八个变体(.com、.Com、.cOm、.COM、.coM、.CoM、.cOM 和 .COM)。国家/地区代码将有四个。
如果名称解析对 Ping 区分大小写,则 DNS 不会完成。
Cri*_*gie 10
我刚刚在这里工作。DNS应该不区分大小写.... RFC 指定 . https://tools.ietf.org/html/rfc4343 但并没有说它必须是小写。
因此,我们很高兴对无法为我们的内部域“t.local”解决问题的主机进行故障排除
p123$ ping p123-db.t.local
PING p123-db.t.local (192.168.106.175) 56(84) bytes of data.
....works ok
p123$ ping P123-dB.T.lOcal
ping: unknown host P123-dB.T.lOcal
Run Code Online (Sandbox Code Playgroud)
为什么要解决混合案例?因为这就是 tcpdump 显示为 DNS 查询的内容,因为这是正在运行的软件所要求的。pgbouncer 被配置为在其配置中使用“p123-db”,并且 resolv.conf 指定了一个搜索域“t.local” 那么是什么混淆了这种情况?
原来 glibc 是随机切换案例的。该过程称为“0x20 填充”,并于 2008 年在“使用 DNS 标签中的位 0x20 以提高交易身份”中首次描述 http://tools.ietf.org/html/draft-vixie-dnsext-dns0x20-00
主要目的是增加熵,以便更难伪造回复——问题的情况必须与答案的情况相匹配。
可以在这里找到一个很好的讨论。 https://developers.google.com/speed/public-dns/docs/security?csw=1#randomize_case
另外,我们在内部运行 powerDNS,并针对数据库进行查找。多年来,没有人在 t.local 域中使用大写字母的主机名或 FQDN,因此我们从未注意到我们的内部域区分大小写。
已通过查询中的一些调整修复,但这会破坏上述 0x20 混合大小写查找 - 客户端可能要求在与请求相同的情况下返回答案。
简短回答:DNS 不应该区分大小写,但问题和答案将来需要是相同的大小写。
我刚刚完成对嵌入式 SE Linux 设备上主机名解析表现出区分大小写的问题的故障排除。
“ping MYHOST”将 ping 到 127.0.0.1,而“ping myhost”将 ping 正确的 IP 地址。
nslookup 对大写和小写都产生了正确的结果,表明 DNS 服务器没有故障。
但与忽略缓存的 nslookup 不同,“getenthosts MYHOST”输出“0.0.0.0”,“getenthosts myhost”输出正确的 IP 地址。
所以 nscd 显然是区分大小写的。调用“nscd -i Hosts”清除缓存修复了该问题。
(大写)中的 MYHOST 最终缓存为 0.0.0.0,因为在创建 DNS 条目之前,进程尝试建立与 MYHOST 的连接,这种情况在远程设备获取其 DHCP 分配时发生。