我有一台 TP-LINK TL-MR6400 路由器,通过 LTE SIM 连接到互联网。
这是我当前情况的粗略网络图。1
我的 IoT 服务位于 TL-MR6400 后面。
不幸的是,我的移动提供商正在从我的路由器对外部动态 IP 地址进行 NAT,因此我无法公开我的 MQTT 服务器和摄像头,当然,从 PC 上网不是问题。
我发现可以通过创建具有固定 IP 地址服务器的 VPN 隧道来克服这种情况。因此,我使用具有静态 IP 地址的 Google Cloud Platform (GCP) 创建了一个微实例。
在我看来,VPN 客户端应该调用 GCP VPN 服务器并创建隧道。此时,服务器防火墙规则应将 MQTT 和网络摄像头地址和端口转发到不同端口上的静态 IP 地址,以便使用专用应用程序控制我的 MQTT 主题或通过 ssh 访问远程服务器。
云 MQTT 服务不是一种选择,因为它需要始终处于打开状态,与互联网的可用性无关。业务逻辑与 MQTT 托管在同一个 RPi 上,并且它不断与本地网络上的传感器和执行器进行对话。
如果网络断线,我无法远程控制,但后备程序仍可在本地运行。
也许你可以推荐:
- 不同的 4G LTE 路由器
- 在 MR6400 支持的 GCP 服务器上安装不同的协议
- TL-MR6400 上的不同固件(如 OPENWRT)
答案1
您尝试实现的解决方案很好,但请记住,该解决方法可能会增加您的带宽和延迟。
顺便说一句,我偏向于 OpenWRT,但该固件需要一定程度的专业知识和经验才能设置这种环境(或花费大量空闲时间并进行大量专注和互联网调查)。
第一种情况。
您可以拥有一个 GCE 实例(带有 IP 转发)和一个本地 VM 或服务器,以在彼此之间创建一个 OpenVPN 隧道,为您的 GCP 项目和本地 TP-Link 创建静态路由,然后为您想要向世界公开的每个端口添加以下 iptable 规则,如下所示。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.128.0.50:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 10.128.0.50 --dport 80 -j SNAT --to-source 10.128.0.100
如果您不想在这里使用 NAT,则需要更改此项。
第二种情况。
几乎是第一种情况,但在您的 TP-Link 上使用 OpenWRT,而不是在本地 VM 或服务器上。
这是一个视频解释如何配置 OpenVPN 服务器