Frp 是一个用于内网穿透的高性能反向代理应用。可以将内网服务从指定的公网节点(一台有公网 IP 的服务器)暴露出来。
修改 frps.ini 文件,配置 Frp 的相关服务端配置
[common]
# Frp 监听的端口,用作服务端和客户端通信
bind_port = 7000
# 授权码,客户端配置时需要和服务端一致
token = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 服务端通过此端口接监听和接收公网用户的 http 请求
vhost_http_port = 7001
# Frp 提供了一个控制台,可以通过这个端口访问到控制台。可查看 Frp 当前有多少代理连接以及对应的状态
dashboard_port = 7002
# Frp 管理后台用户名和密码
dashboard_user = username
dashboard_pwd = password
使用 nohup 以后台的形式启动,如果需要开机启动可以自行配置,不在这里赘述。
# -c 配置文件
nohup ./frps -c frps.ini >frp.out 2>&1 &
需要在防火墙开放配置文件中所配置的端口,让服务能被客户端访问。
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/udp --permanent
firewall-cmd --reload
通过 dashboard_port 指定的端口即可访问 Frp 控制台
修改 frpc.ini 文件,配置 Frp 的相关客户端配置
[common]
# 部署 Frp 服务端的公网服务器的 ip
server_addr = xxx.xxx.xxx.xxx
# 和服务端的 bind_port 保持一致
server_port = 7000
# 与服务器 frps.ini 的 token 一致
token = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[http-demo]
type = http
# local_ip 代表你想要暴露给外网的本地服务的 IP 地址
local_ip = xxx.xxx.xxx.xxx
# local_port 代表你想要暴露给外网的本地服务的端口
local_port = 80
# 自定义域名:当 Frp 服务端接收到该域名的请求时,会根据 local_ip 和 local_port 做相应的代理转发
custom_domains = gitlab.demo.com
使用 nohup 以后台的形式启动,如果需要开机启动可以自行配置,不在这里赘述。
# -c 配置文件
nohup ./frpc -c frpc.ini >frp.out 2>&1 &
说一下我选择 Frp 的原因。
我自己有运行 GitLab 等相对消耗资源的服务,如果采用云服务器部署对我来说是昂贵的。因为我的使用程度并不高,仅限于平常个人使用。则且涉及到的服务需要消耗大约 32G 运行内存,500G 磁盘空间的资源,上云对我来说是不合理的。
Frp 可以用最少的公网资源让我使用上我的所有内网资源。我自己有一台闲置的台式机配置的服务器,通过公网节点(大约 2G 运行内存,2M 带宽)足以调用我的整台机器的资源。