很长一段时间以来,我已经能够仅使用短名称 SSH 到网络上的其他主机,例如,ssh otherpc
它识别出这是一个短名称,添加 DNS 搜索后缀,进行查找otherpc.mydomain.example
并与我的 SSH 配置相匹配*.mydomain.example
正确的私钥被选取。
但是现在我发现它ssh otherpc
无法告诉我密钥无效。如果我收到来自(注意短名称)ping otherpc
的 IPv6 响应,则返回来自(注意全名)的响应。otherpc
ping -4 otherpc
otherpc.mydomain.example
不知何故,当使用 IPv4 时,DNS 后缀可以工作,但当使用 IPv6 时,它只能通过短名称查找主机,这意味着适用于整个域的所有 SSH 规则都会被忽略。
我将 BIND 作为 DNS 守护进程运行,它具有整个域的正向和反向条目(但仅没有短名称),因此我不确定短名称的解析内容或方式。我正在运行 systemd-resolved,所以我怀疑这是 systemd 正在做的事情,但我没有运气发现它是什么。
我认为这可能是 LLMNR,但是禁用它并/etc/systemd/resolved.conf
没有帮助,事实上,如果我终止 systemd-resolved,那么即使它不再运行,问题仍然会发生(可能是因为我必须关闭 DNS 存根侦听器,因为它与机器上的 DNS 服务器冲突)。所以看起来这个短名称解析发生在 systemd-resolved 之外的其他地方?
有谁知道这个短主机名解析是如何工作的,更重要的是,如何将其关闭并返回到添加 DNS 后缀以便 SSH 再次工作的旧方法?