目录
- [一、什么是frp stcp 模式](#一、什么是frp stcp 模式)
- 二、实现场景
-
- [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 启动 frpc 服务](#5.3 启动 frpc 服务)
- [5.4 配置 systemd 服务](#5.4 配置 systemd 服务)
- 六、访问端安装
-
- [6.1 下载解压](#6.1 下载解压)
- [6.2 配置 frpc.toml](#6.2 配置 frpc.toml)
- [6.3 创建启动文件](#6.3 创建启动文件)
- [6.4 访问服务](#6.4 访问服务)
一、什么是frp stcp 模式
某些内网服务,如果直接暴露在公网上,可能存在安全风险。使用 stcp(secret tcp) 类型的代理可以让您安全地将内网服务暴露给经过授权的用户,这需要访问者也部署 frpc 客户端。
要求在被访问服务的机器上以及要访问的用户的机器上都部署上 frp 的客户端。被访问的服务所在机器叫做服务端,另一端叫做访问端。
二、实现场景
基于frp的stcp模式实现将内网web服务安全的暴露到互联网,供被授权用户访问应用系统。
2.1 环境说明
| 分类 | 说明 |
|---|---|
| frp 服务端 | 阿里云服务器,必须要有公网IP |
| frp 客户端 | openEuler服务器,nginx部署web测试服务 |
| frp 访问端 | 授权用户win电脑 |
三、下载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 = "secret_web1"
# 连接类型
type = "stcp"
# web1 服务 ip
localIP = "127.0.0.1"
# web1 服务端口
localPort = 9001
# 重要:只有与此处设置的 secretKey 一致的用户才能访问此服务
secretKey = "w6XN5U6a"
#---------------------配置 web1 服务-------------------------#
# =============================================================================
# 保存 frpc.toml
按【esc】后,输入【:wq】保存并退出编辑。
5.3 启动 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

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

5.4 配置 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
六、访问端安装
6.1 下载解压
在官网地址下载frp win 包(frp_0.65.0_windows_amd64.zip)后解压即可。
6.2 配置 frpc.toml
使用编辑器(Notepad++)打开 frpc.toml 文件后进行编辑。
bash
# =============================================================================
# frpc.toml(直接复制此文本):
#---------------------配置服务器连接服务---------------------#
# 阿里云服务器公网ip
serverAddr = "xx.xx.xx.xx"
# 连接到云服务器端口
serverPort = 7000
# 配置身份认证方式
# auth.method = "token"
# 配置 token 密钥
auth.token = "y7gc4j4FF7rJnNBE"
#---------------------配置服务器连接服务---------------------#
#---------------------配置 web1 访问服务--------------------#
[[visitors]]
# 服务名称(不可重复)
name = "secret_web1_visitor"
# 连接类型
type = "stcp"
# 要访问的 stcp 代理的名字
serverName = "secret_web1"
secretKey = "w6XN5U6a"
# 绑定本地端口以访问 SSH 服务
bindAddr = "127.0.0.1"
# 此处需要与内网端口一致
bindPort = 9001
#---------------------配置 web1 访问服务--------------------#
# =============================================================================
6.3 创建启动文件
1、新建记事本,命名【start_frpc.bat】
2、使用编辑器(Notepad++)打开 start_frpc.bat 文件后进行编辑后保存。
bash
frpc.exe -c frpc.toml
6.4 访问服务
1、双击【start_frpc.bat】启动文件。

2、打开浏览器输入【http://127.0.0.1:9001/】
按照预期出现页面,代表服务配置成功,反之亦然。