文章摘要
文章介绍了作者通过逆向工程分析UniFi设备的inform协议,发现虽然数据负载经过AES加密,但协议头部是明文,这为构建多租户路由提供了可能。作者曾运营UniFi托管服务,但因经济性问题难以持续。
文章总结
逆向工程UniFi inform协议——Tamarack的探索之路
背景与挑战
作者曾运营UniFi控制器托管服务,为不愿自建控制器的客户提供云服务。虽然产品需求旺盛,但经济模型存在问题:每位客户需要独立VPS,导致单客户利润仅1-2美元/月,难以持续运营。
关键发现:inform协议结构
UniFi设备通过8080端口定期(每10秒)向控制器发送HTTP POST请求(inform协议)。数据包具有以下特征: 1. 头部明文:前40字节未加密,包含关键信息 2. 加密部分:采用AES-128-CBC加密的payload
数据包头部结构(关键字段):
| 偏移量 | 长度 | 说明 | |--------|------|------| | 0 | 4B | 魔数"TNBU"(UBNT倒写) | | 8 | 6B | 设备MAC地址(明文) | | 18 | 16B | AES初始化向量 |
技术突破
通过分析发现: - 设备MAC地址在加密前即可读取(字节8-13) - 控制器需要MAC地址来查找对应设备的解密密钥 - 这一设计使得无需解密即可实现流量路由
实现方案
作者开发了约200行Go代码的代理服务: 1. 读取数据包前14字节提取MAC地址 2. 通过MAC-租户映射表路由流量 3. 完整转发原始数据包(保持加密状态)
text
设备 → 代理(MAC识别) → 对应租户控制器
其他端口处理
| 端口 | 协议 | 处理方式 | |-------|--------|-------------------------| | 8443 | HTTPS | 子域名反向代理 | | 3478 | STUN | 共享coturn实例 | | 其他 | | 容器内部或L2层隔离 |
商业价值
该方案使得: - 共享基础设施成为可能 - 单客户成本从4-6美元降至近乎零 - 利润率从1-2美元提升至可盈利水平
设计启示
Ubiquiti将MAC置于明文的初衷是功能性需求(解密前识别设备),却意外为第三方多租户路由创造了条件。这种"无心插柳"的设计展现了协议逆向工程的价值。
本文揭示了通过分析网络协议实现商业模型创新的典型案例,展示了技术细节与商业价值的深度结合。
评论总结
以下是评论内容的总结:
关于TNBU拼写错误的讨论
- devmor指出"TNBU"是"UBNT"(UniFi Broadcast Technology)的反写错误,并调侃作者可能有阅读障碍。
- 引用:"TNBU is UNBT backwards" / "You might have a bit of dyslexia"
界面可读性问题
- voidUpdate反映在深色模式下难以阅读代码块中的文字。
- 引用:"some of the text is practically invisible" / "cannot read most of the text"
UniFi摄像头协议逆向工程
- scottlamb希望逆向工程UniFi摄像头的适配协议,以替代官方NVR设备。
- 引用:"has anyone reverse-engineered the UniFi camera adoption protocol?" / "They seem to be about the only option for a reasonably priced...camera"
开源AP控制器需求
- mrweasel希望有一个能管理多厂商AP的开源控制器。
- 引用:"want an open source access point controller" / "provision Ubiquity, MikroTik, TPLink and other APs"
技术问题讨论
- ctippett提到NextDNS屏蔽新注册域名,并询问MongoDB迁移到FerretDB的经验。
- 引用:"NextDNS blocked it for being newly registered" / "has anyone had success migrating from MongoDB"
设备适配方法质疑
- CptKriechstrom质疑为何需要嗅探数据包而不是直接通过SSH设置。
- 引用:"How do you adopt the device" / "couldn't you just route the request"
资源占用批评
- opengrass批评控制器内存占用过高,特别是对EOL设备支持差。
- 引用:"Controller uses way to much RAM" / "good luck if a device is EOL"
多租户方案建议
- bxbdbehdbdb建议使用多VM方案替代数据包嗅探。
- 引用:"Wouldn't it be simpler to just run multiple VMs"
DNS管理创新想法
- cheriot提出通过DNS管理客户端的创新方案。
- 引用:"control routing client side" / "manage DNS for customers"
总结呈现了从拼写纠错到技术方案讨论的多角度观点,包括对现有产品的批评和改进建议,以及不同技术实现方式的讨论。