请问大家能否通过 upstream 实现物联网设备换 ip

248 天前
 unt
物联网设备中,例如 tcp 和 Mqtt 协议,通常需要将设备指向某个服务器 ip 。

一般是通过串口改 ip 或者指令远程下发改 ip 。请问能否通过 nginx upstream 转发,实现和原生改 ip 一模一样的效果,这样的话在有些测试场景下将有着极大的作用。

我们之前这么操作过很长时间,非常方便稳定!所以可行性是有的。所以想来问下大佬们,有什么需要注意的地方、劣势、以及无法实现的功能。
1261 次点击
所在节点    程序员
10 条回复
BingoXuan
248 天前
如果设备有能力通过 dns 解析域名获得 ip ,那么直接通过 dns 配置就好。

如果没有这样的能力,最好通过物联网网关或者边缘服务器实现。假设无法访问服务器的时候,可以通过边缘服务器缓存数据。
tangtang369
248 天前
物联网设备老老实实的 dhcp 就行了 设置静态 ip 换了路由器不就是个砖头吗 跑现场拆开接串口帮客户看 IP 吗
tangtang369
248 天前
@tangtang369 还是我理解错误只需要改 mqtt 协议的连接地址 如果是这个直接用域名就行了
unt
248 天前
@BingoXuan
@tangtang369 有些厂家的 ip 值类型好像没有开放域名类型。

DNS 域名解析是通讯模组的功能吗,小几十块的通讯模组有这功能吗
IvanLi127
247 天前
op 大概是想测试的环境中搞一个 TCP 代理,nginx 好像可以,至少 ws 的 mqtt 是肯定 ok 的。反正找个 tcp 反向代理就能实现,https://github.com/topics/tcp-proxy
joyanhui
247 天前
nginx stream 可以做到,本身就是反向代理。不过后端在获取客户的 ip 的真实 ip 的需要另外处理,一般使用 Proxy Protocol 协议附加一下。

也可以给物联网设备发送一条消息通知客户请求新服务器,我们是用的消息通知客户端的方式。
因为这样省去 nginx 的开支。而且集群的去中心化更容易做。
cnlnlhb
247 天前
@unt 域名解析几十块钱的模组是有的,之前用过合宙的 2G ,4G 模组和 ESP32 的 wifi 模组,都是可以域名解析的。MQTT 的话,连接地址直接输入域名即可。
如果是模组资源受限,没有 DNS 协议栈,可以加一个兜底逻辑。假设下发 IP 时模组没收到,上一个 IP 又失效了,可以通过兜底服务器 IP (这是个固定不变的)去获取当前最新的服务器 IP ,防止设备失联。
unt
247 天前
如果 nginx stream 能完美转发的话我觉得比域名解析要来的好。然后你说的兜底服务器 ip 我们这边都是有的。我有空的时候写条附言讲一下我们的开发背景
retanoj
246 天前
ngx stream 模块是可以实现 4 层代理功能,问题是当你想切换的时候怎么操作呢?
修改 ngx 配置并重启吗?
huang119412
246 天前
别说现在的 4g ,5g 模块,就算 5 年前的老 2g 模块都支持 dns 。不过好像有所谓的安全域名,这个需要向模块提供商确定一下。而且自己写一个 dns-resolve ,代码不超过 200 行。四层负载均衡,如果不超过 10w 的连接,haproxy 就够了,如果连接数太多,建议使用云服务厂商的四层负载均衡。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1020021

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX