type
Post
status
Published
date
Aug 24, 2026
slug
frp
summary
基于公网Linux服务器对内网Windows系统进行网络穿透
tags
开发
建站
工具
FRP
category
技术分享
icon
password
💡
本教程仅基于 Linux服务器(宝塔) + Window客户端 的环境配置,较为完整的教程请参考[5]博客园那一篇文章。
注意:不论参考哪篇教程,请关注参数配置中,你所使用的配置项是否存在,FRP各版本之间的参数配置可能不兼容。

参考链接

 

一、服务器配置

1、下载、安装、上传

从[1]中下载对应服务器所需的 FRP 文件,如果不知道应该下载哪个版本的 FRP 文件,也可以问AI。如我的 CentOS 服务器终端输入命令 uname -m 打印出 x86_64 , AI建议下载 frp_0.71.0_darwin_amd64.tar.gz
将下载的文件解压后,上传到服务器上,本教程使用 /usr/local/frps 目录存放。
关于 FRP 的命名, frps(Server)指服务端,frpc(Client)指用户端,你可以全部上传,也可以只上传所需部分。
在上传到服务器中的 frps.toml 文件中填入下方配置,关于此配置,可结合参考[2]和[5]。
 

2、安装 FRP 管理器 systemd

参考[4],本机是 CentOS,因此使用命令 yum install systemd 安装
 

3、添加 systemd 配置项

使用 sudo vim /etc/systemd/system/frps.service
粘贴配置如下,不懂可以问AI,此处 ExecStart 中对应第1步中 FRP 文件所在目录。
然后分别使用 esc + :wq 保存并退出 vim编辑器(如果服务器用的是vim)
 

4、systemd 控制命令

若无法启动,且报错 Failed with result 'xxxxxxx'. 时,可以运行下方的命令查看你第1步配置中的 FRP 配置项参数哪些有问题
 

5、设置 FRP 开机启动

启动并查看状态没问题之后,输入以下命令设置 FRP 开机启动 sudo systemctl enable frps
 

6、开放端口

你需要给服务器开放上方配置中所需的端口号,如果你有宝塔,宝塔防火墙也得开放所需端口。
然后在浏览器输入 服务器公网IP设置的子域名 后面加上端口号(如 11.111.11.11:18080test.example.com:18080 )来访问你的服务(此时客户端未配置,仅可访问 FRP 管理面板,即上方配置的 7500 端口,然后账密也在你的服务器配置中)。
 

7、修改配置需重启

注意,每次修改服务端 FRP 配置后,需要手动重启服务端 FRP 服务,否则无效

二、客户端配置

1、下载

参照上方服务器部分第1步,下载需要内网穿透的设备对应的 FRP 版本,本机为Windows11,使用frp_0.71.0_windows_amd64.zip

2、修改客户端配置

我的配置如下,具体请参考[3][5]

3、启动客户端

打开 FRP 文件所在文件夹,在顶部地址栏输入 cmd 再敲回车,然后就可以快速抵达在本地存放 FRP 文件的目录的终端地址,输入frpc.exe -c frpc.toml 即可启动客户端,若遇报错可问AI。
 

4、修改配置需重启

注意,每次修改客户端 FRP 配置后,需要手动重启客户端 FRP 服务,否则无效
 

三、其他准备或优化

1、服务器需要暴露的端口

上文我的教程中 http 等服务没有使用默认的 80/443 等端口,是因为服务器内已有 Nginx 服务占用。如果你没有其他项目,直接设置的 80/443 等端口,可以直接通过 服务器公网IP设置的子域名 访问你的 FRP 面板和服务(如 11.111.11.11test.example.com);
如果使用了类似我的非默认端口,则必须在 服务器公网IP设置的子域名 后面加上端口号(如 11.111.11.11:18080test.example.com:18080 ),也可以参考下方说明进行优化。

2、域名访问优化

端口这部分比较繁琐,需要域名解析、Nginx代理相关的知识,此处仅简要介绍我所做的部分优化访问的操作。
(1). 域名解析添加 *A 记录到自己的服务器 11.111.11.11 ,和自己的域名 example.com 是同一个服务器解析
* 是泛域名解析,所有没有单独解析的子域名,即 *.example.com 类型的访问都会指向这个服务器,减少每次需要配置的操作
(2). 服务端设置一级域名 subDomainHost = example.com ,本地的代理服务每次使用 subdomain = "xxx” 设置子域名(二级域名),则可直接通过 子域名+服务端口号 访问
(3). 因为我使用了宝塔,则直接创建了一个空的 html 项目,使用上方演示的子域名 test.example.com ,然后添加为其部署泛域名 *.example.com SSL证书以支持HTTPS访问(证书可忽略),最后在伪静态中添加如下配置,即可将 test.example.com 的访问直接指向服务器内部的 FRP 代理。
此时访问代理地址就不用额外指定端口号 18080 了,直接使用 test.example.com 访问即可。
注意,此时这个 test.example.com 下的 80 服务,即创建的空 html 项目就无效了。
并且代理时不需要再区分HTTP/HTTPS,统一由Nginx管理。
此外还有一个好处是,可以关闭 FRP 服务所需暴露给服务器外部的多个端口号,如 vhostHTTPPortvhostHTTPSPort 的端口;如果不需要提供管理面板访问,可以关掉 webServer.port 的端口;但必须保留 bindPort 绑定的端口,因为这是 FRP 服务所必需的。 相当于借用了 Nginx 对外暴露的 80/443 端口,由 Nginx 将请求转发到服务器内部的 FRP HTTP 服务端口;但 FRP 的 bindPort 是客户端与服务端建立连接所必需的,因此仍必须对需要连接的客户端开放。

3、P2P模式

以上服务的网速受限于服务器和客户端之间最慢的那个,即木桶效应的短板,如果要让客户端和访问者直连,不再受限于服务器网速(如果服务器网速是最慢的话),可以使用P2P模式。
P2P 模式需要服务器上运行 frps,提供服务的电脑(我所称的客户端)运行 frpc,访问服务的电脑(访问者)也运行 frpc
因此,服务端无需修改,内网穿透的客户端需要增加如下配置:
访问者配置如下(本质上仍是一个客户端,所以上半部分配置差不多):
经过结构图示如下:
经测试,必须客户端先暴露,访问端才能链接,客户端服务重启后,访问端无法断线重连,必须手动再重启链接。
双方开启服务后系统会弹窗提醒 FRPC 需要访问网络,同意即可。

4.优化Windows端启动方式

创建一个 txt 文本文件,填入下方的脚本代码后,将文件后缀改为 .bat ,双击即可启动。注意下方的 D:\frp_0.71.0 必须修改为你存放 FRP 文件的路径。
Socket.io笔记(踩坑指南)前端字体压缩方案
Loading...