什么是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 = 7000
vhost_http_port = 8000
subdomain_host = server.demo.com
token = 123456789
dashboard_port = 7001
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
text
公共配置:
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/bash
NAME="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]"
done
nohup ./frps -c ./frps.ini > out.log &
tail -500f ./out.log
shell
为启动脚本赋权
chmod 777 ./restartServer.sh
shell
运行启动脚本
./restartServer.sh
shell
客户端
frpc.ini配置:
[common]
server_addr = server.demo.com
server_port = 7000
token = 123456789
[ssh]
type = tcp
local_ip = 192.168.111.111
local_port = 22
subdomain = ssh
remote_port = 8001
[web]
type = http
local_ip = 192.168.111.111
local_port = 8080
subdomain = web
remote_port = 8000
text
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/bash
NAME="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]"
done
nohup ./frpc -c ./frpc.ini > out.log &
tail -500f ./out.log
shell
为启动脚本赋权
chmod 777 ./restartClient.sh
shell
运行启动脚本
./restartClient.sh
shell
公网访问
访问ssh
使用ssh工具连接 ssh.client.demo.com:8001
此时内网映射到 192.168.111.111:22
访问web
浏览器访问 web.client.demo.com:8000
此时内网映射到 192.168.111.111:8080