我们已经成功运行了包含各种 Linux 服务器(Ubuntu)和 Windows+Linux 客户端的办公网络好几年了。其中一台服务器使用 DNSmasq 轻量级 DNS 服务器包充当内部 DNS 服务器。
就在今天,我发现该命令
$ nslookup machine.domain.com
有效,但
$ nslookup machine.domain.com/
不起作用 --> 不存在的域/NXDOMAIN
这在 Ubuntu 机器和 Windows 机器上都发生过。
这是因为这里(即使用“nslookup”或“host”等命令时)末尾的斜线被视为域名的一部分,即顶级域名为“com/”吗?还是表示我们的内部 DNS 服务器配置有误?
显然,浏览器“通常”会正确处理这个斜线,因为它们只使用不带斜线的域名进行 DNS 查找,从而得到答案。我在这里加上“通常”,是因为就在今天,我遇到了一个在全新 Ubuntu 22.04 LTS 安装上安装的全新 Firefox,在浏览器地址栏中输入斜线(即machine.domain.com/
)时,奇怪的是出现了上面提到的 NXDOMAIN 错误消息。
而且——更奇怪的是——只有在成功查找并删除尾部斜杠后,它才开始使用“斜杠地址”。后一种行为可能是由 Firefox 缓存引起的……
有人能给我一些见解吗?这是否可能是我对 DNS 工作原理缺乏了解(即结尾的斜杠甚至后续路径实际上指向“不同的域”)和 Firefox 错误(即在安装的 Firefox 版本中错误地在 DNS 查询中包含斜杠)的结合?谢谢!
答案1
您正在混合标准;对于超文本传输协议(HTTP),使用“正斜杠”是正确的。
HTTP 兼容地址由协议定义、后跟完全限定域名 (FQDN) 和统一资源指示器 (URI) 组成。
例如https://sub.domain.tld/uri/of/the/resource/being/requested
协议:https(TLS 封装的 HTTP 协议)FQDN:sub.domain.tld URI:/uri/of/the/resource/being/requested
DNS 仅用于将 FQDN 解析为要访问的 IP 地址,例如
FQDN:一.一.一.一 ipv4:1.1.1.1
顶级域名是 FQDN 的一部分,即.
分隔符后面的最后一部分,例如.com
.co.uk
.site
等等...
简而言之,传递给的任何域nslookup
无法解析的原因是由于它/
是按字面意思解释的,而任何浏览器都能识别它是什么;它是 HTTP 协议的一部分。
nslookup 尝试解析sub.domain.tld/
,任何浏览器都会将输入“放入”FQDNsub.domain.tld
和 URI中/
希望这能给你一些启发
答案2
正如这里提到的关联(微软)域名只能包含字母字符、数字和“-”符号。
其他任何事情都不合法(不正确,由@Patrick Mevzek 正确纠正),nslookup 可能不会解析这个或者你的 DNS 服务器理所当然地拒绝了这样一个愚蠢的请求:)
斜线后在网络浏览器中发生的任何事情都不是 DNS 的一部分,并且 nslookup 无法理解这一点。
例如,curl 不会抱怨,只是将其视为网络服务器的根。
curl example.com/
<!doctype html>
<html>
<head>
<title>Example Domain</title>