在家连着 Wi-Fi,能打开电脑里的相册网页;出门换成手机流量,同一个地址却打不开了。常见原因是你离开了家庭网络,而那个地址只在家里的网络中有意义,外部也没有现成的连接路径。内网穿透是一类让外部设备访问内网服务的连接办法,可以通过中转隧道或点对点连接等方式,把这条路径建立起来。

家里的地址,出了门还能用吗
假设家里一台电脑运行着相册网页,在同一个家庭网络里,可以用手机打开 192.168.1.20:8080。这只是教学例子:192.168.1.20 是电脑的地址,后面的 8080 是端口号,用来区分这台电脑上的不同网络服务。
这类地址属于私有 IPv4 地址。别人的家里、办公室里,也可以有一台叫 192.168.1.20 的设备,它们互不冲突,因为各自在自己的网络中使用。公网不能仅凭这个地址,判断你想找的是哪一家的哪台电脑。(参考:RFC 1918 私有地址规则[1])
手机切换到流量后,就离开了这个局域网,也就是一定范围内设备共同使用的网络。除非已经通过 VPN 等方式接入家里的网络,否则直接输入原来的私有地址,不能据此找到家里的电脑。地址未必变了,变的是你所在的网络和可用的访问路径。

这里说的“连接电脑”,实际还要落到一个服务上。相册网页、文件共享、远程桌面各有自己的服务程序和访问方式;找到电脑的网络地址,不代表这些功能都会自动可用。
能上网,为什么外面连不进来
在常见的家庭 IPv4 网络里,多台设备使用私有地址,通过路由器访问外部网络。路由器通常会使用 NAT,中文叫网络地址转换:设备向外发起连接时,它改写有关地址和端口,并保留对应关系,让回来的数据能够交给正确的设备。(参考:OPNsense NAT 文档[2]和 Tailscale 的 NAT 原理解说[3])
例如,家里的电脑主动打开一个网站,路由器知道这次访问来自哪台设备,可以把网站的回复送回去。可你在外面主动来找家里的相册网页,是一条新的入站连接。即使知道对外的地址,也还需要相应的转发规则,说明请求该交给哪台电脑、哪个端口;防火墙也必须允许这类访问。能接到自己发出的请求的回复,不等于能接收任意外部设备发起的新连接。
有些宽带还会多一层限制:几户用户共享运营商的公网 IPv4 地址,运营商再做一次 NAT。这叫运营商级 NAT,常缩写为 CGN 或 CGNAT。此时,即使你在家里的路由器上设置了端口映射,也没有替运营商那一层添加规则;仅靠家里的设置,不能让外部请求一路进来。(参考:RFC 6888 的 CGN 说明[4])
这不意味着“所有家庭网络都必须穿透”。如果设备有可路由的公网 IPv6 地址,访问两端都支持 IPv6,而且路由、防火墙和服务配置允许,可以直接连接;不能把前面的私有 IPv4 场景套到所有网络上。(参考:Netgate 的公私地址说明[5])
中转隧道怎样把请求送回家
一种常见办法,是让家里的客户端先主动连接一台外部能访问的中转服务器。家中网络允许这条出站连接时,客户端就能与服务器建立通信通道。外部设备随后访问服务器提供的入口,服务器再通过通道,把请求送到家里的相册服务,服务的响应沿这条路径返回。
这类“隧道”把内网服务的数据放到已经建立的连接里传送。家中电脑仍然可以使用原来的私有地址,外部访问者用的是中转入口;并不需要把 192.168.1.20 变成一个全世界都能直接访问的地址。
frp 就有这样的客户端与服务端分工:服务端部署在具有公网地址的机器上,内网客户端连接它,并按配置把外部入口的流量转发给本地服务。它也支持其他模式,这里只用中转方式解释原理。(参考:frp 官方概述[6]和 客户端与服务端示例[7])

回到相册例子,你在外面需要访问的是这个外部入口,而不是照搬家里的私有地址。入口对应哪个服务、允许谁访问,要由隧道和服务的配置决定。中转服务器的可用性和带宽也会影响体验;多一段转发路径,不会自动让家里的上传速度变快。
端口映射、点对点有什么不同
“内网穿透”在日常交流中涵盖多种连接办法,不能只看到这个名字就认定数据一定经过中转。几种常见方式的差别,主要在于外部入口在哪里,以及数据怎样到达家中服务:
| 连接方式 | 数据怎样到家里 | 主要前提或限制 |
|---|---|---|
| 端口映射 | 外部请求到达家庭网络的公网入口,路由器按规则转给内网服务 | 公网入口须可达,你能配置相关转发和防火墙规则;运营商 CGN 等上游限制仍需解决 |
| 中转隧道 | 家中客户端先连接公网服务器,外部请求由服务器转发 | 家中客户端能连接服务器;入口和转发服务须配置正确,依赖中转路径 |
| 点对点连接 | 两端协调并尝试建立直接的数据通道 | 两端都要配合,能否直连取决于网络和 NAT 行为;有些方案会在直连失败时改用中继 |
点对点方式常见于私有组网工具。两端会尝试通过主动发包等办法建立可用路径,这常被叫作“打洞”,但不是每种网络都能成功。比如 Tailscale 既可能使用直连,也可能使用中继;它的官方文档明确把两端网络条件作为判断因素。(参考:Tailscale 设备连接方式[8])
这里说的远程接入 VPN,是让外部设备通过受控通道接入一个私有网络,具体工具底层仍可能使用直连或中继。它和“中转服务器”不是同一层面的分类。仅给自己访问的服务,可以用私有通道限制访问范围;给别人临时访问的网页,则可能使用外部分享入口,仍要另外配置访问控制。
还有一种容易混淆的东西是 DDNS,动态域名解析。它可以在公网地址变化时更新域名指向,让你不用反复记新地址;但它不会替你建立转发规则、打通运营商 NAT 或放行防火墙。知道去哪里找,与那条路能不能通,是两件事。(参考:Microsoft 的外网访问与 DDNS 说明[9])
通道通了,为什么还是打不开
连接通道解决的是数据能否送达,服务能否工作、你是否有访问权限,还要分开看:
- 服务是否在线: 电脑需要开机、联网,相册程序或远程桌面服务需要运行。电脑关机或休眠后,原有通道无法替它继续提供服务;唤醒设备是另一项能力。
- 是否指向正确的服务: 入口需要对应正确的设备和端口,相关防火墙规则要允许。把请求送到电脑,并不等于送到了相册程序;服务没开、端口不对,都可能导致失败。
- 谁被允许访问: 访问者需要通过相应的身份验证并获得权限。难猜的地址不能替代登录验证;是否加密、是否对外公开,也要按具体方案确认。
换穿透工具不会替你满足这些条件。Microsoft 的远程桌面文档分别列出了电脑开机联网、服务开启、账号获准和防火墙放行等要求;它对直接把远程桌面端口暴露到互联网给出风险提醒,并建议优先使用 VPN。(参考:远程桌面启用条件[10]和 外网访问说明[9])
遇到“出门就打不开”,可以先确认同一个服务在家中 Wi-Fi 下是否能用。如果家里也打不开,先检查电脑和服务状态;如果只在外面失败,再看自己是否仍在用私有地址,以及外部入口或私有通道有没有建立。这样才能分清问题出在服务、连接路径还是访问权限,而不是把所有失败都归到“内网没穿透”。
参考资料
- [1] RFC 1918 私有地址规则:https://www.rfc-editor.org/rfc/rfc1918.html
- [2] OPNsense NAT 文档:https://docs.opnsense.org/manual/nat.html
- [3] Tailscale 的 NAT 原理解说:https://tailscale.com/blog/how-nat-traversal-works
- [4] RFC 6888 的 CGN 说明:https://datatracker.ietf.org/doc/html/rfc6888
- [5] Netgate 的公私地址说明:https://docs.netgate.com/pfsense/en/latest/network/addresses.html
- [6] frp 官方概述:https://gofrp.org/en/docs/overview/
- [7] 客户端与服务端示例:https://gofrp.org/en/docs/examples/ssh/
- [8] Tailscale 设备连接方式:https://tailscale.com/docs/reference/device-connectivity
- [9] Microsoft 的外网访问与 DDNS 说明:https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/remotepc/remote-desktop-allow-outside-access
- [10] 远程桌面启用条件:https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/remotepc/remote-desktop-allow-access