如何使用 frp 内网穿透将本地服务暴露在外网上
我们有时需要将自己本地的服务暴露在外网中,比如微信支付、支付宝支付等调试的时候,或者是自己刚刚开发好的某个应用需要被别人在外网访问到,此时就需要使用内网穿透了
准备工作
1.首先我们需要有一个外网服务器
2.下载对应系统的 frp 工具 ⇲ 前往下载
部署服务端
1.根据你服务端的系统获取对应版本的frp
2.将对应版本的 frp 解压到你的服务器上
tar -zxvf frp压缩包
:解压文件到当前文件夹
[root@VM-12-5-centos opt]# tar -zxvf frp_0.44.0_linux_amd64.tar.gz
frp_0.44.0_linux_amd64/
frp_0.44.0_linux_amd64/frpc.ini
frp_0.44.0_linux_amd64/LICENSE
frp_0.44.0_linux_amd64/frpc
frp_0.44.0_linux_amd64/frpc_full.ini
frp_0.44.0_linux_amd64/frps.ini
frp_0.44.0_linux_amd64/frps
frp_0.44.0_linux_amd64/frps_full.ini
[root@VM-12-5-centos opt]#
3.进入 frp 目录中修改服务端配置文件 frps.ini
frps.ini 为服务端配置文件
frpc.ini 为客户端配置文件
配置文件(每个配置上方都有注释,注意查看):
[common]
# 绑定服务器的服务端口
bind_port = 7000
# 设置http端口和https端口(可以与“bind_port”相同)
# vhost_http_port = 80
# vhost_https_port = 443
# 由于当前服务器使用了nginx占用了 80 与 443 端口,所以我这里使用 7001
# 后期可以使用 nginx 转发到该端口,不进行 nginx 转发的话直接域名加该端口也是可以访问设置的穿透服务的
vhost_http_port = 7001
# 如果subdomain_host参数不为空,可以在frpc(客户端)的配置文件(frpc.ini)中的type=http或者type=https的项目中设置子域名
# 例如,frpc(客户端)的配置文件中的 subdomain 为 test 时,主机会路由到 test.你的域名.com 网址。
subdomain_host = 你的域名.com
#仪表盘 设置后可通过该端口访问 frp 服务端 Web 管理界面
dashboard_port = 7002
dashboard_user = admin
dashboard_pwd = admin
# Enable dashboard first, then configure enable_prometheus = true in frps.ini.
# http://{dashboard_addr}/metrics will provide prometheus monitor data.
enable_prometheus = true
#日志
log_file = /opt/frp/log/frps.log
log_level = info
# 日志最多保存天数
log_max_days = 7
4.运行 frp 服务端
使用命令 nohup ./frps -c ./frps.ini &
在后台启动服务端
[root@VM-12-5-centos frp]# nohup ./frps -c ./frps.ini &
5.我们访问服务器的 7002 端口来访问配置的仪表盘Web管理页面
输入配置的账号密码显示此界面服务端就配置成功了,如果访问失败,我们可以查看错误日志,来定位错位
6.然后参考下方客户端配置来配置客户端
参看下一章节 “部署客户端” 配置时可观察服务端的日志输出
7.nginx反向代理配置
1.这里我使用 二级域名 frp 来访问所有关于 frp 的服务
2.如下图将 frp.xx.cn 代理到 7002 端口的服务端仪表盘Web管理页面
3.将所有穿透服务 *.frp.xsx.cn (* 为客户端配置的 subdomain 子域名
) 代理到 frp 服务端配置的vhost_http_port 即 7001 端口
此时我们就可以通过域名直接访问我们穿透的本地服务了
部署客户端
1.将对应系统的 frp 文件解压到客户端
因为大多客户端都为图形化界面,此处省略
2.进入 frp 文件夹内修改客户端配置文件 frpc.ini
配置文件(每个配置上方都有注释,注意查看):
# frp内网穿透 服务端地址 你的域名.com
# 示例
# #服务名称(自定义,用于区分多个内网服务),标识该块配置的服务名
# [service_name]
# #标识为 http 请求
# type = http
# # 需要穿透的本地服务端口
# local_port = 10089
# # 设置访问当前被穿透服务外网地址的子域名 (当前被穿透的服务外网访问地址为:test.你的域名.com)
# subdomain = test
# 穿透服务有多个时也可配置多个,下方配置了两个穿透服务 hereitis_service 和 hereitis_admin 服务名可自定义
[hereitis_service]
type = http
local_port = 10089
subdomain = servicehereitis
[hereitis_admin]
type = http
local_port = 1024
subdomain = adminhereitis
[common]
# 填入你的服务端所在外网IP
server_addr = 0.0.0.0
# 填入你的服务端绑定的服务端口
server_port = 7000
# 客户端管理界面配置(配置后可通过 7400 端口访问该管理界面)
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
3.进入控制台启动客户端
进入frp目录后使用命令./frpc -c ./frpc.ini
启动客户端
yunchuchu@chaochudeMBP ~ % cd service/frp
yunchuchu@chaochudeMBP frp % ./frpc -c ./frpc.ini
2022/08/21 13:43:23 [I] [service.go:349] [0e69107d277b4d00] login to server success, get run id [0e69107d277b4d00], server udp port [0]
2022/08/21 13:43:23 [I] [proxy_manager.go:144] [0e69107d277b4d00] proxy added: [hereitis_service hereitis_admin]
2022/08/21 13:43:23 [I] [service.go:158] admin server listen on 127.0.0.1:7400
2022/08/21 13:43:23 [I] [control.go:181] [0e69107d277b4d00] [hereitis_service] start proxy success
2022/08/21 13:43:23 [I] [control.go:181] [0e69107d277b4d00] [hereitis_admin] start proxy success
4.访问客户端管理 Web 页面
此时我们可以看到两个穿透服务都配置成功了
5.我们访问服务器配置的 7001 端口
注意:
1.注意必须通过配置的域名才可以访问的到
2.域名为:客户端配置的subdomain.服务端配置的subdomain_host
3.我们也可通过客户端管理界面得 remote address 查看
4.注意该域名是否可以访问到该服务器,访问不到请先对域名进行相应的DNS设置
6.此时我们成功通过域名+端口访问到本地服务
如果不想使用端口号请将服务端的 vhost_http_port 设置为 80
如果80端口被nginx占用,我们可以使用 nginx 将服务转发到 7001 端口,具体可参看上方服务端部署