简介
在进行开发时,经常需要公网的 IP 地址,但是一般有公网 IP 地址的服务器都很贵,如果单凭这一台服务器承担所有开发工作,不仅不方便维护,而且也需要不少费用。
如果你恰好还有几台内网的服务器,就可以通过内网穿透的方式,将内网的服务映射到公网 IP 地址上。公网服务器只需要承担转发的工作即可。
frp 就是一个高性能的反向代理应用,专注于内网穿透,支持 TCP、UDP、HTTP、HTTPS 等协议。它可以将内网的服务映射到公网 IP 地址上,方便进行远程访问。
安装
在公网服务器和内网服务器上都需要安装 frp,并且安装方式相同。
# 下载 frp 压缩包
wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.37.0_linux_amd64.tar.gz
# 进入解压后的目录
cd frp_0.37.0_linux_amd64
配置文件
解压后的目录下有这样几个文件
frps.ini
frpc.ini
frps
frpc
# 其他
其中叫做 frps
的是服务端,叫做 frpc
的是客户端。 在服务端和客户端上都需要配置 frps.ini
和 frpc.ini
,这两个文件分别是服务端和客户端的配置文件。 所以在配置服务端和客户端时,一定要注意名称,不要配置错了!
服务端
在服务端,frps.ini
的配置文件如下:
# 编辑 frps.ini
vim frps.ini
# 服务端配置
[common]
# frp 监听的端口
bind_port = 7000
# 授权码,自己配置
token = <your_token>
# 服务端映射的端口
vhost_http_port = 9000
# frp 管理后台端口
dashboard_port = 7500
# frp 管理后台用户名及密码
dashboard_user = <your_name>
dashboard_pwd = <your_password>
enable_prometheus = true
# frp 日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
客户端
在客户端,frpc.ini
的配置文件如下:
# 编辑 frpc.ini
vim frpc.ini
# 客户端配置
[common]
# 公网 IP 地址
server_addr = <your_ip_addr>
# 与 frps.ini 的 bind_port 一致
server_port = 7000
# 与 frps.ini 的 token 一致
token = <your_token>
# 配置 ssh 服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
# 配置 http 服务,可用于小程序开发、远程调试等,如果没有可以不写下面的
[web]
type = http
local_ip = 127.0.0.1
# 自定义客户端要映射到服务端的端口
local_port = 8000
# 地址
custom_domains = <your_ip_addr>
# 与 frps.ini 的 vhost_http_port 一致
remote_port = 9000
启动
配置完服务端和客户端后,我们就可以分别启动了。
# 启动服务端
./frps -c ./frps.ini
# 启动客户端
./frpc -c ./frpc.ini
在以上的实例中,我在内网服务器的 8000 端口部署了一个 fastapi 的 http 服务,公网服务器的 9000 端口映射到了内网服务器的 8000 端口。 也就是说在 http://<your_ip_addr>:9000 就可以访问到内网服务器的 http 服务了。
如果要添加其他服务也非常简单,例如我在内网的 3306 端口上部署了一个 mysql 的服务,只需要在客户端的 frpc.ini
中添加如下配置即可:
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6001
这样我们就能在公网的 6001 端口上访问到内网的 mysql 服务了,并且不需要重新配置服务端的 frps.ini
文件。
systemd 方式启动
如果我们希望将 frp 作为系统服务来运行,可以使用 systemd 进行管理,这样能够实现开机自启动并在程序崩溃时自动重启。
客户端服务配置
# 创建 frpc.service 文件
sudo vim /etc/systemd/system/frpc.service
填写以下内容:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
# 替换为实际运行frp的用户名
User=<your_user>
# 修改为实际的frp安装路径
WorkingDirectory=/path/to/frp
ExecStart=/path/to/frp/frpc -c /path/to/frp/frpc.ini
# 自动重启设置
Restart=on-failure
RestartSec=5s
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
启用并启动服务:
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable frpc
# 启动服务
sudo systemctl start frpc
# 查看服务状态
sudo systemctl status frpc
服务端服务配置
服务端配置类似,创建 frps.service 文件:
sudo vim /etc/systemd/system/frps.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=<your_user>
WorkingDirectory=/path/to/frp
ExecStart=/path/to/frp/frps -c /path/to/frp/frps.ini
Restart=on-failure
RestartSec=5s
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps
评论区