什么是内网穿透?
内网穿透是一种网络连接技术:它让外网设备能够访问家里、公司或本地电脑中运行的服务,即使这台设备没有可被互联网直接访问的公网 IP。

它解决的是“外部请求找不到内网机器”的问题。家用宽带、公司网络和校园网通常把设备放在 NAT(Network Address Translation,网络地址转换)后面,电脑只拿到 192.168.x.x、10.x.x.x 或 172.16.x.x 到 172.31.x.x 这样的私有地址。外网不能直接把请求送到这些地址。
内网穿透的做法是让内网客户端先主动连接一台有公网 IP 的服务器,建立持续的双向隧道。外部请求先到公网服务器,再沿着隧道转发到本地服务,响应则沿原路返回。
这篇文章会回答五个实际问题:
- 为什么没有公网 IP 时,外网无法直接访问本地服务?
- 内网客户端、公网服务器和访问者分别做什么?
- 没有公网 IP 时,怎样把本地网站或开发接口临时开放给外网?
- 托管服务、自己部署 frp 等方案应该怎么选?
- 穿透后有哪些安全、速度和维护风险?
结论先说:内网穿透不是把内网地址变成公网地址,而是借助一台公网中转服务器,把一条由内向外建立的连接反向利用起来。
为什么没有公网 IP 就无法直接访问内网服务?
核心原因是 NAT 和防火墙同时隐藏了内网设备。路由器把多台内网设备的私有地址共享到一个公网出口,并只允许已经建立映射的返回流量通过。

可以把它想象成小区门口的快递:快递员知道小区地址,却不知道包裹应该送到哪栋楼、哪一户。NAT 知道家庭网络的公网出口,却不会因为外部请求自动猜出目标是 192.168.1.100 还是另一台设备。
一次典型的内网访问过程是:
- 本地电脑访问互联网,路由器记录一条出站连接映射。
- 服务器响应路由器已经建立的映射,数据被转回本地电脑。
- 外部陌生设备直接访问路由器时,没有对应映射,数据通常会被丢弃。
如果运营商还使用 CGNAT(Carrier-Grade NAT,运营商级 NAT),家庭路由器拿到的甚至不是独占公网 IPv4,而是和其他用户共享运营商出口。此时即使你能登录家用路由器,也可能无法完成真正的入站端口映射。
因此,“我能正常上网”不代表“别人能从互联网主动连进来”。前者只需要出站连接,后者要求公网地址、入站规则和明确的目标设备同时成立。
传统端口映射和内网穿透有什么区别?
传统做法是申请公网 IP,再在路由器上把公网端口映射到内网服务。内网穿透则让客户端主动连向公网服务器,把部署过程从路由器配置转移到客户端配置。

两种方案的差异可以这样看:
| 维度 | 公网 IP + 端口映射 | 内网穿透 |
|---|---|---|
| 对公网 IP 的要求 | 家庭或公司网络需要可用的公网 IP | 本地网络通常不需要公网 IP |
| 配置位置 | 路由器、防火墙和服务端口 | 内网客户端与穿透平台或云服务器 |
| 数据路径 | 外部请求直接到家中或公司的出口 | 外部请求先到公网穿透服务器再转发 |
| 部署门槛 | 需要路由器权限,且容易受 CGNAT 影响 | 通常下载客户端并配置一条隧道即可 |
| 性能 | 路径短,延迟和带宽通常更好 | 多一跳中转,性能取决于中转服务器 |
| 暴露范围 | 端口长期暴露,需自行加固 | 可随时启停,也必须做好鉴权和限流 |
端口映射并不是过时技术。如果你拥有稳定公网 IP、能控制路由器,并且需要长期承载大流量,直连通常更高效。没有公网 IP、没有路由器管理权限,或者只想临时分享本地服务时,内网穿透更容易落地。

内网穿透的核心原理是什么?
内网穿透的核心原理是:内网机器主动连接公网服务器,公网服务器复用这条连接承接外部请求,客户端再把请求转给本地服务。

一条典型隧道包含五个动作:
- 客户端主动连接:本地客户端向公网服务器发起 TCP、TLS、QUIC 或其他协议连接。
- 身份注册:客户端使用令牌、密钥或证书注册,并声明要转发的本地端口。
- 保持隧道在线:双方通过心跳检测连接状态,断线后按策略重连。
- 接收外部请求:公网服务器监听域名或端口,接收浏览器、手机或第三方平台的请求。
- 双向转发数据:服务器把请求写入隧道,客户端转给
127.0.0.1:8080等本地目标,再把响应传回服务器。
这条链路绕开的是“外部无法主动建立到内网的连接”,不是绕过所有网络限制。客户端仍然需要能够访问公网,公网服务器也必须能被访问;如果企业防火墙禁止客户端的出站连接,隧道同样会失败。
一套穿透系统有哪些角色?
典型系统由内网客户端、公网穿透服务器和访问者三个角色组成。反向代理有时会运行在公网服务器上,但它不是隧道本身的第四个必需角色。

| 角色 | 运行位置 | 主要职责 |
|---|---|---|
| 内网客户端(Agent) | 本地电脑、NAS、树莓派或内网服务器 | 主动建连、保持心跳、转发到本地端口 |
| 公网穿透服务器(Server) | 有公网 IP 的云服务器或托管平台 | 接收外部流量、匹配隧道、转发数据 |
| 访问者(User) | 浏览器、手机 App 或第三方平台 | 请求公网域名、端口或回调地址 |
内网客户端通常只需要访问外网,不需要监听一个对公网开放的端口。公网服务器才是外部可见入口,因此服务端的证书、域名、访问日志和限流策略都应集中管理。
外网访问本地服务的完整流程是什么?
一次访问可以拆成四步:客户端先连服务器,访问者再打开公网地址,服务器通过隧道转发请求,客户端最后访问本地服务并返回响应。

假设本地开发服务器监听 127.0.0.1:8080,完整链路如下:
- 内网客户端连接
tunnel.example.com,并登记“这个隧道对应本地127.0.0.1:8080”。 - 访问者打开
https://demo.example.com,请求先到公网穿透服务器。 - 公网服务器根据域名、端口或隧道 ID,把请求发送给对应的内网客户端。
- 客户端访问本机的
127.0.0.1:8080,取得响应,再沿隧道返回给访问者。
从访问者视角看,它访问的是公网域名;从本地服务视角看,请求像是来自本机客户端或隧道代理。真实的客户端 IP 是否能传到应用,要看工具是否支持 X-Forwarded-For、PROXY protocol 等机制,以及应用是否正确配置了可信代理。
没有公网 IP,怎样让外网访问本地服务?
最短路径是:准备一个本地服务,选择托管穿透或自建穿透,启动客户端,验证公网地址,再为服务补上认证和 HTTPS。
方案一:使用托管穿透服务
ngrok、花生壳、cpolar 等托管服务会提供公网中转服务器、域名或端口。你注册账号并安装客户端后,通常只需要指定本地端口即可。以命令行工具为例,形式通常类似:
ngrok http 8080
这条命令表达的是“把本机 8080 端口映射到一个公网 HTTP 地址”。实际使用时仍要按平台要求配置账号令牌、固定域名、HTTPS 或访问控制;不同服务的命令和免费套餐规则并不相同。
托管服务适合以下任务:
- 临时演示一个本地网站或管理后台。
- 接收微信公众号、支付平台或 SaaS 的 Webhook 回调。
- 在手机或异地网络中短时间访问家庭设备。
- 不想维护云服务器和穿透服务端的个人用户。
方案二:自己部署 frp 或 nps
自建方案需要一台有公网 IP 的云服务器,在云服务器上运行服务端,在家中或公司内网运行客户端。frp、nps 等工具通常支持 TCP、HTTP、HTTPS、域名路由和多条隧道。
自建时至少要完成这些配置:
- 云服务器安全组和防火墙只放行实际需要的端口。
- 服务端与客户端使用强认证密钥或证书。
- 客户端声明本地地址和端口,例如
127.0.0.1:8080。 - 公网域名通过 DNS 指向云服务器,并在服务端配置域名或端口路由。
- 通过日志、健康检查和断线重连确认隧道长期可用。
自建不是“完全不需要公网 IP”,而是把公网 IP 的要求从家庭网络转移到了云服务器。它的好处是配置、日志、域名和访问策略可控,代价是需要自己维护系统更新、证书、监控和故障恢复。
远程访问 NAS 和本地开发分别怎么用?
远程访问家里的 NAS
你出差时想用手机查看家里 NAS 的文件,但家庭宽带没有公网 IP。可以在 NAS、旁路由或树莓派上运行内网客户端,把隧道目标设为 NAS 的局域网地址,例如 192.168.1.100:5000。

外部访问流程是:手机打开公网域名,公网服务器把请求转进隧道,客户端再访问 NAS。这个场景适合低频文件查看和管理操作;如果要大量同步视频,最好评估中转带宽、加密开销和服务商流量限制。
调试本地 Webhook 或支付回调
本地开发微信公众号、支付回调或第三方 OAuth 时,平台通常要求一个公网可访问的 URL。内网穿透可以把临时域名转到本地 localhost:3000 或 localhost:8080。

开发调试的推荐流程是:
- 启动本地服务,并确认它只在预期端口监听。
- 启动隧道客户端,获得 HTTPS 公网地址。
- 把该地址填入第三方平台的回调配置。
- 用日志和请求回放检查签名、请求体和重试行为。
- 调试结束后关闭隧道,删除第三方平台中的回调地址或令牌。
临时地址的价值在于生命周期短。它适合开发和演示,不应直接当成生产接口;生产环境仍应使用稳定域名、正式证书、鉴权、审计和可观测性。
托管服务和自建工具怎么选?
选择标准不是“哪个名字更热门”,而是你是否需要省运维、固定域名、协议控制、审计和长期稳定性。

| 方案 | 代表工具 | 需要自己的云服务器 | 优点 | 代价 | 适合场景 |
|---|---|---|---|---|---|
| 托管服务 | ngrok、花生壳、cpolar | 不需要 | 上手快,平台负责中转和运维 | 受套餐、域名、流量和平台策略约束 | 临时调试、个人远程访问 |
| 自建穿透 | frp、nps | 需要 | 路由、域名、日志和权限更可控 | 要维护服务器、证书、升级和监控 | 长期使用、团队内网、定制协议 |
| 组网工具 | Tailscale、ZeroTier 等 | 通常不需要自建中转 | 设备之间像在同一私网,适合私密访问 | 外部客户和第三方回调不一定方便 | 个人设备、团队设备互联 |
| 端口映射 | 路由器原生能力 | 需要家庭公网 IP | 路径短,性能通常更好 | 依赖路由器权限和网络条件 | 有公网 IP 的长期服务 |
一个简单的决策规则是:临时用、少运维,选托管;长期用、要可控,选自建;只让自己的设备互联,优先评估组网工具;拥有稳定公网 IP 且追求直连性能,再考虑端口映射。
内网穿透有哪些安全和速度风险?
内网穿透会把原本只在局域网可见的服务放到公网入口后面。它降低了网络接入门槛,但不会自动替你完成身份认证、权限控制和漏洞修复。

安全检查清单
- 不要暴露无鉴权服务:数据库、Redis、路由器管理页和开发调试面板不应直接公开。
- 使用 HTTPS:在公网服务器或穿透平台终止 TLS,避免账号、令牌和文件内容明文传输。
- 启用访问令牌或单点登录:Basic Auth 只是最低限度保护,重要服务还需要细粒度权限和多因素认证。
- 限制来源与路径:使用 IP 白名单、域名路由、访问策略和限流,减少暴露面。
- 保护隧道凭据:客户端令牌应放在环境变量或密钥管理系统中,不要提交到 Git 仓库。
- 保持服务更新:穿透只负责传输,应用本身的弱密码、旧依赖和漏洞仍然存在。
- 记录访问日志:至少保留时间、来源、路径、状态码和失败原因,便于发现异常访问。
速度和稳定性检查
数据要先到公网服务器,再到本地服务,因此延迟通常比同一局域网访问更高。带宽还会受到中转服务器出口、本地上行带宽、套餐限速和并发连接数影响。
自建时可把服务器放在离本地网络较近的区域,减少往返时延。对视频、备份等大流量业务,应先测量上行带宽和持续传输稳定性;对 Webhook、管理页面等小流量请求,延迟通常比吞吐量更重要。
还要考虑断线重连、心跳超时和服务端重启。隧道“偶尔能打开”不等于适合生产,生产使用应配合进程守护、健康检查、监控告警和明确的故障切换策略。
内网穿透和反向代理是什么关系?
反向代理通常部署在公网服务器上,负责根据域名、路径或请求头把流量分发到不同后端;内网穿透负责把公网服务器与内网客户端之间的连接建立起来。两者经常协作,但关注层次不同。

可以把一次多服务访问理解为:
访问者
-> 公网域名
-> Nginx 或穿透服务端的反向代理
-> 指定隧道
-> 内网客户端
-> 本地网站、API 或 NAS
例如,blog.example.com 可以进入博客隧道,api.example.com 进入 API 隧道,dev.example.com 进入开发环境隧道。反向代理决定“请求应该去哪个入口”,隧道决定“入口如何抵达内网”。
如果只需要一个临时端口,穿透工具自带的域名路由通常就够了;如果需要多个域名、统一证书、访问日志、限流和认证,公网服务器上的 Nginx、Caddy 或云网关会更合适。
常见问题
没有公网 IP,真的可以让外网访问本地服务吗?
可以。前提是本地客户端能够主动访问公网,并连接到托管平台或你自己的公网服务器。外部请求通过服务器和已建立的隧道进入内网,不要求家庭路由器拥有独立公网 IPv4。
内网穿透是不是等于把电脑直接暴露在公网?
不完全是。公网通常看到的是穿透服务器的地址,内网电脑不需要开放一个直接可达的入站端口。但被转发的服务仍然对公网请求可见,所以应用鉴权、HTTPS、限流和补丁更新仍不可省略。
内网穿透和 VPN 有什么区别?
内网穿透通常把一个端口、域名或路径发布出去,适合 Web 服务和第三方回调;VPN 或组网工具更像把多台设备放进一个受控的虚拟网络,适合设备之间的私密互访。需要公开一个网页时,穿透更直接;需要访问多个内网资源时,组网工具往往更自然。
内网穿透能代替生产环境部署吗?
通常不能。它适合开发调试、临时演示、远程管理和低频个人访问。生产服务还需要稳定域名、容量规划、备份、监控、权限系统、故障切换和合规审计;如果必须使用穿透,也应把它当作经过加固的网络入口来运维。
frp、ngrok、花生壳和 cpolar 应该怎么选?
临时使用、希望少维护时,先选托管服务;需要自定义域名、路由、日志和长期控制权时,选择 frp 或 nps 自建。具体还要比较所在地区的延迟、价格、协议支持、数据留存政策和团队运维能力。
IPv6 能不能解决没有公网 IPv4 的问题?
如果设备拥有全球可路由的 IPv6 地址,并且路由器、防火墙和运营商允许入站访问,IPv6 直连可能不需要内网穿透。但许多网络仍存在 IPv6 覆盖、地址变化、访问方兼容性和防火墙配置问题,因此实际方案仍需按双方网络测试。
总结:内网穿透解决的是“最后一公里”访问问题

内网穿透本质上是一种反向隧道技术:内网机器主动连接公网服务器,公网服务器承接外部请求,再把请求转发到本地服务。它绕开了没有公网 IP、NAT 和入站防火墙带来的访问障碍。
记住这三点就够了:
- 原理:内网主动出站,公网服务器中转,隧道双向传输。
- 价值:远程访问 NAS、发布家庭设备、调试本地 Webhook,都不必先申请家庭公网 IP。
- 边界:它不自动提供安全、无限带宽或生产级高可用,暴露服务前必须补齐鉴权、HTTPS、日志和运维措施。
一句话收束:端口映射是“正门直达”,内网穿透是“专用送货通道”;选哪一个,取决于你的公网条件、访问对象和运维能力。

