FRP与Goedge对接https应用实现真实IP穿透
免责申明
资源大部分来源于网络,资源仅供学习和交流使用,严禁商用,软件类均亲测可用!如有侵权请联系我们删除!
frp
FRP是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持TCP、UDP、HTTP、HTTPS等协议。它通过服务端和客户端的配合使用,能够实现内网服务的公网访问。服务端通常部署在具有公网IP的机器上,而客户端则部署在需要穿透的内网服务所在的机器上。用户可以通过访问服务端的frps,由frp根据请求的端口或其他信息将请求路由到相应的内网机器,实现通信[1][2][3]。
FRP的工作原理是服务端运行并监听一个主端口,等待客户端的连接;客户端连接到服务端的主端口,并告诉服务端要监听的端口和转发类型;服务端fork新的进程监听客户端指定的端口;外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力[1]。
FRP支持多种代理类型,包括TCP、UDP、HTTP、HTTPS、STCP、SUDP、XTCP和TCPMUX,以适应不同的使用场景[3]。配置文件从v0.52.0版本开始支持TOML、YAML和JSON格式,INI格式已被弃用[5]。用户可以根据自己的需求选择合适的代理类型来配置FRP,实现内网服务的公网访问。
Goedge
GoEdge 是一款开源工具软件,主要用于帮助用户快速构建 CDN(内容分发网络)和 WAF(Web 应用防火墙)平台。它支持多种协议,包括 HTTP、HTTPS、Websocket、TCP、TLS、UDP、PROXY Protocol、IPv6 和 WAF,同时支持多个第三方 DNS 服务 [3]。GoEdge 通过提供完整的管理界面、简化的安装过程、完整的解决方案、易于集成和二次开发等优势,帮助用户轻松管理和扩展其 CDN 边缘节点 [2]。
此外,GoEdge 还具备高性能的特点,其客户在生产环境中单节点出口带宽峰值可达 17Gbps,缓存文件数量高达 1亿,缓存内容高达 20T [3]。最新版本 GoEdge v1.3.4 增强了安全性和单体应用的功能,提供了更多的优化和改进 [4]。而 GoEdge CDN v1.3.0 版本则引入了人机识别和自定义页面的强化功能,进一步提升了 CDN 平台的性能和灵活性 [5]。
以上是AI智能检索结果,如有侵权请联系我们删除!
Goedge 开启https
- 这里https可用自身的免费证书申请即可
- 端口443即可无需修改其他
【重点】FRP配置https,只需客户端配置即可,无需服务端配置
官方frp配置说明
- HTTP X-Forwarded-For
目前只有 http 类型的代理或者启用了 https2http 或 https2https 插件的代理支持这一功能。
可以通过 HTTP/HTTPS 请求 header 中的 X-Forwarded-For 来获取用户真实 IP,默认启用。 - Proxy Protocol
frp 支持通过 Proxy Protocol 协议来传递经过 frp 代理的请求的真实 IP,此功能支持所有以 TCP 为底层协议的类型,不支持 UDP。
Proxy Protocol 功能启用后,frpc 在和本地服务建立连接后,会先发送一段 Proxy Protocol 的协议内容给本地服务,本地服务通过解析这一内容可以获得访问用户的真实 IP。所以不仅仅是 HTTP 服务,任何的 TCP 服务,只要支持这一协议,都可以获得用户的真实 IP 地址。
需要注意的是,在代理配置中如果要启用此功能,需要本地的服务能够支持 Proxy Protocol 这一协议,目前 nginx 和 haproxy 都能够很好的支持。
frpc_full_example.toml完整配置
[[proxies]]
name = “plugin_https2https”
type = “https”
customDomains = [“test.yourdomain.com”]
[proxies.plugin]
type = “https2https”
localAddr = “127.0.0.1:443”
crtPath = “./server.crt”
keyPath = “./server.key”
hostHeaderRewrite = “127.0.0.1”
requestHeaders.set.x-from-where = “frp”
【重点】以上需对完整配置进行改造
demo事例
[[proxies]]
name = “test.yourdomain.com-plugin_https2https”
type = “https”
customDomains = [“test.yourdomain.com”]
[proxies.plugin]
type = “https2https”
localAddr = “test.yourdomain.com”
crtPath = “/etc/frp/ssl/test.yourdomain.com.pem”
keyPath = “/etc/frp/ssl/test.yourdomain.com.key”
hostHeaderRewrite = “test.yourdomain.com”
requestHeaders.set.x-from-where = “frp”
- 重点参数说明name:这里名称自定义,不能与服务端其他名称重复冲突customDomains:填写解析到frp服务端IP的域名localAddr:填写解析到frp服务端IP的域名crtPath:解析到frp服务端IP的域名的ssl公钥这里ssl证书可以使用certd这个工具配合生成免费3个月证书keyPath:解析到frp服务端IP的域名的ssl私钥这里ssl证书可以使用certd这个工具配合生成免费3个月证书hostHeaderRewrite:填写解析到frp服务端IP的域名
【重点】本地hosts解析
– 1、本地系统
- /etc/hosts增加域名与内网服务IP映射关系192.168.100.80 test.yourdomain.com
– 2、docker-compose版本
- 在docker-compose.yml配置文件中新增域名与内网服务IP映射关系extra_hosts:
- “test.yourdomain.com:192.168.100.80”
demo docker-compose事例
version: "3"
services:
frpc1:
restart: always
volumes:
- ./frpc.toml:/etc/frp/frpc.toml
- ./logs:/var/log/frp
- ./ssl:/etc/frp/ssl
container_name: frpc1
image: snowdreamtech/frpc
extra_hosts:
- "test.yourdomain.com:192.168.100.80"
测试访问test.yourdomain.com
总结
- Goegde不支持Proxy Protocol协议
- 改造使用frp的https2https插件功能实现真实IP穿透到Goedge
- 真实IP穿透到Goedge后,可以根据用户的真实IP进行安全管理和有效控制
- 整体在安全提升,但传输效率上有一定的影响