问题背景: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 等)
原理:
- 内网机器主动连接到一台有公网 IP 的中转服务器(建立一条长连接);
- 外部用户访问中转服务器;
- 中转服务器通过已建立的连接,把请求转发到内网机器。
关键:连接是内网主动向外发起的,因此不需要公网 IP,也不需要在路由器上做配置。
代价:
- 流量要经过中转服务器 → 速度取决于中转服务器的带宽;
- 需要一个中转服务器(自建或租用服务);
- 有一定的延迟增加。
三、VPN
把远程设备"接入"到内网,就像在本地一样。
方案:WireGuard、OpenVPN、Tailscale 等。
Tailscale 这类现代方案基于 WireGuard,简化了配置,并会尝试 NAT 打洞——如果两端能直接建立 P2P 连接,流量就不需要中转。
优点:安全性好(加密),可以访问整个内网,不只单个端口。
四、IPv6
如果你的网络支持 IPv6,那么每台设备都有一个全球可路由的地址——不需要 NAT,也不需要穿透。
现实:IPv6 的普及率在提升,但仍有不少网络(尤其是某些家庭宽带和企业网)未开启,且访问端也要支持 IPv6。
安全提醒
把内网服务暴露到公网是有风险的:
- 认证:确保服务有强认证(不要裸奔);
- 加密:用 HTTPS,不要明文传输;
- 最小暴露:只暴露必要的端口和服务;
- 更新:保持软件更新,避免已知漏洞;
- 日志与监控:关注异常访问。
一个原则:任何暴露到公网的端口,都会在很短时间内被自动化扫描器发现并尝试攻击。不要假设"没人知道我的地址"。
什么时候不该用
如果只是临时的开发演示,用完即关是合理的。
如果是长期的生产服务,正确的做法是部署到有公网 IP 的服务器或云上,而不是长期用穿透工具——后者引入了额外的不稳定性和安全风险。
说明:本文为网络技术的知识整理。