内网穿透原理及实现

综合 2026-10-17 04:03:32 59

我家里有台NAS,内网存着几十部电影和全家人的穿透照片。出差在外想调个文件,原理直接连不上——路由器在客厅,及实我在酒店,内网中间隔着整个互联网。穿透这就是原理内网穿透要解决的原始问题:让外网设备能访问内网里的服务。

原理说穿了就一层窗户纸。及实你家路由器分配的内网是私有IP,比如192.168.1.100,穿透这个地址在公网上根本不存在。原理互联网上的及实数据包找不到你,就像快递员不知道“302室”在哪栋楼。内网内网穿透的穿透做法是:让内网设备主动去连接一台有公网IP的服务器,建立一条长期保持的原理通道。服务器在公网上有固定门牌号,外网请求先到服务器,服务器再通过这条已经建好的通道把数据转发给你家设备。

具体实现分两步。第一步是“打洞”或者“中继”。打洞适合双方都在NAT后面的情况,需要一台公网服务器帮忙“牵线”,让两边直接建立UDP连接。但很多网络环境不允许,那就退而求其次,所有数据都经过服务器中转。这种方案最稳,代价是延迟高、流量费贵。

我实际用的是frp,一款开源工具。配置很简单:在公网服务器上跑frps,在自家NAS上跑frpc,指定要暴露的端口。比如把NAS的SSH端口22映射到服务器的6000端口,外网连服务器的6000端口就等于连家里NAS的22端口。整个过程其实就是在两台机器之间维护一条TCP长连接,服务器收到数据就往这条连接里塞,家里的客户端收到就转发给本地的SSH服务。

有个坑必须提:运营商封了80端口和443端口。想在家里搭个网站让别人访问?用frp映射到服务器的8080端口勉强能用,但别人访问时得带端口号,体验很糟。更麻烦的是,家庭宽带的公网IP经常变,今天是120.24.1.5,明天可能就变成120.24.1.8。所以还得配个动态域名解析,把域名指向变化的IP。

其实更优雅的方案是WireGuard组网。它不像frp那样暴露单个端口,而是把家里的整个子网“搬”到云端。我在手机上装个WireGuard客户端,连上之后手机就像插在了家里的局域网里,访问NAS的IP地址直接用内网IP就行,连端口映射都省了。这个方案延迟更低,因为数据是加密的UDP直连,但前提是至少一端有公网IP,或者用NAT穿透技术辅助。

别被“穿透”这个词唬住。本质上就是两条路:要么找条中间路绕过去,要么直接打通墙上的洞。前者是frp、ngrok这类转发工具,后者是P2P打洞。大多数场景用frp就够了,毕竟稳定性比那点延迟更重要。我自己试过P2P打洞,在联通和电信的网络之间能成功,但一到移动网络就经常失败——移动的NAT太严格,打洞成功率低得让人想摔手机。

最后说个反直觉的事:内网穿透其实是个“懒人方案”。正经做法是买个云服务器,把所有服务都部署在公网上。但很多人舍不得家里那台24小时开机的NAS,也不想每个月多花几十块钱租服务器,于是才有了这些穿透工具。技术有时候就是这么被“抠门”推动的。

本文地址:http://www.79wt.cn/news/1061f1399880.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

友情链接