通用家庭DNS

通用家庭DNS

我家里有很多网络设备,我希望能够以人性化的方式在网络上访问它们。我不希望这些设备可以直接通过互联网访问。

我的需求:

  1. 设备可以有多个“别名”backup- 例如,它应该可以通过、dockernas名称 访问
    • 因为我在一台设备上运行多个服务,并且想区分它们,可以选择将它们移动到另一台设备
  2. 应可使用家庭托管 VPN 远程访问设备
    • 因为我想访问我的 NAS 并能够从远程位置运行备份
  3. 设备应可从连接到工作 VPN 的家庭工作站访问
    • 因为我有时在家工作,但仍想访问我的本地网络

多年来,我尝试过以下解决方案。然而,没有一个能毫无妥协地满足我的所有需求。

使用mDNS

这是我的初始设置,设备可通过以下方式访问hostname.local

❓ 设备可以有多个“别名”

每个设备可能有多个 mDNS 名称,但由于以下问题,我从未进一步调查过

❌ 应可使用家庭托管 VPN 远程访问设备

mDNS正在使用的协议未broadcast通过 VPN 连接转发。mDNS来自设备的响应无法到达 VPN 客户端。

✅ 设备应能从连接到工作 VPN 的家庭工作站访问

这是可以正常工作的,因为它mDNS“绕过”了 VPN 并访问了本地网络。

使用mDNS家庭DNS服务器

我在家里托管自己的DNS服务器。这个想法应该可以解决我的前两个需求。但是不建议*.local在服务器中保存记录DNS。例如dig输出警告

$ dig docker.local
...
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
...
✅ 设备可以有多个“别名”

尽管不建议正确解析名称。

✅ 应可使用家庭托管 VPN 远程访问设备

DNS服务器以简单的请求-响应方式访问,因此与VPN完全兼容。

❌ 设备应该可以通过连接到工作 VPN 的家庭工作站访问

这不起作用,因为工作站正在使用 VPN 内的 DNS,而该 DNS(显然)没有我的记录docker.local

DNS使用带有自定义家庭专用域的家庭服务器

这应该是“可行的方法”。我已经创建了我的主域(例如,myplace为了避免可疑*.home),并让 DHCP 服务器将此域设置为所有设备。这个想法是为了DNS正确使用服务器。

✅ 设备可以有多个“别名”

謝謝DNS伺服器。

✅ 应可使用家庭托管 VPN 远程访问设备

DNS服务器以简单的请求-响应方式访问,因此与VPN完全兼容。

❌ 设备应该可以通过连接到工作 VPN 的家庭工作站访问

这不起作用,因为工作站正在使用 VPN 内的 DNS,而该 DNS(显然)没有我的记录docker.myplace

使用公共DNS服务器和公共域(目前还只是理论上的)

我也为公共领域付费,就这样吧example.com。这个想法是通过docker.example.com = 192.168.0.17公开记录等方式来解决之前解决方案中的第三个需求DNS

✅ 设备可以有多个“别名”

謝謝DNS伺服器。

✅ 应可使用家庭托管 VPN 远程访问设备

DNS服务器以简单的请求-响应方式访问,因此与VPN完全兼容。

✅ 设备应能从连接到工作 VPN 的家庭工作站访问

由于公共域托管在公共DNS服务器上,因此docker.example.com应该可以从任何地方(如superuser.com域)进行解析。

⚠️然而,这是不安全的:

  1. 我会将我的所有设备名称及其(家庭)IP 地址公开到互联网上
  2. 当从家庭网络之外(在工作场所、咖啡馆等)访问时docker.example.com,我将连接192.168.0.17他们的本地网络。这可能会以不同的方式结束
    • 地址不存在 – 连接失败
    • 地址存在——我将连接到某人的设备,这可能非常危险(例如,对于不安全的连接)

有谁有更好的想法如何做到这一点?

答案1

这不起作用,因为工作站正在使用 VPN 内的作业 DNS,而它(显然)没有我的 docker.myplace 的记录。

如果您的操作系统支持拆分 DNS,则内部家庭 DNS 可以正常工作。例如,使用 Linux 上的 systemd-resolved,有多组 <域,DNS 服务器>(每个网络接口一组),这样您就可以为工作域设置 VPN DNS 服务器,为其他所有域设置家庭 DNS - 反之亦然,为“.home.arpa”设置家庭 DNS,为其他所有域设置 VPN DNS。在 systemd 之前,也可以设置 dnsmasq 或 Unbound 来实现相同的目的。

(不要与“裂脑”或“分视图” DNS 混淆,它们是服务器端的事情。)

Windows 似乎在其 DNS 服务器软件中将此称为“条件转发”,并且可能支持内置 VPN 客户端(IKEv2),尽管企业 VPN 可能不太可能允许它。

我会将我的所有设备名称及其(家庭)IP 地址公开到互联网上

就是它实际上但这是个问题吗?设备名称毕竟只是名称而已 — — 在我看来,它们并不是一个固有的私人事物(尽管我可能对此持有一种有点老派的看法,因为过去这在家庭网络中是很常见的事);而且 IP 地址在家庭 LAN 之外没有任何意义。

不过,您始终可以混合使用这两种方式:docker为需要从 Work Workstation 访问的少数设备使用公共 DNS 名称(可能是通用名称,例如),但对其他所有设备使用内部 DNS。大多数 PC 都可以配置多个域后缀(甚至可以通过 DHCP 部署列表)。

当从家庭网络之外(在工作场所、咖啡馆等)访问 docker.example.com 时,我将连接到他们本地网络中的 192.168.0.17。这可能会以不同的方式结束

IPv6 是解决该问题的常用“解决方案”;随机生成的私有 IPv6 前缀将具有 ~56 个唯一位,这通常足以避免任何冲突。

相关内容