我们是一家小型初创公司,我们的基本要求之一是为经常使用没有公共 IP 地址的互联网连接的客户启用对我们核心系统(在基本 Linux 发行版上运行)的云访问。Homekit 运行基本 Linux 发行版是否有开源软件包可以让位于私有 IP 后面的设备连接到云服务器,而云服务器根据令牌将每个传入请求的请求路由到特定设备
好的,让我重新表述一下这个问题我需要做的是让我的客户能够访问在家里的嵌入式设备上运行的小型网络服务器(以最简单的方式)他们将访问这个网络服务器(在端口 80 或我可以配置的任何自定义端口上运行)
他们家里的互联网连接可能有公共 IP,也可能没有。此外,我不能要求他们摆弄端口转发等
要求他们在访问此网络服务器之前打开 VPN 连接将彻底破坏用户友好性
一种可能的解决方案是,由于预计客户端基数较小,我可以将每个 Web 服务器配置为使用唯一的端口号(例如 3400-3500),然后使用我自己的专用服务器作为代理(例如,端口 3400 上的请求被路由到客户端 1,端口 3401 上的请求被路由到客户端 2,依此类推)
问题:不太优雅,还需要弄清楚如何让他们的家庭服务器以某种方式连接到我的专用服务器
答案1
任何 VPN 解决方案都可以。从客户端连接到服务器(到云)的 OpenVPN 将是不错的解决方案,您可以轻松调整加密级别等。当然,如果您愿意,您还可以过滤连接到云的用户。只是不要忘记在服务器端阻止客户端间流量!
由于您能够与客户端沟通,因此您可以自由使用和路由请求。
PS 不知道 OpenVPN 是否适合您的设置和硬件限制。
答案2
一个完整的解决方案不需要客户操作并且使用最少的移动部件,需要反向连接和连接代理。
您可以反转连接端,让那些“homekit”或“家庭服务器”改为回拨您的服务器。这称为反向隧道,可用于绕过防火墙和动态 IP;对于数量较少的服务器,可以使用现成的开源 SSH 来实现。
如果你想知道 SSH 隧道是如何工作的,我推荐https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work。
一旦这些家庭服务器连接起来,就将其内部网络 IP(这里需要一些自定义粘合代码,以及某种方式来确保不受信任的客户端不会互相干扰)传输到连接代理(您的门户)并提供其内部 IP(希望只有他们可以访问)。
答案3
我仍在努力理解您的问题,但这听起来与物联网用例非常相似。 Azure 有一个物联网中心,允许您的设备从远程位置发送和接收命令。 连接是在客户端发起的,因此防火墙和 NAT 不会中断连接。 这可能会解决您的问题,但是您需要将客户端设备从 Web 服务器更改为监听中心的应用程序,然后在云端提供接口。
https://azure.microsoft.com/en-us/services/iot-hub/
我是一名 MS 员工,这就是为什么要回答 Azure 的问题。这是我所知道的。