问题背景:NAT

家庭和办公网络通常使用 NAT(网络地址转换):

  • 整个局域网共享一个公网 IPv4 地址;
  • 内部设备使用私有地址(如 192.168.x.x);
  • 外部网络无法主动发起到内网设备的连接(因为没有对应的公网地址)。

后果:你在家里的电脑上跑了一个服务,外网访问不到。

常见场景

  • 开发时想让外部访问本地的 Web 服务(如演示、调试支付回调、接收 Webhook);
  • 远程访问家里的 NAS、监控摄像头;
  • 远程桌面到内网机器。

几种方案

一、端口映射(Port Forwarding)

在路由器上配置:把公网 IP 的某个端口,转发到内网某台机器的某个端口。

前提:你的宽带有公网 IP。

现实:很多家庭宽带没有公网 IPv4(运营商使用 CGNAT,即运营商级 NAT),这种情况下端口映射不可用。

可以确认:看看路由器的 WAN 口 IP,如果是 10.x、100.64.x、172.16.x 这类私有地址,就是 CGNAT。

注意:如果确实有公网 IP,做端口映射前要考虑安全——把服务直接暴露到公网,会被扫描器发现。

二、内网穿透工具(frp、ngrok 等)

原理:

  1. 内网机器主动连接到一台有公网 IP 的中转服务器(建立一条长连接);
  2. 外部用户访问中转服务器;
  3. 中转服务器通过已建立的连接,把请求转发到内网机器。

关键:连接是内网主动向外发起的,因此不需要公网 IP,也不需要在路由器上做配置。

代价:

  • 流量要经过中转服务器 → 速度取决于中转服务器的带宽;
  • 需要一个中转服务器(自建或租用服务);
  • 有一定的延迟增加。

三、VPN

把远程设备"接入"到内网,就像在本地一样。

方案:WireGuard、OpenVPN、Tailscale 等。

Tailscale 这类现代方案基于 WireGuard,简化了配置,并会尝试 NAT 打洞——如果两端能直接建立 P2P 连接,流量就不需要中转。

优点:安全性好(加密),可以访问整个内网,不只单个端口。

四、IPv6

如果你的网络支持 IPv6,那么每台设备都有一个全球可路由的地址——不需要 NAT,也不需要穿透。

现实:IPv6 的普及率在提升,但仍有不少网络(尤其是某些家庭宽带和企业网)未开启,且访问端也要支持 IPv6。

安全提醒

把内网服务暴露到公网是有风险的:

  • 认证:确保服务有强认证(不要裸奔);
  • 加密:用 HTTPS,不要明文传输;
  • 最小暴露:只暴露必要的端口和服务;
  • 更新:保持软件更新,避免已知漏洞;
  • 日志与监控:关注异常访问。

一个原则:任何暴露到公网的端口,都会在很短时间内被自动化扫描器发现并尝试攻击。不要假设"没人知道我的地址"。

什么时候不该用

如果只是临时的开发演示,用完即关是合理的。

如果是长期的生产服务,正确的做法是部署到有公网 IP 的服务器或云上,而不是长期用穿透工具——后者引入了额外的不稳定性和安全风险。

说明:本文为网络技术的知识整理。