我在以下问题中收到了一些很好的答案:为物联网设备创建自己的个人云需要什么?从那里我了解到的一件事是,我需要将HUB或网关“暴露”于外部互联网。提出的解决方案是端口转发。

我将其创建为一个单独的问题,因为仅凭对所有答案的评论很难进行适当的跟进,否则可能会有些失落。另外,此信息对于有类似问题的人也可能有用。

我不喜欢必须转到路由器配置并配置端口转发的想法,因为这意味着我必须配置尽管是IoT基础设施的一部分,但该设备也不是“我的”设备之一。它必须尽可能减少对现有家庭网络的破坏。另外,在某些情况下,我不知道特定路由器的管理员密码,而且确实很难获得它。

我敢肯定甚至有办法解决如果那意味着拥有可能运行Linux的更强大的IoT HUB,我只是不知道那是什么。如果“替代”方式可以避免端口转发配置,则可以使用更复杂的HUB。

我敢肯定,有一种方法可以考虑像Team Viewer这样的应用程序不需要配置端口转发。

所以问题是,是否有人知道将IoT嵌入式设备“公开”到外部Internet以便从世界上任何地方访问它的方法。不涉及端口转发?

#1 楼

如果无法通过端口转发路由器,则可能必须使用打孔:


打孔是计算机网络中的一种技术,用于在两方之间建立直接连接。或两者都位于使用网络地址转换(NAT)的防火墙之后或路由器之后。为了解决这个问题,每个客户端都连接到不受限制的第三方服务器,该服务器临时存储每个客户端的内部和外部地址以及端口信息。然后,服务器将每个客户端的信息中继到另一个客户端,并使用该信息尝试建立直接连接;由于使用有效的端口号进行连接,因此,限制性防火墙或路由器会在每侧接收并转发传入的数据包。


路由器上的NAT意味着网络外部的客户端可以不会连接到网络内部设备的开放端口,但不会限制网络中的设备连接到“代理”。使用一点间接,您可以在两个设备之间建立直接连接,而无需实际打开任何端口-本质上就是Skype和Hamachi之类的服务。

当然,这确实需要外部服务器协调连接,您可能希望信任执行打孔的服务器。

跨网络地址转换器的对等通信,作者Bryan Ford,Pyda Srisuresh和Dan Kegel是一本有趣的文章,提供有关打孔机制及其可靠性的更多信息。

评论


精彩!但是,有一个问题,那个第三方服务器或“经纪人”也可以在我家里面吗?并且例如是嵌入式Linux板?因为否则,这种方法将带来更大的问题,即在物联网部署中要包含外部第三方元素。如果嵌入式Linux板不能做到这一点,那将是什么?

– m4l490n
17-2-23在20:27

@ m4l490n:它必须以某种方式位于您的网络之外。我想它可能是某个地方的云服务器,或者如果端口被转发,则可以使用Linux板。只有当您的服务器/设备可以在Internet上的某个地方公开访问时,UDP打孔才有效。这不是理想的选择,但是您无法绕开一个事实,即必须在Internet上公开某些内容才能进行连接。我怀疑您家庭网络中的嵌入式Linux板将无法提供任何优势。您只需要移植它,而不用移植您的物联网设备。

–Aurora0001♦
17-2-23在20:32

优秀的!即使这不是您回答的直接意图,也不是我提出问题的初衷,但我终于了解了云服务器在物联网基础架构中的作用!

– m4l490n
17-2-23在20:46

据我了解,漏洞是虚拟的,不像端口转发中的路由器状态被修改。链接的每一端仅与服务器通信?我相信这将是物联网的典型模型,因为通用网络是多对多的?

– Sean Houlihane
17年2月24日在8:06

#2 楼

在物联网世界中,设备的资源不足,无法处理来自外部连接的不必要流量,当然,由于需要处理路由器的任何端口转发和防火墙问题,导致以下方法可以在许多物联网后端解决方案中看到:

设备将不接受任何未经请求的网络信息。设备将以仅出站方式建立所有连接和路由。
因此设备将打开出站连接,因此无需进行防火墙/路由器调整,只要需要就可以保持通道打开。

关于物联网世界中的通信问题和解决方案。

评论


对于MQTT,设备是客户端(发布者或订阅者或两者),并启动与代理(服务器)的连接。

–Gambit支持
17年1月1日在16:53

“设备的资源不足,无法处理来自出站连接的不必要的流量”那根本没有意义。出站连接只能在网络内部启动。

–克里斯·斯特拉顿(Chris Stratton)
17年12月19日在2:28

@ChrisStratton,如果正在使用NAT,则可以使用端口转发将出站连接直接定向到设备。他们也可以有自己的IP,可以直接从Internet访问。

– shachar
17年12月19日在13:43

您似乎误解了“出站”一词的含义,并错误地将其实际用于“入站”。出站连接是连接到云服务器的物联网设备。入站连接是您的家庭网络外部的东西(例如,当您走在街上时您的电话),试图连接到网络内部的设备。

–克里斯·斯特拉顿(Chris Stratton)
17/12/19在16:54



@ChrisStratton,您是对的,当我写出站时,我的意思是来自外部的流量,该流量基本上是传感器的“入站”连接。我已经修改了答案,谢谢

– shachar
17年12月20日在9:31



#3 楼

尝试敲门。您仍然必须向前转发端口,但是只有在您发送ping的秘密组合(您选择)后,端口才打开。然后,您可以使用另一个秘密的ping组合关闭端口。它可以在嵌入式Linux上运行,例如带有OpenWrt的wifi路由器。

#4 楼

虽然我不建议您允许从公共Internet访问任何IoT设备,但是可以使用IPv6在本地实现此目的。他们可以自动获取可从Internet上任何地方路由的IPv6地址(IPv6消除了对NAT和端口转发的需要)。您只需要确保将所有状态防火墙(您的路由器)配置为允许通信到每个设备。有些可能默认情况下(不安全)允许这样做。

#5 楼

在家里设置一个VPN服务器,然后从任何地方连接到它。
我认为,这比将任何类型的IoT设备暴露于开放Internet都更加安全。

评论


这不只是某种网关吗?

– Helmar♦
17年12月30日在19:55

嗯? VPN是设备与网络之间的点对点(通常是加密的)连接。它使连接设备就像是网络的一部分一样工作。我想您可以将其视为网关...但这是一项服务。

–莫里斯
17年12月31日在5:44

可以,但是该服务仍必须通过家庭路由器(通常通过端口转发或不间断出站连接)。

– Helmar♦
17年12月31日在10:15

是的,您仍然需要将正在运行VPN的端口进行端口转发。但是它比公开单个设备更安全(可能会不太方便,具体取决于您要实现的目标)

–莫里斯
18年1月1日在7:21