内网穿透FRP详细教程
本文最后更新于 2024-06-12,
若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。
本站只有Telegram群组为唯一交流群组, 点击加入
文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请
什么是FRP
FRP是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议。
它可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。
项目github地址:https://github.com/fatedier/frp
名词介绍
1.服务端
服务端是指具有公网ip的服务器
2.暴露端
内网中需要暴露到公网的服务器
3.客户端
客户端是指内网中能既能访问公网,又能访问内网暴露端的服务器
如果暴露端能够直接访问公网,那么暴露端也能作为服务端
暴露端不用安装FRP,除非暴露端也作为客户端
FRP文件介绍
将frp下载后解压后,目录中有7个文件:
frpc
frpc.ini
frpc_full.ini
frps
frps.ini
frps_full.ini
LICENSE
其中frps开头的是服务端需要用到的文件,frpc开头的是客户端需要用到的文件,LICENSE为许可证文件。
frps_full.ini:服务端配置示例。
frps.ini:为服务端配置文件。
frps:服务端启动文件。
frpc_full.ini:客户端配置示例。
frpc.ini:客户端配置文件。
frpc:客户端启动文件。
搭建准备
现有服务器公网ip为 111.111.111.111
,现有域名 demo.com
。
需要将域名 server.demo.com
解析(A解析)到 111.111.111.111
。
需要将域名 *.client.demo.com
解析(CNAME解析)到 server.demo.com
。
这里
client.demo.com
前面的*
是通配符。
现有需要暴露到公网的服务器内网ip为 192.168.111.111
服务端
frps.ini配置:
[common]bind_port = 7000vhost_http_port = 8000subdomain_host = server.demo.comtoken = 123456789dashboard_port = 7001dashboard_user = admindashboard_pwd = adminenable_prometheus = truetext
公共配置:
bind_port:服务端运行的端口。
vhost_http_port:监听的http端口,后续所有内网穿透的http端口都使用 域名 + 该端口
的形式访问,这里便是 *.client.demo.com:8000
。
subdomain_host:服务端监听的域名。
token:连接密钥,可以不配置,但为安全起见最好设置一个,防止他人冒用。
仪表盘配置:
dashboard_port:仪表盘端口。
dashboard_user:用户名。
dashboard_pwd:用户密码。
enable_prometheus:启用仪表盘。
启动服务端
命令行启动
切换到frp目录,执行命令 ./frps -c ./frps.ini
后台启动
nohup ./frps -c ./frps.ini > out.log &
脚本启动
frp目录新建 restartServer.sh
文件,粘贴以下内容
#!/bin/bashNAME="frps"ID=$(ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}')for id in $ID; do kill -9 $id echo "killed $NAME:[$id]"donenohup ./frps -c ./frps.ini > out.log &tail -500f ./out.logshell
为启动脚本赋权
chmod 777 ./restartServer.shshell
运行启动脚本
./restartServer.shshell
客户端
frpc.ini配置:
[common]server_addr = server.demo.comserver_port = 7000token = 123456789[ssh]type = tcplocal_ip = 192.168.111.111local_port = 22subdomain = sshremote_port = 8001[web]type = httplocal_ip = 192.168.111.111local_port = 8080subdomain = webremote_port = 8000text
ssh配置
名字(
[]
中的内容)可以随便取,但是要保证一个 服务端 下面不能有重复的。
type:协议类型。
local_ip:暴露端服务器的内网ip,需要保证客户端能访问到。
local_port:暴露端需要暴露到公网的端口,一次性只能暴露一个端口。
subdomain:公网域名访问前缀(即把 *.client.demo.com:8000
前面的 *
给替换掉)。
remote_port:暴露到公网的端口号。
remote_port 配置的端口号必须在服务端所在的服务器开放防火墙
web配置
配置含义与ssh配置相同,但是这里的 remote_port
可以不用配置,服务端监听http请求的端口已经固定配置为 8000
了。
启动客户端
客户端启动方式与服务端启动方式大致相同。
命令行启动
切换到frp目录,执行命令 ./frpc -c ./frpc.ini
后台启动
nohup ./frpc -c ./frpc.ini > out.log &
脚本启动
frp目录新建 restartClient.sh
文件,粘贴以下内容
#!/bin/bashNAME="frpc"ID=$(ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}')for id in $ID; do kill -9 $id echo "killed $NAME:[$id]"donenohup ./frpc -c ./frpc.ini > out.log &tail -500f ./out.logshell
为启动脚本赋权
chmod 777 ./restartClient.shshell
运行启动脚本
./restartClient.shshell
公网访问
访问ssh
使用ssh工具连接 ssh.client.demo.com:8001
此时内网映射到 192.168.111.111:22
访问web
浏览器访问 web.client.demo.com:8000
此时内网映射到 192.168.111.111:8080