使用FRP实现内网穿透

在测试支付接口时,需要验证回调功能,如何实现支付宝服务器调用本地的项目接口呢?内网穿透可以很好解决这个问题。 基于下面的配置说明内网穿透的工作模式: 客户端和服务端通过bindPort:7070 建立连接,服务端会为内网服务创建一个或多个公网端口映射。当外部用户访问这些公网端口时,服务端就会将请求转发给客户端,再由客户端通过localPort = 8848,将请求转发给内网服务。

服务端软件下载与配置

# 下载
wget https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz
# 解压
tar -xvzf frp_0.61.1_linux_amd64.tar.gz 
vim frps.toml 

修改配置文件

# ==============================
# FRP 服务器端(frps.ini)配置
# ==============================

# 绑定监听地址(默认 `0.0.0.0` 代表监听所有 IP)
bindAddr = "0.0.0.0"

#  服务器监听端口(客户端需要通过该端口连接 FRP 服务器)
bindPort = 7070

# HTTP 端口(用于内网 HTTP 代理穿透)
vhostHTTPPort = 8080

# HTTPS 端口(用于内网 HTTPS 代理穿透)
vhostHTTPSPort = 8443

# 子域名支持
# 可以通过 `subDomainHost` 解析动态子域名
# 例如:如果 `subDomainHost` 配置为 "example.com"
# 那么客户端可以使用 `test.example.com` 访问内网服务
# 如果你没有域名或不使用此功能,请删除此行!
# 如果你要用IP直连例如:168.0.0.1:8848,就把这行删掉,不要配置!
subDomainHost = "example.com"  # 请替换为你的真实域名

# =============================================
# Web 控制台(Dashboard)配置
# =============================================

# 监控界面监听地址(`0.0.0.0` 代表所有 IP 可访问)
webServer.addr = "0.0.0.0"

# Web 管理面板端口(可在浏览器访问,默认 7500)
# 你可以通过 `http://你的公网IP:7500` 访问 FRP 管理面板
webServer.port = 7500

# Web 控制台管理账号(可自定义)
webServer.user = "user_example"

# Web 控制台密码(请自行修改)
webServer.password = "password_example"

# =============================================
# 身份验证(Authentication)配置
# =============================================

#  认证方式(防止未经授权的客户端连接)
# 目前 FRP 支持 `token` 和 `oidc` 方式,我们选用token
auth.method = "token"

#  Token 认证(客户端需要匹配相同 token 才能连接)
# 通俗来说就是密码,写一个你能记住的,尽量长一点
# 示例: 123-abc-123abc 
auth.token = "token_example"

启动服务端frps,推荐写入一个启动脚本中

nohup ./frps -c frps.toml > frps.log 2>&1 &

客户端配置

进入frp仓库下载对应系统的安装包:

编辑文件frpc.toml,这里的c表示client的意思

# 服务端地址(这里要填你有公网IP的服务器的IP或者是服务器的域名)
serverAddr = "example.com"
# 服务器端口(Frp 服务端监听的端口)
serverPort = 7070

# 连接协议
transport.protocol = "tcp"

# 认证方式
auth.method = "token"
# 认证所使用的 Token(要和你刚才配置的服务端token完全一样!)
auth.token = "token_example"

# 代理配置
[[proxies]]
# 代理名称(标识该代理的名称,根据你的喜好填写)
name = "rocketcat"
# 代理类型(http、https、tcp等)
# 这里要根据你的需求来填写,如果你有域名,就用http
# 如果你没有域名,那就用IP直连,例如:165.0.0.1:8848,此时这里应该写tcp协议
# 如果你用tcp协议就必须把刚才服务端上subDomainHost = "xxxx.com"的配置删除!
# type = "tcp"   # IP+端口直连用这个
type = "http"
# 本地 IP(Frp 客户端需要将流量转发到的本地地址)
localIP = "127.0.0.1"
# 本地端口(Frp 客户端需要将流量转发到的本地端口,根据你要穿透的端口来填写)
localPort = 8848
# 访问此代理的子域名
# 如果你没有域名要用IP直连,请把这句删除掉,否则会导致无法连接!
subdomain = "rocket" # 子域名请根据你拥有的域名配置,配置后通过rocket.xxx.com格式访问

# 如果你不用域名,要用ip+端口直连,请必须加上这句!
# 并且删除 subdomain = "rocket" 
# remotePort = 8848    # 这个端口和localPort 配置的一模一样,这样才能正常访问!

在客户端命令行执行

frpc.exe -c frpc.toml

验证

  1. 在本地启动一个服务,监听端口8848
  2. 开放本地防火墙端口号8848
  3. 在frp面板可以看到与服务端建立的连接
    frp面板显示与客户端建立的连接
  4. 在浏览器访问地址:rocket.example.com:8080 预期结果:可以在看到本地启动服务相同的页面

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

赣ICP备2025059670号