将IoT设备暴露于外部Internet时如何避免端口转发?


15

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

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

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

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

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

所以问题是,是否有人知道将IoT嵌入式设备“暴露”给外部互联网以便从世界上任何不涉及端口转发的地方访问它的方法?

Answers:


10

如果您无法通过端口转发路由器,则可能需要打孔

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

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

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

Bryan Ford,Pyda Srisuresh和Dan Kegel撰写的跨网络地址转换器的对等通信非常有趣,可以获取有关打孔机制及其可靠性的更多信息。


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

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

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

据我了解,这个漏洞是虚拟的,不像端口转发中的路由器状态被修改。链路的每一端只与服务器进行通信?我相信这将是物联网的典型模型,因为通用网络是多对多的?
肖恩·霍利哈内

7

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

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

一个很好的文章有关在物联网世界的沟通问题和解决方案。


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

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

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

你似乎使用它哪里是什么,你实际上意味着是“入境”被误解了这个词的含义“出站”,并错误。出站连接是连接到云服务器的物联网设备。入站连接是您的家庭网络外部的东西(例如,当您走在街上时您的电话),试图连接到网络内部的设备。
克里斯·斯特拉顿

@ChrisStratton,您是正确的,当我写出站时,我的意思是来自外部的流量,这基本上是传感器的“入站”连接。我已经编辑了答案,谢谢
shachar

3

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


3

虽然我不建议您允许从公共Internet访问任何IoT设备,但是您可以使用IPv6本地实现。

如果您的ISP和本地网络配置了IPv6,并且您的IoT设备支持它,则它们可以自动获取可从Internet上任何地方路由的IPv6地址(IPv6消除了对NAT和端口转发的需要)。您只需要确保将所有状态防火墙(您的路由器)配置为允许通信到每个设备。有些可能默认情况下(不安全)允许这样做。


2

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


是不是只是某种网关?
Helmar

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

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

是的,你仍然需要端口转发VPN上运行的端口。但它比暴露个人设备(THO可能不太方便,这取决于你想要达到的)更安全
莫里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.