本机端口的内网穿透映射实践

QingchenJia Lv4

一、引言

在本地开发、远程联机、临时演示或自建服务调试时,经常会遇到一个问题:服务明明已经在自己电脑上启动了,但公网用户无法直接访问。

原因通常很简单,本机处在家庭宽带、校园网、公司内网或运营商NAT之后,没有可直接访问的公网入口。即使本机服务监听了127.0.0.1:8080127.0.0.1:25565或其他端口,外部网络也无法主动连接到这台机器。

内网穿透要解决的就是这个问题。它通常需要一台拥有公网IP的服务器作为中转入口,本机主动连接到这台公网服务器,然后公网访问者再连接公网服务器的某个端口,由公网服务器把流量转发回本机端口。

本文以frp为基础,记录一次较为实用的本机端口映射流程:

  1. 准备一台已部署宝塔面板的轻量云服务器;
  2. 在宝塔面板的软件商店中安装frp管理器
  3. 通过frp管理器一键安装并配置服务端frps
  4. 在本机安装Frpc Desktop作为可视化客户端;
  5. 将本机端口映射到服务器公网端口,完成内网穿透访问。

本文重点讲解实践流程,示例以TCP端口映射为主。只要理解了这个流程,后续映射本地网页、接口服务、游戏服务、数据库调试端口或其他本地服务时,本质上都是相同思路。

二、内网穿透的基本概念

1.为什么公网不能直接访问本机

本机服务通常会监听在以下地址之一:

1
2
3
127.0.0.1:8080
localhost:8080
192.168.1.100:8080

其中127.0.0.1localhost只允许当前机器访问,192.168.x.x这类地址属于局域网私有地址,只在当前路由器或内网环境中有效。公网用户无法直接从互联网访问这些地址。

如果本地网络没有公网IP,或者路由器、防火墙、运营商网络无法做端口转发,就需要借助一台公网服务器作为中转节点。

2.frp的角色划分

frp主要分为两个部分:

  • frps:服务端,部署在拥有公网IP的云服务器上;
  • frpc:客户端,部署在需要暴露本地服务的本机上。

访问链路可以简单理解为:

1
2
3
4
5
6
7
8
9
10
11
12
13
公网用户
|
v
云服务器公网IP:外部端口
|
v
frps服务端
|
v
frpc客户端长连接
|
v
本机127.0.0.1:本地端口

例如本机有一个服务监听在127.0.0.1:25565,通过frp把它映射到云服务器的25565端口后,外部用户访问:

1
云服务器公网IP:25565

实际流量就会被转发到:

1
本机127.0.0.1:25565

3.本文示例端口规划

为了便于说明,本文采用如下示例配置:

1
2
3
4
5
6
7
云服务器公网IP:x.x.x.x
frps服务端端口:15443
frps HTTP协议端口:18080
frps HTTPS协议端口:18443
frps KCP端口:15443
本机待映射服务:127.0.0.1:25565
公网访问端口:25565

其中15443用于frpc连接frps25565是最终提供给公网用户访问的映射端口。实际使用时可以根据需要改成8080300050003306或其他端口,但不要和服务器上已有服务冲突。

三、部署前准备

1.准备云服务器

开始之前,需要先准备一台轻量云服务器或普通云服务器,建议满足以下条件:

  • 服务器具有公网IP
  • 已安装宝塔面板;
  • 可以正常登录宝塔面板;
  • 云厂商安全组允许放行自定义端口;
  • 服务器系统防火墙或宝塔安全页面允许放行自定义端口。

如果只是学习和临时演示,轻量云服务器通常已经够用。如果用于长期服务转发,需要关注服务器带宽、流量包、延迟和稳定性。

2.准备本机服务

本机需要先有一个已经正常运行的服务。以本文截图中的配置为例,本机服务端口为25565,可以用来表示一个本地游戏服务端,也可以换成其他服务端口。

Windows中可以使用以下命令查看端口监听情况:

1
netstat -ano | findstr 25565

如果是本地网页服务,例如ViteSpring BootNode.js或其他开发服务,也可以先在浏览器中访问:

1
http://127.0.0.1:8080

只有本机访问正常,后续通过frp转发才有意义。

3.规划需要放行的端口

至少需要放行两类端口:

  1. frps服务端端口:用于本机frpc连接云服务器,例如15443
  2. 对外映射端口:用于公网用户访问本机服务,例如25565

如果使用HTTPHTTPS类型代理,还需要根据服务端配置放行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
2
3
服务器IP = 宝塔插件中显示的服务器IP
服务器端口 = 宝塔插件中配置的服务器端口
token = 宝塔插件中生成或配置的token

如果token不一致,客户端通常会连接失败,日志中会出现认证失败相关提示。

五、在本机安装Frpc Desktop

1.下载并安装客户端

Frpc Desktop是一个跨平台的frp桌面客户端,适合不想手写frpc.toml配置文件的场景。它提供了图形化的服务端配置、代理配置、日志查看和启动管理能力。

在本机安装完成后,先进入应用的下载配置页面,确保已经下载可用的frp核心程序。不同版本界面略有差异,但核心配置项基本一致。

2.添加服务端配置

客户端首先需要知道要连接哪一台frps服务器。根据宝塔面板中的服务端配置,填写以下信息:

1
2
3
服务器地址:云服务器公网IP
服务器端口:15443
认证token:宝塔frp管理器中的token

如果客户端提供TLSKCP、连接池、日志等级等选项,初次配置建议先保持默认。等基础连通性验证成功后,再根据需要开启压缩、加密或其他高级参数。

3.添加TCP代理

进入代理管理页面,新增一个代理配置。截图中示例使用的是TCP代理。

关键配置如下:

配置项 示例值 说明
代理类型 tcp 直接进行TCP端口转发
代理名称 MINECRAFT 自定义名称,便于识别
内网地址 127.0.0.1 本机服务监听地址
内网端口 25565 本机服务端口
外网端口 25565 云服务器对公网暴露的端口
压缩传输 关闭 对普通端口映射可先关闭
加密传输 关闭 初次调试可先关闭,按需开启
代理协议版本 不需要获取真实客户端IP时可保持为空

配置完成后点击保存,并启动该代理。如果启动成功,Frpc Desktop中通常可以看到代理在线状态和映射地址。

等价的frpc.toml配置大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
serverAddr = "x.x.x.x"
serverPort = 15443

[auth]
method = "token"
token = "your-token"

[[proxies]]
name = "minecraft"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565

通过可视化客户端配置,本质上就是生成并运行类似上面的frpc配置。

六、放行服务器端口

完成服务端和客户端配置后,还需要确认端口已经真正对公网开放。

以本文示例为例,需要放行:

1
2
TCP 15443:frpc连接frps使用
TCP 25565:公网用户访问映射服务使用

如果使用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
2
本机内网端口:25565
公网外网端口:32565

访问时使用:

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

如果希望通过域名、子域名或路径进行访问,可以考虑使用HTTPHTTPS类型代理,并在服务端配置HTTP协议端口HTTPS协议端口和域名解析。对于初次使用来说,先用TCP代理跑通链路,再扩展到域名访问会更容易排查。

5.是否应该把数据库端口直接映射出去

不建议把数据库、缓存、后台管理端口直接暴露到公网。即使可以通过frp映射,也应该尽量限制访问来源、增加强认证,或只用于临时调试。

尤其是以下端口需要谨慎:

1
2
3
4
5
6
3306  MySQL
5432 PostgreSQL
6379 Redis
27017 MongoDB
22 SSH
3389 RDP

如果确实需要远程访问,建议优先考虑VPNSSH Tunnel、白名单、防火墙规则和临时开放策略。

九、使用建议

1.端口命名要有规划

如果后续会映射多个本地服务,建议提前规划外网端口范围。例如:

1
2
3
30000-30999:本地开发服务
31000-31999:游戏或测试服务
32000-32999:临时演示服务

这样可以避免多个代理之间互相冲突,也方便在宝塔面板和云安全组中统一维护。

2.优先查看日志

排错时不要只凭页面状态判断。宝塔frp管理器Frpc Desktop都提供日志入口。常见错误通常会直接出现在日志中,例如:

1
2
3
4
5
authentication failed
port already used
connect to server error
proxy name already exists
connection refused

日志能够快速判断问题发生在服务端、客户端、本机服务还是公网端口。

3.长期使用要关注安全和带宽

内网穿透本质上是把本机服务暴露到公网。长期运行时需要关注:

  • token不要使用弱口令;
  • 不使用的代理及时关闭;
  • 外网端口不要随意开放;
  • 宝塔面板和frp管理器保持更新;
  • 云服务器带宽和流量是否足够;
  • 重要服务不要裸奔到公网。

如果映射的是公开服务,建议额外配合域名、HTTPS、访问认证和反向代理规则,降低被扫描和误访问的风险。

十、总结

使用宝塔面板中的frp管理器可以较快完成frps服务端部署,省去了手动下载二进制文件、编写服务文件和维护启动脚本的步骤。再配合本机的Frpc Desktop,可以通过图形界面完成frpc客户端配置,对临时调试和日常映射都比较方便。

整个流程的核心可以概括为三步:

  1. 在公网服务器上启动frps,并放行服务端连接端口;
  2. 在本机通过Frpc Desktop连接frps,配置本机端口和外网端口;
  3. 在云服务器安全组和宝塔防火墙中放行外网端口,然后从公网访问验证。

只要理解公网服务器端口 -> 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.