V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
unt
V2EX  ›  程序员

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

  •  
  •   unt · 298 天前 via iPhone · 1309 次点击
    这是一个创建于 298 天前的主题,其中的信息可能已经有所发展或是发生改变。
    物联网设备中,例如 tcp 和 Mqtt 协议,通常需要将设备指向某个服务器 ip 。

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

    我们之前这么操作过很长时间,非常方便稳定!所以可行性是有的。所以想来问下大佬们,有什么需要注意的地方、劣势、以及无法实现的功能。
    10 条回复    2024-03-04 15:11:29 +08:00
    BingoXuan
        1
    BingoXuan  
       298 天前
    如果设备有能力通过 dns 解析域名获得 ip ,那么直接通过 dns 配置就好。

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

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

    也可以给物联网设备发送一条消息通知客户请求新服务器,我们是用的消息通知客户端的方式。
    因为这样省去 nginx 的开支。而且集群的去中心化更容易做。
    cnlnlhb
        7
    cnlnlhb  
       297 天前
    @unt 域名解析几十块钱的模组是有的,之前用过合宙的 2G ,4G 模组和 ESP32 的 wifi 模组,都是可以域名解析的。MQTT 的话,连接地址直接输入域名即可。
    如果是模组资源受限,没有 DNS 协议栈,可以加一个兜底逻辑。假设下发 IP 时模组没收到,上一个 IP 又失效了,可以通过兜底服务器 IP (这是个固定不变的)去获取当前最新的服务器 IP ,防止设备失联。
    unt
        8
    unt  
    OP
       297 天前 via iPhone
    如果 nginx stream 能完美转发的话我觉得比域名解析要来的好。然后你说的兜底服务器 ip 我们这边都是有的。我有空的时候写条附言讲一下我们的开发背景
    retanoj
        9
    retanoj  
       296 天前
    ngx stream 模块是可以实现 4 层代理功能,问题是当你想切换的时候怎么操作呢?
    修改 ngx 配置并重启吗?
    huang119412
        10
    huang119412  
       296 天前
    别说现在的 4g ,5g 模块,就算 5 年前的老 2g 模块都支持 dns 。不过好像有所谓的安全域名,这个需要向模块提供商确定一下。而且自己写一个 dns-resolve ,代码不超过 200 行。四层负载均衡,如果不超过 10w 的连接,haproxy 就够了,如果连接数太多,建议使用云服务厂商的四层负载均衡。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1062 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:44 · PVG 06:44 · LAX 14:44 · JFK 17:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.