我家里有很多网络设备,我希望能够以人性化的方式在网络上访问它们。我不希望这些设备可以直接通过互联网访问。
我的需求:
- 设备可以有多个“别名”
backup
- 例如,它应该可以通过、docker
或nas
名称 访问- 因为我在一台设备上运行多个服务,并且想区分它们,可以选择将它们移动到另一台设备
- 应可使用家庭托管 VPN 远程访问设备
- 因为我想访问我的 NAS 并能够从远程位置运行备份
- 设备应可从连接到工作 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
域)进行解析。
⚠️然而,这是不安全的:
- 我会将我的所有设备名称及其(家庭)IP 地址公开到互联网上
- 当从家庭网络之外(在工作场所、咖啡馆等)访问时
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 个唯一位,这通常足以避免任何冲突。