本机端口的内网穿透映射实践
一、引言
在本地开发、远程联机、临时演示或自建服务调试时,经常会遇到一个问题:服务明明已经在自己电脑上启动了,但公网用户无法直接访问。
原因通常很简单,本机处在家庭宽带、校园网、公司内网或运营商NAT之后,没有可直接访问的公网入口。即使本机服务监听了127.0.0.1:8080、127.0.0.1:25565或其他端口,外部网络也无法主动连接到这台机器。
内网穿透要解决的就是这个问题。它通常需要一台拥有公网IP的服务器作为中转入口,本机主动连接到这台公网服务器,然后公网访问者再连接公网服务器的某个端口,由公网服务器把流量转发回本机端口。
本文以frp为基础,记录一次较为实用的本机端口映射流程:
- 准备一台已部署宝塔面板的轻量云服务器;
- 在宝塔面板的软件商店中安装
frp管理器; - 通过
frp管理器一键安装并配置服务端frps; - 在本机安装
Frpc Desktop作为可视化客户端; - 将本机端口映射到服务器公网端口,完成内网穿透访问。
本文重点讲解实践流程,示例以TCP端口映射为主。只要理解了这个流程,后续映射本地网页、接口服务、游戏服务、数据库调试端口或其他本地服务时,本质上都是相同思路。
二、内网穿透的基本概念
1.为什么公网不能直接访问本机
本机服务通常会监听在以下地址之一:
1 | 127.0.0.1:8080 |
其中127.0.0.1和localhost只允许当前机器访问,192.168.x.x这类地址属于局域网私有地址,只在当前路由器或内网环境中有效。公网用户无法直接从互联网访问这些地址。
如果本地网络没有公网IP,或者路由器、防火墙、运营商网络无法做端口转发,就需要借助一台公网服务器作为中转节点。
2.frp的角色划分
frp主要分为两个部分:
frps:服务端,部署在拥有公网IP的云服务器上;frpc:客户端,部署在需要暴露本地服务的本机上。
访问链路可以简单理解为:
1 | 公网用户 |
例如本机有一个服务监听在127.0.0.1:25565,通过frp把它映射到云服务器的25565端口后,外部用户访问:
1 | 云服务器公网IP:25565 |
实际流量就会被转发到:
1 | 本机127.0.0.1:25565 |
3.本文示例端口规划
为了便于说明,本文采用如下示例配置:
1 | 云服务器公网IP:x.x.x.x |
其中15443用于frpc连接frps,25565是最终提供给公网用户访问的映射端口。实际使用时可以根据需要改成8080、3000、5000、3306或其他端口,但不要和服务器上已有服务冲突。
三、部署前准备
1.准备云服务器
开始之前,需要先准备一台轻量云服务器或普通云服务器,建议满足以下条件:
- 服务器具有公网
IP; - 已安装宝塔面板;
- 可以正常登录宝塔面板;
- 云厂商安全组允许放行自定义端口;
- 服务器系统防火墙或宝塔安全页面允许放行自定义端口。
如果只是学习和临时演示,轻量云服务器通常已经够用。如果用于长期服务转发,需要关注服务器带宽、流量包、延迟和稳定性。
2.准备本机服务
本机需要先有一个已经正常运行的服务。以本文截图中的配置为例,本机服务端口为25565,可以用来表示一个本地游戏服务端,也可以换成其他服务端口。
在Windows中可以使用以下命令查看端口监听情况:
1 | netstat -ano | findstr 25565 |
如果是本地网页服务,例如Vite、Spring Boot、Node.js或其他开发服务,也可以先在浏览器中访问:
1 | http://127.0.0.1:8080 |
只有本机访问正常,后续通过frp转发才有意义。
3.规划需要放行的端口
至少需要放行两类端口:
frps服务端端口:用于本机frpc连接云服务器,例如15443;- 对外映射端口:用于公网用户访问本机服务,例如
25565。
如果使用HTTP或HTTPS类型代理,还需要根据服务端配置放行HTTP协议端口和HTTPS协议端口。如果使用KCP,还要注意它走的是UDP端口。
云服务器通常有两层端口限制:
- 云厂商控制台中的安全组;
- 服务器系统或宝塔面板中的防火墙。
排查连接失败时,不要只检查其中一处。
四、在宝塔面板中安装frp管理器
1.进入软件商店
登录宝塔面板后,进入左侧菜单中的软件商店,在应用搜索框中搜索frp。如果已经安装,可以在已安装列表中看到frp管理器。

打开frp管理器后,一般可以看到frp服务端和frp客户端两个入口。本文使用云服务器作为服务端,因此主要配置frp服务端。
2.一键部署服务端frps
在frp服务端页面中,通常会提供服务安装、启动、停止、配置文件、日志查看等功能。对于初次使用来说,可以优先使用插件提供的一键安装能力完成frps部署。
安装完成后,确认服务处于运行状态。如果服务无法启动,先查看插件中的日志,常见原因包括端口被占用、配置文件格式错误或权限不足。
3.配置服务端端口
进入服务配置页面,可以看到服务端常用配置项。

常见字段含义如下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
| 服务器IP | x.x.x.x |
云服务器公网IP,客户端需要连接该地址 |
| 服务器端口 | 15443 |
frpc连接frps的主端口 |
| HTTP协议端口 | 18080 |
使用HTTP类型代理时的访问入口 |
| HTTPS协议端口 | 18443 |
使用HTTPS类型代理时的访问入口 |
| KCP端口 | 15443 |
使用KCP传输时的端口,通常需要放行UDP |
| HTTP代理端口 | 16337 |
插件提供的代理相关端口,按实际插件说明使用 |
| 最大连接池数 | 50 |
单个代理允许的最大连接数量 |
对于本文的TCP端口映射示例,重点关注服务器IP、服务器端口和后续客户端填写的外网端口。保存配置后,建议重启一次frps服务,使配置生效。
4.查看token配置
frp服务端和客户端之间通常会使用token进行认证。宝塔插件中一般会提供token配置查看入口,点击后记录对应的token值。
客户端连接时需要保持以下内容一致:
1 | 服务器IP = 宝塔插件中显示的服务器IP |
如果token不一致,客户端通常会连接失败,日志中会出现认证失败相关提示。
五、在本机安装Frpc Desktop
1.下载并安装客户端
Frpc Desktop是一个跨平台的frp桌面客户端,适合不想手写frpc.toml配置文件的场景。它提供了图形化的服务端配置、代理配置、日志查看和启动管理能力。
在本机安装完成后,先进入应用的下载或配置页面,确保已经下载可用的frp核心程序。不同版本界面略有差异,但核心配置项基本一致。
2.添加服务端配置
客户端首先需要知道要连接哪一台frps服务器。根据宝塔面板中的服务端配置,填写以下信息:
1 | 服务器地址:云服务器公网IP |
如果客户端提供TLS、KCP、连接池、日志等级等选项,初次配置建议先保持默认。等基础连通性验证成功后,再根据需要开启压缩、加密或其他高级参数。
3.添加TCP代理
进入代理管理页面,新增一个代理配置。截图中示例使用的是TCP代理。

关键配置如下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
| 代理类型 | tcp |
直接进行TCP端口转发 |
| 代理名称 | MINECRAFT |
自定义名称,便于识别 |
| 内网地址 | 127.0.0.1 |
本机服务监听地址 |
| 内网端口 | 25565 |
本机服务端口 |
| 外网端口 | 25565 |
云服务器对公网暴露的端口 |
| 压缩传输 | 关闭 | 对普通端口映射可先关闭 |
| 加密传输 | 关闭 | 初次调试可先关闭,按需开启 |
| 代理协议版本 | 空 | 不需要获取真实客户端IP时可保持为空 |
配置完成后点击保存,并启动该代理。如果启动成功,Frpc Desktop中通常可以看到代理在线状态和映射地址。
等价的frpc.toml配置大致如下:
1 | serverAddr = "x.x.x.x" |
通过可视化客户端配置,本质上就是生成并运行类似上面的frpc配置。
六、放行服务器端口
完成服务端和客户端配置后,还需要确认端口已经真正对公网开放。
以本文示例为例,需要放行:
1 | TCP 15443:frpc连接frps使用 |
如果使用KCP,还需要额外放行:
1 | UDP 15443 |
如果使用宝塔面板的安全页面,可以在安全菜单中添加放行规则。如果云服务器还配置了安全组,也要在云厂商控制台同步放行对应端口。
在云服务器上可以通过以下命令检查监听端口:
1 | ss -lntup | grep -E '15443|25565' |
在本机或其他外部机器上可以使用:
1 | Test-NetConnection x.x.x.x -Port 25565 |
如果端口测试失败,需要结合服务端日志、客户端日志和安全组配置一起排查。
七、访问验证
当frps运行正常、frpc连接成功、代理状态在线、端口已经放行后,就可以从外部网络访问:
1 | x.x.x.x:25565 |
如果映射的是本地网页服务,例如本机127.0.0.1:8080,并将外网端口设置为18081,则访问方式为:
1 | http://x.x.x.x:18081 |
如果映射的是游戏服务或其他TCP服务,则在对应客户端中填写:
1 | x.x.x.x:25565 |
测试时建议使用非本机网络,例如手机热点、另一台服务器或其他外部网络环境。这样可以避免本地网络缓存、路由器回环访问等因素干扰判断。
八、常见问题排查
1.frpc连接不上frps
优先检查以下内容:
- 云服务器公网
IP是否填写正确; frps服务端端口是否与客户端填写一致;- 宝塔面板中的
frps服务是否已经启动; - 云厂商安全组是否放行了
frps服务端端口; - 宝塔安全页面或系统防火墙是否放行了该端口;
- 客户端填写的
token是否与服务端一致。
服务端连接端口不通时,客户端无法建立长连接,后续代理端口也不会生效。
2.客户端在线,但公网端口访问失败
这种情况通常说明frpc已经连上了frps,但具体代理没有转发成功。可以检查:
- 外网端口是否被其他服务占用;
- 外网端口是否已经在云安全组和宝塔防火墙中放行;
Frpc Desktop中的代理是否已经启用;- 本机服务是否真的监听在配置的
内网地址和内网端口上; - 本机系统防火墙是否拦截了本地服务;
- 服务是否只允许特定来源访问。
如果本机服务监听在127.0.0.1,客户端中的内网地址就填写127.0.0.1。如果服务运行在局域网另一台设备上,则需要填写那台设备的局域网IP,例如192.168.1.20。
3.端口已经占用
如果服务端或映射端口被占用,frps或代理会启动失败。云服务器上可以使用:
1 | ss -lntup | grep 25565 |
本机Windows可以使用:
1 | netstat -ano | findstr 25565 |
确认占用进程后,可以换一个外网端口,或者停止占用该端口的服务。外网端口不一定要和内网端口一致,例如也可以配置为:
1 | 本机内网端口:25565 |
访问时使用:
1 | x.x.x.x:32565 |
4.HTTP服务应该用TCP还是HTTP代理
如果只是快速暴露一个本地网页服务,使用TCP代理也可以工作,例如:
1 | 127.0.0.1:8080 -> x.x.x.x:18081 |
然后访问:
1 | http://x.x.x.x:18081 |
如果希望通过域名、子域名或路径进行访问,可以考虑使用HTTP或HTTPS类型代理,并在服务端配置HTTP协议端口、HTTPS协议端口和域名解析。对于初次使用来说,先用TCP代理跑通链路,再扩展到域名访问会更容易排查。
5.是否应该把数据库端口直接映射出去
不建议把数据库、缓存、后台管理端口直接暴露到公网。即使可以通过frp映射,也应该尽量限制访问来源、增加强认证,或只用于临时调试。
尤其是以下端口需要谨慎:
1 | 3306 MySQL |
如果确实需要远程访问,建议优先考虑VPN、SSH Tunnel、白名单、防火墙规则和临时开放策略。
九、使用建议
1.端口命名要有规划
如果后续会映射多个本地服务,建议提前规划外网端口范围。例如:
1 | 30000-30999:本地开发服务 |
这样可以避免多个代理之间互相冲突,也方便在宝塔面板和云安全组中统一维护。
2.优先查看日志
排错时不要只凭页面状态判断。宝塔frp管理器和Frpc Desktop都提供日志入口。常见错误通常会直接出现在日志中,例如:
1 | authentication failed |
日志能够快速判断问题发生在服务端、客户端、本机服务还是公网端口。
3.长期使用要关注安全和带宽
内网穿透本质上是把本机服务暴露到公网。长期运行时需要关注:
token不要使用弱口令;- 不使用的代理及时关闭;
- 外网端口不要随意开放;
- 宝塔面板和
frp管理器保持更新; - 云服务器带宽和流量是否足够;
- 重要服务不要裸奔到公网。
如果映射的是公开服务,建议额外配合域名、HTTPS、访问认证和反向代理规则,降低被扫描和误访问的风险。
十、总结
使用宝塔面板中的frp管理器可以较快完成frps服务端部署,省去了手动下载二进制文件、编写服务文件和维护启动脚本的步骤。再配合本机的Frpc Desktop,可以通过图形界面完成frpc客户端配置,对临时调试和日常映射都比较方便。
整个流程的核心可以概括为三步:
- 在公网服务器上启动
frps,并放行服务端连接端口; - 在本机通过
Frpc Desktop连接frps,配置本机端口和外网端口; - 在云服务器安全组和宝塔防火墙中放行外网端口,然后从公网访问验证。
只要理解公网服务器端口 -> frps -> frpc -> 本机端口这条链路,后续无论是映射本地网页、接口服务还是其他TCP服务,都可以按同样思路完成。
参考资料
- Title: 本机端口的内网穿透映射实践
- Author: QingchenJia
- Created at : 2026-05-20 13:45:39
- Updated at : 2026-08-04 16:14:38
- Link: https://qingchenjia.github.io/2026/05/20/本机端口的内网穿透映射实践/
- License: This work is licensed under CC BY-NC-SA 4.0.