五分钟技术趣谈 | MQTT设备接入时获取真实IP地址的解决方案

2023-08-01
关注

Part 01

● 需求背景 ●

在OneNET平台某私有化项目中,项目方的需求是要获取设备真实IP地址,然后根据设备的IP来统计处于各个省内区域的设备数量展示到大屏上。

Part 02

● 查找解决方案 ●

以MQTT设备接入为例,由于项目方使用的外层负载是Nginx软负载,并且MQTT协议是基于TCP,只能走4层方式转发报文,Nginx转发报文的时候会将源TCP连接的IP地址改写为自己的内网IP地址,不能像F5这种硬负载可以直接将设备的源地址转发到后端服务上,因此就不能直接通过配置Nginx的方式来让MQTT接入服务获取到设备源IP地址,也就不能实现项目方的需求。

经过网上查询相关解决方案,发现一个Internet协议叫做proxy protocl(参考资料:https://www.jianshu.com/p/cc8d592582c9),该协议可以通过为TCP包添加一个很小的头信息,来传递客户端信息(协议栈、源IP、目的IP、源端口、目的端口等),在网络情况复杂又需要获取用户真实IP时非常有用。其本质是在三次握手结束后由代理在连接中插入了一个携带了原始连接四元组信息的数据包。

proxy protocol协议流程

查阅到proxy protocol报文的格式如下图中所示,里面包含了客户端的源地址和端口等信息,能够满足我们的需求。

proxy protocol报文格式

后端服务要获取这个特殊报文也需要在Nginx上配置开启proxy_protocol协议,如下图中所示。

Nginx上配置开启proxy_protocol协议

通过wireshark工具抓包我们也发现包结构和查阅到的资料是一致的,接下来我们要做的就是在MQTT协议解析的时候把这个特殊的包也要解析处理并保存这个客户端的真实IP。

Wireshark抓proxy_protocol协议包

Part 03

● 实践操作 ●

说干就干,我们修改MQTT接入服务的源代码是基于Netty框架实现的,于是我们在编解码的时候增加了真实IP解码器,如下图所示。

真实IP解码器

随后我们在解码器的decode方法中,将原始报文解析出来,判断是否有proxy protocol报文,然后解析报文并提取里面的设备真实源IP地址和端口,并将之保持在Netty中的ChannelAttribute上下文中,方便后续获取。

注意,这里的proxy protocol报文和MQTT协议中的报文是粘包在一起的,所以我们需要提取源地址后将剩余的MQTT协议包分离处理交给后续的MQTT协议解码器进行处理,这就是整体处理流程。

真实IP解码器源码

Part 04

● 测试认证 ●

重新打包部署服务后,我们根据日志看到通过Nginx负载方式能够正常获取到测试设备的源IP信息,满足需求。

对于4层的UDP协议获取设备源IP也可以参考本方案解决。

您觉得本篇内容如何
评分

相关产品

Honeywell 霍尼韦尔智能工业 在线/便携烟气分析仪专用传感器 气体传感器

CO 传感器;SO2传感器;NO2 传感器;NO传感器;氧气传感器

微著科技 高性能传感器ASIC解决方案 MEMS传感器

微著科技是国内为数不多能够给传感器厂商提供定制高性能传感器解决方案的团队,目前已为国内众多院所及知名传感器公司提供了十余个传感器解决方案并已经实现量产。微著传感器ASIC方案的特点:成熟的仪表信号模块IP易于快速搭建;系统方案超低噪声;成熟的24ADC可同时实现模拟数字传感器方案设计;高效率及丰富的方案设计经验。

南方泰科 TGM 压力传感器

TGM是一款SOP8封装的压阻式MEMS压力传感器,其压力传感器芯片封装在 SOP8 塑封壳内。在传感器压力量程内,当用固定电压供电时,传感器产生毫伏输出电压,正比于输入压力。压力传感器芯片为绝压,可提供不同的压力量程的SOP8 压力传感器。

鑫精诚传感器 XJC-T001 压力传感器

◆传感器激光焊接密封,环境适应性较强 ◆球形联接件,始终保持模块的垂直称重状态 ◆支撑螺栓,防止设备倾覆且方便维护 ◆接地装置,保护传感器免受电源浪涌冲击 ◆过载保护装置,保护传感器免受冲击力

Huba Control 富巴 525系列 压力传感器

525系列压力传感器采用集公司20多年研发经验的陶瓷压力传感器芯片技术。该系列压力传感器可选压力范围大,电气连接形式多。最小量程为50mbar。大批量使用具有很好的性价比。

佰测传感 MS71 传感器

MS71差压传感器

Cubic 四方光电 PM3009BP 室外粉尘传感器

PM3009BP是一款专门针对餐饮油烟监测的油烟传感器,其采用旁流采样方式,自带除水雾装置,结合智能颗粒物识别算法,确保传感器能够快速准确的检测油烟浓度的变化,同时创新的镜头自清洁技术的应用,能够长效防护传感器油烟污染,大幅度延长传感器的使用寿命。

评论

您需要登录才可以回复|注册

提交评论

广告

物联网智库

这家伙很懒,什么描述也没留下

关注

点击进入下一篇

OpenAI的成功,为什么难以复制?

提取码
复制提取码
点击跳转至百度网盘