目录
- 一、什么是frp
- 二、实现场景
-
- [2.1 环境说明](#2.1 环境说明)
- 三、下载frp
-
- [3.1 下载地址](#3.1 下载地址)
- [3.2 在线下载(有网络)](#3.2 在线下载(有网络))
- [3.3 离线下载(无网络)](#3.3 离线下载(无网络))
- 四、服务端安装
-
- [4.1 下载解压](#4.1 下载解压)
- [4.2 配置 frps.toml](#4.2 配置 frps.toml)
- [4.3 配置防火墙](#4.3 配置防火墙)
- [4.4 启动 frps 服务](#4.4 启动 frps 服务)
- [4.5 配置 systemd 服务](#4.5 配置 systemd 服务)
- 五、客户端安装
-
- [5.1 下载解压](#5.1 下载解压)
- [5.2 配置 frpc.toml](#5.2 配置 frpc.toml)
- [5.3 配置防火墙](#5.3 配置防火墙)
- [5.4 启动 frpc 服务](#5.4 启动 frpc 服务)
- [5.5 配置 systemd 服务](#5.5 配置 systemd 服务)
一、什么是frp
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
二、实现场景
基于frp的tcp模式实现将内网不同服务分别暴露到互联网,供用户访问应用系统。
2.1 环境说明
| 分类 | 说明 |
|---|---|
| frp 服务端 | 阿里云服务器,必须要有公网IP |
| frp 客户端 | openEuler服务器,nginx部署2个测试服务与ssh服务 |
三、下载frp
3.1 下载地址
官网地址:https://github.com/fatedier/frp/releases
官方文档:https://gofrp.org/zh-cn/docs/
CSDN下载:https://download.csdn.net/download/m0_37048012/92508877
下载时,根据安装服务器的架构选择,x86架构选择amd,arm架构选择arm。

3.2 在线下载(有网络)
此处以server端举例,client端同理。
bash
# 创建安装目录
[root@openeuler ~]# mkdir /opt/frp
[root@openeuler ~]# cd /opt/frp
# 下载frp
[root@openeuler frp]# sudo wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
3.3 离线下载(无网络)
在官网地址下载frp包。
在通过远程工具上传到指定服务器即可。
四、服务端安装
4.1 下载解压
bash
# 创建目录
[root@openeuler ~]# mkdir /opt/frp
[root@openeuler ~]# cd /opt/frp
# 下载 frp
[root@openeuler frp]# sudo wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压 frp
[root@openeuler frp]# sudo tar -zxvf frp_0.65.0_linux_amd64.tar.gz
[root@openeuler frp]# cd frp_0.65.0_linux_amd64/
4.2 配置 frps.toml
bash
# 编辑 frps.toml,输入【i】编辑
[root@openeuler frp_0.65.0_linux_amd64]# vi /opt/frp/frp_0.65.0_linux_amd64/frps.toml
# =============================================================================
# frps.toml(直接复制此文本):
#-----------------客户端和服务端绑定的端口-----------------#
# 将在控制端通过公网ip+此端口号的形式进行穿透访问
bindPort = 7000
#-----------------客户端和服务端绑定的端口-----------------#
#-----------------服务端 Dashboard 配置-----------------#
# 服务端 Dashboard 使用户可以通过浏览器查看 frp 的状态以及代理统计信息
# Dashboard 监听的地址,默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0
webServer.addr = "0.0.0.0"
# 将通过公网ip+此端口号访问 Dashboard,打开浏览器通过 http://[server addr]:7500 访问 Dashboard 界面
webServer.port = 7500
# Dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"
#-----------------服务端 Dashboard 配置-----------------#
#-----------------身份认证配置-----------------#
# 目前 frpc 和 frps 之间支持两种身份验证方式,token 和 oidc,默认为 token
# auth.method="token"
# auth.token:设置用于身份验证的共享密钥(Token)。客户端(frpc)连接服务端(frps)时,必须提供相同的 token,否则连接会被拒绝。这个值可以是任意字符串,但建议使用足够长且随机的字符串以提高安全性。
auth.token = "y7gc4j4FF7rJnNBE"
#-----------------身份认证配置-----------------#
#-----------------log 日志配置-----------------#
# 日志输出文件路径
log.to = "/opt/frp/frp_0.65.0_linux_amd64/frps.log"
# 日志级别,可选值为 trace, debug, info, warn, error,默认级别为 info。
# log.level = "info"
# 日志文件最多保留天数,默认为 3 天。
# log.maxDays = 3
#-----------------log 日志配置-----------------#
# =============================================================================
# 保存 frps.toml
按【esc】后,输入【:wq】保存并退出编辑。
4.3 配置防火墙
第一步:配置服务器防火墙
bash
# 查询端口是否开放
[root@openeuler ~]# sudo firewall-cmd --query-port=7000/tcp
[root@openeuler ~]# sudo firewall-cmd --query-port=7500/tcp
# 开放端口(TCP协议)
[root@openeuler ~]# sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent
[root@openeuler ~]# sudo firewall-cmd --zone=public --add-port=7500/tcp --permanent
# 重新加载防火墙规则
[root@openeuler ~]# sudo firewall-cmd --reload
# 验证端口是否开放
[root@openeuler ~]# sudo firewall-cmd --zone=public --list-ports
# 查看所有端口
[root@openeuler ~]# sudo netstat -nlpt
第二步:配置阿里云防火墙
在阿里云控制台页面,进入安全组,配置出入规则。

4.4 启动 frps 服务
bash
[root@openeuler ~]# cd /opt/frp/frp_0.65.0_linux_amd64/
# 临时启动服务
[root@openeuler frp_0.65.0_linux_amd64]# ./frps -c ./frps.toml

访问 Dashboard

4.5 配置 systemd 服务
在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。
1、安装 systemd (默认都有)
bash
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd
2、创建 frps.service 文件
使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。
bash
# 创建自启动脚本
[root@openeuler ~]# sudo vi /etc/systemd/system/frps.service
# =============================================================================
# 复制粘贴以下内容:
[Unit]
Description = Frps Server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# ExecStart = /path/to/frps -c /path/to/frps.toml
ExecStart = /opt/frp/frp_0.65.0_linux_amd64/frps -c /opt/frp/frp_0.65.0_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
# =============================================================================
# 保存退出
按【esc】后,输入【:wq】保存并退出编辑。
3、启动服务
bash
# 注意:要保证 frps 后台服务未启动
# 设置开机自启
[root@openeuler ~]# sudo systemctl daemon-reload
[root@openeuler ~]# sudo systemctl enable frps
# 启动服务
[root@openeuler ~]# sudo systemctl start frps
# 停止服务
[root@openeuler ~]# sudo systemctl stop frps
# 重启服务
[root@openeuler ~]# sudo systemctl restart frps
# 查看服务状态
[root@openeuler ~]# sudo systemctl status frps
五、客户端安装
5.1 下载解压
bash
# 创建目录
[root@openeuler ~]# mkdir /opt/frp
[root@openeuler ~]# cd /opt/frp
# 下载 frp
[root@openeuler frp]# sudo wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压 frp
[root@openeuler frp]# sudo tar -zxvf frp_0.65.0_linux_amd64.tar.gz
[root@openeuler frp]# cd frp_0.65.0_linux_amd64/
5.2 配置 frpc.toml
bash
# 编辑 frpc.toml,输入【i】编辑
[root@openeuler frp_0.65.0_linux_amd64]# vi /opt/frp/frp_0.65.0_linux_amd64/frpc.toml
# =============================================================================
# frpc.toml(直接复制此文本):
#---------------------配置服务器连接服务---------------------#
# 阿里云服务器公网ip
serverAddr = "xx.xx.xx.xx"
# 连接到云服务器端口
serverPort = 7000
# 配置身份认证方式
# auth.method = "token"
# 配置 token 密钥
auth.token = "y7gc4j4FF7rJnNBE"
#---------------------配置服务器连接服务---------------------#
#---------------------配置 web1 服务-------------------------#
[[proxies]]
# 服务名称(不可重复)
name = "web1"
# 连接类型
type = "tcp"
# web1 服务 ip
localIP = "127.0.0.1"
# web1 服务端口
localPort = 9001
# 自定义互联网访问端口
remotePort = 8100
#---------------------配置 web1 服务-------------------------#
#---------------------配置 web2 服务-------------------------#
[[proxies]]
# 服务名称(不可重复)
name = "web2"
# 连接类型
type = "tcp"
# web2 服务 ip
localIP = "127.0.0.1"
# web2 服务端口
localPort = 9002
# 自定义互联网访问端口
remotePort = 8200
#---------------------配置 web2 服务-------------------------#
#---------------------配置 ssh1 服务-------------------------#
[[proxies]]
# 服务名称(不可重复)
name = "ssh1"
# 连接类型
type = "tcp"
# ssh1 服务 ip
localIP = "127.0.0.1"
# ssh1 服务端口
localPort = 22
# 自定义互联网访问端口
remotePort = 8300
#---------------------配置 ssh1 服务-------------------------#
# =============================================================================
# 保存 frpc.toml
按【esc】后,输入【:wq】保存并退出编辑。
5.3 配置防火墙
配置阿里云防火墙
在阿里云控制台页面,进入安全组,配置出入规则。

5.4 启动 frpc 服务
bash
[root@openeuler ~]# cd /opt/frp/frp_0.65.0_linux_amd64/
# 临时启动服务
[root@openeuler frp_0.65.0_linux_amd64]# ./frpc -c ./frpc.toml
# 访问 web 服务
打开浏览器通过 http://[server addr]:port 访问 web 界面

访问 Dashboard
Dashboard 显示的 tcp 服务如下:

5.5 配置 systemd 服务
在 Linux 系统下,使用 systemd 可以方便地控制 frpc 客户端的启动、停止、配置后台运行以及开机自启动。
1、创建 frpc.service 文件
使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frpc.service 文件,用于配置 frpc 服务。
bash
# 创建自启动脚本
[root@openeuler ~]# sudo vi /etc/systemd/system/frpc.service
# =============================================================================
# 复制粘贴以下内容:
[Unit]
Description = Frpc Server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# ExecStart = /path/to/frps -c /path/to/frps.toml
ExecStart = /opt/frp/frp_0.65.0_linux_amd64/frpc -c /opt/frp/frp_0.65.0_linux_amd64/frpc.toml
[Install]
WantedBy = multi-user.target
# =============================================================================
# 保存退出
按【esc】后,输入【:wq】保存并退出编辑。
2、启动服务
bash
# 注意:要保证 frpc 后台服务未启动
# 设置开机自启
[root@openeuler ~]# sudo systemctl daemon-reload
[root@openeuler ~]# sudo systemctl enable frpc
# 启动服务
[root@openeuler ~]# sudo systemctl start frpc
# 停止服务
[root@openeuler ~]# sudo systemctl stop frpc
# 重启服务
[root@openeuler ~]# sudo systemctl restart frpc
# 查看服务状态
[root@openeuler ~]# sudo systemctl status frpc