我家里有一台 Raspberry Pi,它连接到多个传感器。它有一个随机 IP 地址,出于多种原因,我无法更改它。目前,为了连接它,我让它每小时发送一封包含其 IP 地址的电子邮件,并使用最后一封电子邮件来了解连接位置(我知道,这不是很高科技……)
我希望能够从外部世界连接到此 Pi,而无需配置路由器。这个想法是 Pi 启动通信线路,并使用该线路与其通信。我希望能够通过 SSH 连接到它及其 Web 服务器。
我可以想到两种方法:
Pi 与互联网上的服务器创建 SSH 隧道/VPN。然后我连接到该服务器以连接到 Pi。有人提供这样的服务吗?
我配置了一个特定的设备作为 Pi 的“控制器”设备;我为我的电脑或手机设置了一个 NoIP 名称,然后让 Pi 努力与该手机/电脑建立 VPN 连接。我不确定这是否真的可行……是吗?
或者,有没有更简洁、更简单的方法来实现这一点?
答案1
Pi 与互联网上的服务器创建 SSH 隧道/VPN。然后我连接到该服务器以连接到 Pi。有人提供这样的服务吗?
有数百提供廉价虚拟服务器托管的公司;您可以每月花费几美元获得一个 VPS,并将其用作 SSH 的中心点或个人 VPN 服务器。
(对于仅 SSH 和典型的 VPN 软件,即使最便宜的“OpenVZ 容器”VPS-if-you-squint 也可以,尽管我宁愿总体上避免使用 OpenVZ - KVM/Xen 计划更昂贵但也更灵活,因为您可以获得一整个 VM。)
在这样的服务器上设置 VPN(例如 OpenVPN 或 WireGuard,甚至是 SSH 隧道)并将 Pi 和手机连接到它之后,它们在功能上就在同一个(虚拟)网络上,并且可以通过隧道相互访问——无需执行任何特殊操作即可使其工作。
一种常见的选择是“网状 VPN”,它完全专注于设备访问,而不是通过中继的中央服务器全部数据,网状 VPN 有一个中央控制器,它只是帮助设备以某种方式直接相互联系(充当一个交汇点,类似于游戏或 VoIP 应用程序在服务器的帮助下建立直接连接的方式)。在这种情况下,您可能会寻找一个可以免费访问“云”控制器的控制器(例如 Tailscale 或 ZeroTier 或其他控制器)。
虽然商业 VPN 提供商通常专注于互联网出口,但我相信其中一些提供商也提供允许连接到您自己的设备的功能,只要它们都连接到同一个帐户(至少有一个 VPN 提供商直接称之为“网状网络”模式)。
我配置了一个特定的设备作为 Pi 的“控制器”设备;我为我的电脑或手机设置了一个 NoIP 名称,然后让 Pi 努力与该手机/电脑建立 VPN 连接。我不确定这是否真的可行……是吗?
对于典型的客户端-服务器 VPN,这实际上是不可行的,因为您的手机/计算机很可能与 Pi 一样位于 NAT 后面。
拥有域名(“NoIP 名称”实际上只不过是一个自动更新的 DNS 条目)只能告诉你设备在哪里,但并不能让你知道它在哪里可达– 毕竟,如果确实如此,您也可以将该名称直接指向所讨论的 Pi。
因此,为了使此选项可靠地工作,您真的希望“控制器”是某个数据中心上适当的可公开访问的服务器。
还有其他一些选择。
有一些服务专门提供隧道访问您的内部HTTP服务。(概念仍然和你描述的一样——Pi 创建到中央服务器的隧道,隧道将请求搭载回 Pi,但它不中继 IP,而是中继 HTTP。)一个例子是 Ngrok,我思考前面提到的Tailscale也增加了这样的功能?
我自己的家庭服务器运行 Syncthing,并且我有一个 cronjob,它监视新文件,~/Sync/$HOSTNAME-*.sh
并在它们出现时立即运行它们,将输出保存在 中~/Sync/$HOSTNAME-*.log
,从而形成了一个有点 UUCP 风格的“批处理作业提交”系统,即使我的内部 VPN 不再起作用,它仍然可以工作。(我在其他电脑上也有同样的系统,因为它很有用。)