前提,需要有一台公网的机器,和自用的内网机器。
作者目前的情况,花了首充在某里巴巴购了个低配置的公网服务器,学习某依微服务架构时,由于要安装启动的中间件,管理工具和微服务有点多,服务器配置跟不上,所以使用本地安装虚拟机来部署部分服务然后映射到公网上。使用FRP来做实现内网穿透和端口映射。
FRP(Fast Reverse Proxy)是一种高性能的反向代理应用,主要用于穿透内网和实现端口映射。它允许你将局域网中的服务暴露到公网,从而能够在公网中访问这些服务。
FRP 主要由两部分组成:
- FRPC 客户端:运行在内网机器上,接收来自公网的访问请求,并将请求转发给内网服务。
- FRPS 服务端:部署在具有公网 IP 的机器上,暴露服务的公网入口,接收公网访问请求,通过加密隧道转发到 FRPC。
下载并安装FRP
源码地址:https://github.com/fatedier/frp/releases
文档地址:https://gofrp.org
选择合适的版本下载,作者使用的v0.61.0版本
# 安装路径
cd /usr/local
# 新建文件夹
mkdir frp
cd frp
# 下载
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
# 解压文件
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64/
# 配置frps,公网机器,修改frps.toml,指定 HTTP 请求的监听端口为 80;auth.token可以任意值,frps和frpc相同即可
vim frps.toml
--------------------------------------------frps.toml start
bindPort = 6699
vhostHTTPPort = 80
# token配置和frpc一致,相同才可以建立连接映射,不配置也可以,不过公网ip暴露后可能会连接到其他的映射
auth.token = "65425e0fb7c14daf81b585f34fbf90aa"
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。 下述webServer配置是打开服务端可视化控制台,可以省略
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"
--------------------------------------------frps.toml end
# 配置frpc,内网机器,修改frpc.toml
vim frpc.toml
--------------------------------------------frpc.toml start
# serverAddr 配置你的公网ip
serverAddr = "****"
# serverPort 随意,与frps需要配置成一致的
serverPort = 6699
auth.token = "65425e0fb7c14daf81b585f34fbf90aa"
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。 下述webServer配置是打开客户端可视化控制台,可以省略
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
# 配置规则详见文档,如下是我使用到的配置
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6622
[[proxies]]
name = "redis"
type = "tcp"
localIP = "127.0.0.1"
localPort = 6379
remotePort = 6379
[[proxies]]
name = "nacos"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8848
remotePort = 8848
[[proxies]]
name = "nacos-grpc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9848
remotePort = 9848
[[proxies]]
name = "nacos-metrics"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9849
remotePort = 9849
[[proxies]]
name = "sentinel-dashboard"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8718
remotePort = 8718
[[proxies]]
name = "mysql"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3306
remotePort = 3306
[[proxies]]
name = "web"
type = "http"
localPort = 80
# 可以配置想要的域名
customDomains = ["***.com"]
[[proxies]]
name = "admin_ui"
type = "tcp"
localPort = 7400
remotePort = 7400
--------------------------------------------frpc.toml end
配置服务开机自启
# FRPS 公网服务端,新建服务
vim /etc/systemd/system/frps.service
-------------------------------frps.service start
[Unit]
# 服务名称,可自定义
Description = frps server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/frp/frp_0.61.0_linux_amd64/frps -c /usr/local/frp/frp_0.61.0_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
-------------------------------frps.service end
# 重载服务
systemctl daemon-reload
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 开机启动
sudo systemctl enable frps
# FRPS 内网服务端,新建服务
vim /etc/systemd/system/frpc.service
-------------------------------frpc.service start
[Unit]
# 服务名称,可自定义
Description = frpc server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/frp/frp_0.61.0_linux_amd64/frpc -c /usr/local/frp/frp_0.61.0_linux_amd64/frpc.toml
[Install]
WantedBy = multi-user.target
-------------------------------frpc.service end
# 重载服务
systemctl daemon-reload
# 启动frp
sudo systemctl start frpc
# 停止frp
sudo systemctl stop frpc
# 重启frp
sudo systemctl restart frpc
# 查看frp状态
sudo systemctl status frpc
# 开机启动
sudo systemctl enable frpc