Closed timzaak closed 1 month ago
libp2p 可以基于 PreShare Key 构建私有网络。 但分发 PreShared Key、黑白名单、节点列表就需要 Controller 服务了。 针对私有网络这块,貌似不需要 libp2p,直接 WebRTC 即可。
网络打通后,可搞的事情有:
挂上Tap/Tun
ipfs 就是干这个的
这样可以省略掉 Tap/Tun、Windows Driver,但需要参考 VPN 协议设计,解决数据到底转向哪里的问题。
DDNS、IPv6 也是一种打通方案,需要测试。
最终选择了 ForNetCode/mqtt-exec + sshx 来解决问题。
参考该项目:turn-rs
鉴权
WebRTC 鉴权里,需要依据 用户名、密码 进行Hash。 若是想支持动态密码,就需要 Controller 服务和客户端协商出一个临时密码出来,Relay 去 Controller 服务里查询出临时密码用来做 Hash。 用户名也需要确保唯一。
就近接入
turn-balance 实现了最基本的方案,客户端咨询 Master Balancer 节点情况,Master 返回候选节点(balance + relay),由客户端 ping balance 确认网速,再连接该 balance 上 relay。 PS:没有考虑 relay 负载问题,和一个 balance 下挂多个 relay 的情况。挂上 ip2region 可减少返回 Relay 数量。
限流
目前这个没有实现,不过可以参考 Pingora-limits 来解决此问题。
状态变更
节点的增删需要实时推送,Controller 挂个 mqtt 来解决 就好。
小结
Controller 服务还是要做大量业务逻辑支撑才行的。