阿里云反向代理服务-设计及实现报告文档
一、技术需求产生背景
限于TCP/IP协议中IP寻址协议限制,未映射到公共网络的网络设备,其它网络设备无法穿透公有网络对其进行访问。
如需对其访问,需要经过其它公网设备对其流量数据进行转发或代理。
二、业务实施需求
1、支撑“易过磅”项目,映射非公共网络服务到中央节点
- 提供“易过磅”项目HTTP、Websocket两种协议的流量映射
2、其它客户端映射业务,提供子节点数据主动感知技术支撑
- 提供映射扩展,允许后续其它非公网节点通过反向代理服务向公共网络提供业务支撑
三、技术选型
方案比较:
NETTY:
Netty 是 “一个异步事件驱动的网络应用程序框架”,用于快速开发可维护的高性能协议服务器和客户端。
FRP:
frp 采用 C/S 模式,将服务端部署在具有公网 IP 的机器上。 客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。
NETTY | FRP | |
---|---|---|
是否需要二次开发 | 是 | 否 |
部署难度 | 简单 | 简单 |
业务匹配度 | 需要二次开发 | 匹配 |
可用性 | 需要开发、测试匹配业务 | 官方参考资料完整,已经市面大量业务实战检验 |
综上
本次我们将选用FRP作为反向代理中间件以探索支撑反向代理业务
四、FRP代理示意图
FRP代理示意图
项目应用代理路径示意图
五、FRP代理配置
服务器配置
测试使用FRP版本:V0.43.0
1、容载业务及实际配置设计
- 服务器端口设计容载数:50
- 依据业务从小到大开放映射范围:[9100-9150)
- FRP服务搭载端口:9190
- FRP管理WEB界面搭载端口:9191
- 客户端默认映射端口:8893 --> 申请的服务端口
2、云服务配置说明
-
服务器中间件软件包
- frp_0.43.0_linux_amd64.rar
-
配置文件:frps.ini
-
[common] # 云主的内网IP bind-addr = x.x.x.x # 与客户端绑定端口 bind_port = port # dashboard 用户名 dashboard_user = xxusername # dashboard 密码 dashboard_pwd = xxpasswd # dashboard 绑定的端口,启动成功后通过浏览器IP+端口访问 dashboard_port = dashport # 设置客户端token token = 8n262f2b-6daa-4g8d-85ee-8ad3d1x4uiy7
-
-
启动命令
- ./frps -c ./frps.ini
-
注意事项:
- 每个代理会占用一个服务器端口,配置本地代理服务时,需确保对应服务端口可用
3、windows客户端配置说明
-
客户端代理中间件软件包
- frp_0.43.0_windows_amd64.rar
-
配置示例文件:frpc.ini
-
[common] # 服务器IP 地址 server_addr = xx.xx.xx.xx # 服务器端口号 server_port = 7000 # 链接服务所需token token = 8n262f2b-6daa-4g8d-85ee-8ad3d1x4uiy7 # 连接池数量 pool_count = 5 # 代理名 [laptop88935] # tcp 代理 type = tcp # 本地IP地址 local_ip = 127.0.0.1 # 本地映射端口 local_port = 8893 # 代理端口 remote_port = 8895
-
-
启动命令
- ./frpc -c ./frpc.ini
4、FRP参考资料
- 开源地址
- https://github.com/fatedier/frp
- 官方地址
- https://gofrp.org/
- 部署参考资料
- http://app.myzaker.com/news/article.php?pk=60ec675d8e9f094f4554b4b8