我所搭建的frp服务用到的场景是游戏联机(minecraft),因为网络运用商的网络不支持ipv6,不能用ipv6和朋友们联机玩,偶尔的闲暇时间也并没有一款好的联机软件(要么要钱)进行联机,本着自己也是程序员,找内网穿透方案自己搭建服务不就好了,学以致用嘛。
frp 是什么?
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
frp文档:https://gofrp.org/zh-cn/
Frp中有两个服务需要分别在服务器、本地设备进行启动
说明下:在服务器端的是frps
,在本地设备(客户端)是frpc
一、服务器端 - Frps搭建
1. 下载frps文件并解压:
wget https://github.com/fatedier/frp/releases/download/v0.62.0/frp_0.62.0_linux_amd64.tar.gz
tar -xvf frp_0.62.0_linux_amd64.tar.gz
如果是使用了finalShell等软件也可以从github上自己下载frp相关文件,上传到服务器上就好
注意:服务器系统架构需要下载对应的frp文件, 如适用于现代 64 位 Linux(如 Ubuntu/CentOS 的 x86_64 架构)就和我一样下载amd64
版本;若服务器是 ARM 架构(如树莓派),需下载 arm64
版本。
2. frps文件转移至/opt/frp文件夹下
我是放在/opt/frp文件夹下的,各位可以自行放置其他文件夹
mkdir /opt/frp
mv frp_0.62.0_linux_amd64 /opt/frp/
3. 配置frps文件
配置frps.toml文件内容,更多的配置参数可以自行查询frp
bindPort
: frps的监听端口
webServer.addr
= "0.0.0.0"
webServer.port
: frps后台端口
webServer.user
: frps后台登陆用户名,可选
webServer.password
: frps后台登陆密码,可选
auth.token
: frps服务与frpc服务连接的识别token,可选参数
# 编辑 frps.toml 文件
vim /opt/frp/frp_0.62.0_linux_amd64/frps.toml
# 将以下内容写入frps.toml内
bindPort = 7000
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "123456"
auth.token = "Yos1Oi-RlMV"
4. systemd管理frps服务
也可以查看frp官网的教程: gofrp.org/zh-cn/docs/…
其中ExecStart
属性是启动frps的命令,需要对应之前下载的frps文件
# 1.下载systemd
yum install systemd
# 2.编辑 systemd 管理frps的文件
vim /etc/systemd/system/frps.service
# 3.将以下内容复制进frps.service文件内
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /opt/frp/frp_0.62.0_linux_amd64/frps -c /opt/frp/frp_0.62.0_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
5. frps,启动!
使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 设置 frps 开机自启动
sudo systemctl enable frps
# 禁止 frps 开机启动
sudo systemctl disable frps
sudo systemctl start frps 启动frp服务后,访问服务器的公网地址+frps后台端口,如果有设置账号密码,按照设置的账号和密码登陆后即可,可见frps后台(后续可以在这里可以看到有哪些frpc连接的通道),说明fprs服务已经搭建和启动成功!
二、本地设备(客户端) - Frpc搭建
1. 下载frpc文件
从github上下载frpc相关文件,也要注意下对应系统架构,需要下载对应frpc文件,否则会启动不了frpc命令,一般windows系统下载amd64
的文件即可。
附加此次frp版本的amd64文件下载地址:github.com/fatedier/fr…
2. 配置frpc文件
解压下载的zip文件后,frpc.toml文件配置如下:
serverAddr
: 服务器的公网ip地址
serverPort
: 服务的frps监听端口
auth.token
: frps的配置如果有设置,需要与frps.toml的一致,用以连接识别;没有则可以删除
[[proxies]]
name
: frp服务名称
type
: 连接类型
localIP
: 本地地址
localPort
: 本地服务的端口
remotePort
: 服务器开放的访问的端口
transport.useCompression
: 是否对传输内容进行压缩, 可选
serverAddr = "xxxxxx"
serverPort = 7000
auth.token = "Yos1Oi-RlMV"
[[proxies]]
name = "WBOOs0C-lwzc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 4850
remotePort = 26053
transport.useCompression = true
3. frpc, 启动!
在frpc.exe和frpc.toml文件的目录下使用命令:
.\frpc.exe -c .\frpc.toml
如图一样则说明连接成功了!
咱可以去frps的后台去看下,tcp那边是否有通道
看到通道出现,并且处于online
状态,说明咱frp的服务搭建成功了!
义子们尽情的欢呼吧
为了博主自己不在的时候,方便那群义子联机,博主也是用vue3
+vite
+electron
顺便搭建了一个简单的桌面应用给义子们联机。
这个桌面应用等博主有空了,稍等后面我会开源和再发一篇文章出来!
FRP除了游戏联机,其他应用的场景如下:
以下场景功能是根据deepseek列出来的,具体实现各位自行探索哈
1. 远程桌面/远程控制
- Windows远程桌面(RDP)
通过映射内网Windows主机的3389端口,实现在外网通过RDP协议远程控制电脑。 - VNC/TeamViewer替代方案
内网主机运行VNC服务,通过FRP穿透后,直接使用VNC客户端远程访问。
2. Web服务对外发布
- 本地网站/博客对外访问
将内网搭建的Web服务(如IIS、Apache、Nginx)映射到公网,支持HTTP/HTTPS协议,实现外网浏览器访问。 - 内网Web应用测试
开发阶段的Web应用(如本地调试的API、前端项目)可通过FRP生成临时公网URL,方便远程协作测试。
3. 文件共享与传输
- FTP/SFTP服务穿透
内网文件服务器通过FRP暴露,实现远程文件上传下载。 - SMB/NAS访问
将内网NAS或共享文件夹映射到公网,安全配置后实现跨网络文件访问(需注意安全风险)。
4. 数据库远程管理
- MySQL/PostgreSQL/MongoDB外网连接
开发或运维场景中,临时开放内网数据库到公网,方便远程管理(强烈建议限制IP并启用加密)。
5. SSH安全访问内网设备
- 跳板访问内网Linux服务器
通过FRP映射SSH端口(22),在外网直接使用SSH客户端连接内网服务器或树莓派等设备。
6. 内网API接口调试
- 本地API对外暴露
开发者在本地编写的RESTful API接口,通过FRP生成公网地址,方便移动端或第三方服务调试。
7. 游戏服务器联机
- Minecraft/饥荒等游戏服务器
将本地搭建的游戏服务器穿透到公网,支持好友联机(需注意带宽和延迟问题)。
8. IoT设备远程管理
- 智能家居/NAS管理界面
内网的树莓派、HomeAssistant、群晖NAS等设备的管理界面,通过FRP实现外网访问。
9. 安全监控与摄像头访问
- 内网监控系统穿透
访问内网部署的摄像头、NVR监控系统(如海康威视、大华)的Web界面,需确保权限控制。
10. 高级功能
- TCP/UDP端口任意转发
支持任意基于TCP/UDP协议的自定义服务穿透(如私有协议、工业设备通信)。 - 端口范围映射
批量映射多个端口,适用于复杂服务场景。 - 负载均衡与插件扩展
结合多台FRP服务端实现流量分发,或使用插件(如stcp
安全隧道)避免直接暴露端口。