← 返回题目列表

什么是内网穿透?NAT 环境下如何让外网访问内网服务?

高频 中等 第 4 / 27 题 更新于 2026/07/28
内网穿透NAT反向代理frp

简化版

内网穿透指让处在 NAT/防火墙后面、没有公网 IP 的内网服务,能被外网访问到。问题的根源是 NAT:家里/公司的设备用的是私有 IP(192.168.x.x),公网无法主动连进来(NAT 只允许「内网先出去、再让对应的回包进来」)。解决核心思路是**「让内网主动向外建立连接,再借这条连接把外部请求反向送进来」——因为内网出方向是通的。最常见的做法是用一台有公网 IP 的中转服务器**:内网机器主动连上它并保持长连接,外网用户访问中转服务器,服务器再通过那条长连接把请求转发给内网机器(这就是 frp、ngrok 等工具的原理,属于反向代理/反向隧道)。另一类做法是 NAT 打洞(P2P),让两个内网节点借助信令服务器直接建立连接,不走中转。

详细版

一、为什么外网连不进内网:NAT 的限制

家庭/公司网络里,设备用私有 IP,通过路由器 NAT 共享一个公网 IP 上网。NAT 的规则决定了:

  • 内网 → 外网:内网设备主动发起连接,NAT 建立映射,回包能正确送回。出方向畅通
  • 外网 → 内网:外网想主动连内网某设备,NAT 表里没有对应映射,不知道该转发给哪台内网机,直接丢弃。加上没有公网 IP、有防火墙,外网无法主动连进来

所以内网服务(家里的 NAS、公司内网的 Web、本地开发的服务)默认外网访问不到

二、核心思路:反过来,让内网主动出去

既然「外网主动进」不行、「内网主动出」可以,那就利用内网的出方向连接

① 找一台有公网IP的中转服务器(云服务器)
② 内网机器【主动】连上中转服务器,建立并保持一条长连接(隧道)
③ 外网用户访问中转服务器的某端口
④ 中转服务器通过那条【已建立的长连接】,把请求反向转发给内网机器
⑤ 内网机器处理后,沿原路返回响应

关键点:连接是内网先主动发起的(出方向,NAT 允许),之后这条连接双向可用,外部流量搭着它反向进入内网。这就是 frp、ngrok、花生壳 等内网穿透工具的本质——反向代理 / 反向隧道

三、两大流派

方式原理代表
中转(反向隧道)内网连公网中转服务器,外部流量经服务器转发进来frp、ngrok、花生壳
P2P 打洞(NAT 穿越)两个内网节点借信令服务器协调,直接建立点对点连接,不走中转STUN/ICE、部分 P2P 工具

中转方式稳定通用(只要能出网就行),但流量都过服务器、有带宽成本;P2P 打洞省中转带宽、延迟低,但成功率受 NAT 类型影响,对称型 NAT 常打洞失败,需要回退到中转(TURN)。

完整版教学

一、先把问题定义清楚:NAT 造成的「进不来」

内网穿透要解决的核心矛盾,来自 NAT(网络地址转换)

绝大多数设备没有公网 IP,而是用私有地址(192.168.x.x / 10.x.x.x),通过路由器的 NAT 共享公网 IP 上网。NAT 的工作方式是**「记账式转发」**:

  • 内网某机 192.168.1.5:12345 访问外网 8.8.8.8:80,NAT 在表里记一条映射(把私有地址端口换成公网地址端口),外网回包根据这条映射能找回内网机。
  • 外网主动发来的、表里没有对应映射的包,NAT 不知道该给谁,直接丢弃。

结论:NAT 后面的内网服务,外网无法主动连接。再叠加防火墙、运营商不给公网 IP(大内网/CGNAT),情况更甚。内网穿透就是想办法突破这个「进不来」。

二、突破口:出方向是通的

虽然「外网主动进」被 NAT 挡死,但内网主动往外连是完全畅通的(你能上网就说明出方向没问题)。内网穿透的所有方案,本质都是利用这条「内网能主动出去」的通道,把外部访问「引」进来。

一条 TCP 连接一旦建立,就是双向的——无论谁先发起。所以只要让内网先主动建立一条到公网的连接,之后就能借这条连接双向传数据,把外部请求送进内网。

三、方案一:中转服务器 + 反向隧道(最主流)

这是 frp、ngrok 等工具的做法,需要一台有公网 IP 的服务器当中转:

              (有公网IP)
   外网用户 ─────► 中转服务器 ◄════════ 内网机器(无公网IP)
                    ▲              主动建立的长连接(隧道)

   ① 内网机器【主动】连中转服务器,注册「我要暴露内网的 web:80」,保持长连接
   ② 中转服务器在自己的公网端口(如 :8080)监听
   ③ 外网用户访问 中转服务器:8080
   ④ 中转服务器把请求通过①的长连接,转发给内网机器
   ⑤ 内网机器访问本地 web:80,拿到响应,沿隧道回传给中转服务器
   ⑥ 中转服务器返回给外网用户

frp 为例:

  • frps(服务端) 跑在公网服务器上。
  • frpc(客户端) 跑在内网机器上,主动连 frps,声明要把本地哪个端口暴露出去。
  • 外网访问 frps 的对应端口,流量经隧道转发到内网服务。

优点:只要内网能出网就能用,通用、稳定,不挑 NAT 类型。 缺点:所有流量都过中转服务器,占用它的带宽、有成本、延迟略高,中转服务器是瓶颈和单点。

四、方案二:NAT 打洞(P2P,不走中转流量)

如果两个都在内网的节点想直接通信(如 P2P 文件传输、视频通话),走中转太浪费带宽。NAT 打洞(NAT Traversal / Hole Punching) 让它们借助一个信令/协调服务器交换彼此的公网映射信息,然后尝试直接建立点对点连接

  • 双方各自向公网的 STUN 服务器发包,探知「自己经过 NAT 后对外呈现的公网 IP:端口」。
  • 通过信令服务器把这个「公网映射」告诉对方。
  • 双方同时向对方的公网映射地址发包,制造出 NAT 映射,从而「打通一个洞」,实现直连。

优点:连接建立后流量不经中转,省带宽、低延迟。 缺点成功率取决于 NAT 类型——锥形 NAT 容易打通,对称型 NAT 很难(每个目标用不同的映射端口,预测不了)。打洞失败时通常回退到中转(TURN 服务器)。这套「STUN 探测 + 打洞 + TURN 兜底」的框架就是 ICE(WebRTC 用的正是它)。

五、几种常见工具/形态

  • frp:自建中转,功能强(TCP/UDP/HTTP/HTTPS、P2P 等),开发者常用。
  • ngrok:托管式,一条命令把本地服务映射到公网临时域名,适合演示、调试 webhook。
  • 花生壳 / DDNS + 端口映射:如果有公网 IP(哪怕是动态的),可以用路由器端口映射(NAT 转发)+ 动态 DNS,让外网直接连到你的公网 IP 再转发进内网——这是「有公网 IP」时的正统做法,不需要中转服务器。
  • VPN 方案:用 WireGuard/Tailscale 等组一个虚拟局域网,让外网设备「加入」内网,也是一种内网访问手段(Tailscale 内置了 NAT 穿透)。

六、内网穿透 vs 端口映射 vs VPN

  • 端口映射(NAT 转发)前提是你有公网 IP,在路由器上把公网端口转发到内网某机。没有公网 IP 就用不了。
  • 内网穿透(反向隧道)没有公网 IP 也能用,靠内网主动连公网中转服务器。这是它和端口映射的关键区别。
  • VPN:把远程设备接入内网虚拟局域网,更偏「安全地把自己变成内网一员」,而内网穿透更偏「把某个内网服务暴露给公网」。三者目标相关但侧重不同。

七、安全提醒

内网穿透把内网服务暴露到公网,等于开了一扇门,务必注意:

  • 认证(frp 的 token、访问密码),别裸奔。
  • 尽量走加密(HTTPS / 加密隧道),别明文暴露。
  • 最小暴露:只暴露需要的端口/服务,别把整个内网都开出去。
  • 内网服务本身也要有基本防护,别以为「藏在内网」就不用加固。

八、常见误区与追问

考点正确口径
内网穿透让公网客户端访问 NAT/防火墙后的内网服务
常见方式反向隧道、中继转发、P2P 打洞
关键风险暴露面、鉴权、流量审计、服务加固
internal service -> outbound tunnel -> public relay
public client -> relay domain:port
relay forwards traffic through established tunnel to internal service

内网穿透的关键是由内网主动建立出站连接,再让公网流量沿这条通道回来。

  • 误区:内网穿透等同于 VPN。 VPN 通常接入网络,内网穿透更常暴露某个服务或端口。
  • 误区:能访问就说明安全。 暴露内网服务必须做认证、最小权限、访问控制和日志审计。
  • 误区:P2P 打洞一定成功。 对称 NAT、严格防火墙和运营商网络都可能导致直连失败,需要中继。
  • 追问:为什么用反向连接? 内网机器通常不能被公网主动连接,但可以主动连公网中继。
  • 追问:内网穿透有哪些风险? 绕过边界防护、弱口令服务暴露、隧道凭证泄露和横向移动。
  • 追问:生产如何收敛风险? 限制来源、强认证、短期凭证、细粒度授权、TLS、审计和按需开启。

九、加强记忆

内网穿透 = 让 NAT/无公网 IP 后面的内网服务被外网访问。根源是 NAT 只允许「内网先出、回包才进」,外网无法主动连入。突破口是出方向畅通主流方案用一台公网中转服务器,内网主动连上并保持长连接,外部请求经服务器沿这条隧道反向转发进内网(frp、ngrok,本质反向代理)——通用稳定但占中转带宽;P2P 打洞(STUN 探测公网映射 + 双方同时发包打洞,失败回退 TURN,即 ICE 框架)省带宽、低延迟但对称 NAT 常失败。注意区分:有公网 IP 用端口映射,没公网 IP 才需要内网穿透。暴露服务务必加认证 + 加密 + 最小暴露。核心一句:外网进不来,就让内网主动出去建隧道,再把流量反向引进来。