这个栏目里,主要记录frpee在发展过程中的一些有意思的事情和开发运营心得,希望对也在做独立软件开发的你有帮助!
概述
在2023-11-27日这天,收到了跨境信息传输的封控提示,大概是说,frp节点作为跳板机,将国内数据传输至境外。是一个很严肃且很严重的问题,完全引起了我的高度重视
问题分析
面对出现的这个问题,可以说在开发和规划阶段完全没有考虑到的,甚至压根都没有想到会有这种问题。
经过分析后,也很快的有了解决方案, 具体思路是当有 境外ip地址进行连接frp节点服务时候,直接进行阻断,从根源上禁止境外连接
技术实现
这里使用了百度的ip查询接口,通过ip可以获取该ip的省市区域信息,可以判断出是国内ip还是境外ip
https://qifu-api.baidubce.com/ip/geo/v1/district?ip=124.237.176.106
{
"code": "Success",
"data": {
"continent": "亚洲",
"country": "中国",
"zipcode": "071000",
"owner": "中国电信",
"isp": "中国电信",
"adcode": "130600",
"prov": "河北省",
"city": "保定市",
"district": ""
},
"ip": "124.237.176.106"
}
踩过的坑
根据ip检测境外连接思路是没问题的(但考虑不周全,给日后也埋下了不少伏笔)
在实际过程中,bug频出, 由于是通过http请求在线调用百度ip接口,时常会导致将国内的ip判定为境外ip,导致许多国内用户无法正常连接使用,可以说是一个很大的生产事故了
当时对百度接口请求回来的ip信息也有做缓存处理,这个缓存策略太垃圾也不能起到实时的境外ip检测效果
无奈,最终使用离线的ip库进行ip信息查询,离线没结果时候通过百度ip接口辅助查询
这样通过很长一段时间,反复检测,日志排查,最终是确定了这个方案的可靠性
心得
对于做独立软件开发的朋友,如果有同类型的产品,一定要注意和考虑境外连接与数据安全的问题,以免造成生产环境中的事故,对用户使用造成影响。用户的使用场景是千奇百怪的,有些问题尽量通过技术手段进行规避