所有文章

弄懂FRP内网穿透的 HTTP 类型代理

发布时间

calendar-icon

作者

阅读时间

read-time-icon 5 min read

浏览量

view-count-icon

摘要: 通过使用HTTP类型的代理,用户可以方便地通过域名访问内网服务,避免了直接暴露IP和端口带来的安全隐患。

弄懂FRP内网穿透的 HTTP 类型代理.webp

前言

Frp支持多种代理类型:tcp、udp、http、https、stcp、tcpmux、stcp、sudp。

为了更好地使用FRP,同时提升安全性,本文主要阐述如何使用Frp的http类型代理以及实现原理。

其实内网的Web Http服务(如gitea、MinIO、QBittorrent…),应该使用 Frp 的 HTTP 类型会更合理。


HTT类型特点

安全性

  • 采用 token 认证机制
  • 支持 HTTPS 加密传输
  • 域名访问控制

易用性

  • 简单的三步配置流程
  • 清晰的配置文件结构
  • 支持无端口访问

可扩展性

  • 支持多服务配置
  • 支持反向代理整合
  • 便于后期维护

流程

只需要三个步骤:

服务端配置HTTP/HTTPS端口(12280/10443) —> 客户端设置HTTP类型代理并绑定域名 —> 通过反向代理+SSL证书实现无端口域名访问

frps服务端设置

frps.toml

# 添加以下配置
vhostHTTPPort = 12280    # Frp 的 http 端口
vhostHTTPSPort = 10443   # Frp 的 https 端口

#添加添加认证机制
auth.method = "token"
auth.token = "KdkoOdk20060Lpzx"

这就意味着,内网所有使用 frp http类型进行内网穿透的服务,都是通过 12280 和 10443 访问。

💡温馨提示:需要确保服务器防火墙开放端口:12280、10443

frpc客户端设置

frpc.toml

#添加添加认证机制
auth.method = "token"
auth.token = "KdkoOdk20060Lpzx"

#设置需要进行内网穿透的服务信息
[[proxies]] 
name = "web1"  # 这里输入服务的名字
type = "http"  # https类型
localIP = "192.168.22.11" 
localPort = 12321 
customDomains = ["web1.example.com"] # 添加允许的域名

这意味着,外网访问时:

  • 只能通过域名web1.example.com访问
  • 不能通过 IP + 端口直接访问(如果需要通过 IP + 端口访问,需要使用 TCP 类型代理,本文暂不讨论TCP类型代理)

实现无端口访问

在frps的服务器,配置反向代理,并设置访问HTTP自动跳转到HTTPS,实现无端口访问。

反向代理时,必须使用 vhostHTTPPort/vhostHTTPSPort(即 12280/10443)进行反向代理配置,通过域名区分不同服务的机制使得多服务共享同一端口成为可能,这正是 Frp HTTP 类型代理的核心优势。

用户访问示意图

示意图 1 frp用户访问示意图

示意图 2 frp用户访问示意图

总结

今天明白了frp的http类型代理使用场景原理,以后内网的Web http服务,就使用http类型代理进行穿透。


💡 懒人总结

要安全?用HTTP(配域名+HTTPS)

要随便?用TCP(IP+端口直连,但小心被劫)

记住:FRP不加密=快递裸奔,加Token=密码锁! 🔐




FAQ

那是不是意味着外网不能通过ip+端口进行访问?

是的,在这个 HTTP/HTTPS 类型的 frp 配置中,外网确实不能通过 IP + 端口直接访问。

这是因为: HTTP/HTTPS 类型的特点

  • 基于域名路由
  • 必须通过配置的 customDomains 域名访问
  • 不支持直接 IP + 端口访问

如果需要通过 IP + 端口访问,那怎么办?

需要使用 TCP 类型代理。

frpc.toml

[[proxies]]
name = "web1-tcp"
type = "tcp"
localIP = "192.168.22.11"
localPort = 12321
remotePort = 12345  # frps 服务器上的端口

为什么有些场景必须使用FRP的TCP类型代理?

在使用FRP进行内网穿透时,有些场景必须使用TCP类型,如数据库服务(MySQL、PostgreSQL等)、SSH远程连接…