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 frps6、开放端口
你需要给服务器开放上方配置中所需的端口号,如果你有宝塔,宝塔防火墙也得开放所需端口。
然后在浏览器输入
服务器公网IP 或 设置的子域名 后面加上端口号(如 11.111.11.11:18080 或 test.example.com:18080 )来访问你的服务(此时客户端未配置,仅可访问 FRP 管理面板,即上方配置的 7500 端口,然后账密也在你的服务器配置中)。7、修改配置需重启
注意,每次修改服务端
FRP 配置后,需要手动重启服务端 FRP 服务,否则无效二、客户端配置
1、下载
参照上方服务器部分第1步,下载需要内网穿透的设备对应的
FRP 版本,本机为Windows11,使用frp_0.71.0_windows_amd64.zip2、修改客户端配置
我的配置如下,具体请参考[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.11或 test.example.com);如果使用了类似我的非默认端口,则必须在
服务器公网IP 或 设置的子域名 后面加上端口号(如 11.111.11.11:18080 或 test.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 服务所需暴露给服务器外部的多个端口号,如 vhostHTTPPort 、 vhostHTTPSPort 的端口;如果不需要提供管理面板访问,可以关掉 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 文件的路径。- 作者:默默
- 链接:https://blogs.muxidream.cn/technology/frp
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。









