如何可靠地寻址网络上的不同机器?
我以前一直使用该.local
后缀与本地网络上的计算机进行通信。然而,使用新路由器.local
很少(尽管有时)可以工作。我发现了这一点.home
以及.lan
两者通常工作,但并非总是如此。
.-------. .--------. .-----.
| modem |---| router |))))))(wifi))))))| foo |
.-------. .--------. v .-----.
|| | v
/_^_^_\ | \))))))).-----.
/ cloud \ | | bar |
\-_-_-/ .-----. .-----.
| baz |
.-----.
因此,从 上的终端foo
,我可以尝试:
ssh bar.local
ssh bar.home
ssh bar.lan
ssh baz.local
ssh baz.home
ssh baz.lan
有时这些后缀有些有效,有些则无效,但我不知道如何预测哪些后缀或何时有效。
foo
、bar
、 和baz
都是现代 Linux 或 Android 系统,并且 Linux 机器都安装了(或可以安装)avahi-daemon 或其他合理可用的软件包
(我不想设置静态 IP 地址:我想继续为每台计算机使用 DHCP(来自路由器),即使我可以使用静态地址,我也希望能够在未 root 的 Android 机器,我无法编辑主机文件以将所选主机名映射到 IP 地址。)
答案1
没有指定.lan
和 的RFC .home
。因此,默认配置的伪 TLD(顶级域名)由路由器供应商决定。
例如,我的路由器供应商(AVM)似乎.fritz.box
默认使用。
.local
被使用mDNS(多播 DNS),Apple 设计的协议。仅适用example.local
于运行 mDNS 守护进程的系统(以及目标)(例如 MacOSX、当前的 Linux 发行版,如 Ubuntu/Fedora)。
您可以继续使用 dhcp - 但也许您必须稍微配置一下路由器。大多数路由器允许您配置网络域名等内容。
请注意,使用伪 TLD 有点危险 -.lan
似乎很流行 - 并且比它更好.local
(因为它不与 mDNS 冲突.local
) - 但不能保证 ICANN 不会在某个时候将其引入为新 TLD。
2019年更新: 举个例子,.box
它不再是伪顶级域名了。互联网名称与数字地址分配机构委托.box2016年。
因此,获得一个真实的域名并使用它的子域来存储私人内容是有意义的,例如,当您的域是时,example.org
您可以使用:
lan.example.org
internal.example.org
...
答案2
如果共享本地冲突域网段上的主机并已实施 mDNS(多播 DNS),则使用“组成”顶级域 (TLD) 标识符(例如“LAN”或“本地”或“家庭”)的网络可能会成功RFC6762 中颁布的 Microsoft 的 LLMNR(链路本地多播名称解析)(RFC4795 中颁布)或 RFC 1001 和 1002 中颁布的“Microsoft Networking”(或 SAMBA)NetBIOS 广播(假设 B 节点或 H 节点配置)。
如果本地存在 HOSTS 或 LMHOSTS 文件,或者已创建手动 DNS 或 WINS (NBNS) 条目来指示主机的底层 IP 地址,则流量只会跨冲突域(即路由)。然而,.LOCAL 域是官方专门为 mDNS 保留的,不应与传统 DNS 一起使用,并且所有其他“虚构”TLD 最终都会通过虚假、僵尸查询流量污染互联网(尤其是 DNS 服务器)。永远不负责。
主办方应该实际上使用“Home.ARPA”顶级域名,如 RFC8375 中颁布的那样。 Home.ARPA 是专门为处理“家庭”或“小型企业”名称查询而创建的,方法是将其分流到跃点早期的“黑洞”。黑洞由 AS112.Net 项目定义,目前发布为 RFC7534,正在由全宇宙精明的网络运营商实施;我想知道是否有一天我们甚至可能会看到家庭路由器默认实现它。
答案3
据我了解,如果您使用其中之一RFC-1918专用网络数字地址,这些由互联网“规则”保证不会路由到自己的子网之外。
有些名称保留供特殊用途({无效。,本地主机。,测试。在 RFC6761 中} {当地的。在 RFC6762 中} {洋葱。在 RFC7686 中} 亚纳网站)
这样做的结果是您可以在您的计算机上使用一些您喜欢的名称专用网络局域网。如果地址号在 RFC1918 范围内:即使公共互联网上的人们知道您的节点名称,他们也无法路由到该地址。