上期我们讲了NAT原理和分类,今天我们继续聊聊内网穿透的这个概念。内网穿透(NAT Traversal)的技术原理主要是为了解决内网设备(位于私有网络中,如家庭或企业网络)与公网之间通信的问题。由于内网设备的IP地址通常是私有的(例如 192.168.x.x),无法直接被公网访问,因此需要通过一定的技术手段“穿透”NAT(网络地址转换)设备(如路由器),实现内外网的双向通信。
NAT分类
全锥形NAT(Full Cone NAT)
内网端口映射到公网端口后,任何外部设备都可以通过该公网端口与内网设备通信。
限制锥形NAT(Restricted Cone NAT)
只有内网设备主动向外部发送过数据的IP才能回传数据。
端口限制锥形NAT(Port-Restricted Cone NAT)
进一步限制外部设备的端口,必须是内网设备主动通信过的IP和端口。
对称NAT(Symmetric NAT)
每次与不同外部目标通信时,映射的公网端口都会变化,最难穿透。家庭网络中,包括NAS内网穿透都是基于这种方式。
几种内网穿透的核心技术
(1) 反向连接(Reverse Connection)
原理:内网设备主动连接到公网服务器,并保持长连接(
使用自定义心跳协议保持连接,同时检测网络状态)。公网客户端通过该服务器中转数据,与内网设备通信。
典型应用:如远程桌面工具(TeamViewer),内网设备主动向服务器注册,外部请求通过服务器转发。
优点:简单可靠,适用于大多数NAT类型。
缺点:依赖中间服务器,通信效率可能受限。
(2) STUN与TURN
STUN(Session Traversal Utilities for NAT)
原理:STUN(Session Traversal Utilities for NAT)是一种由RFC定义的网络协议,用于检测网络中是否存在NAT设备,并获取两个通信端点经NAT设备分配的IP地址和端口号。然后在两个通信端点之间建立一条可穿越NAT的P2P链接,实现P2P通信,这一过程也被形象的称为“打洞”。
适用场景:适用于全锥形和部分限制锥形NAT。
局限性:对称NAT下无法直接打洞。
TURN(Traversal Using Relays around NAT)
原理:在STUN失败时,使用公网上的TURN服务器作为中继,所有数据通过服务器转发。
适用场景:适用于所有NAT类型,尤其是对称NAT。
缺点:中继服务器增加延迟和成本。
(3) UDP/TCP打洞(Hole Punching)
UDP打洞:
原理:两个内网设备通过公网服务器交换彼此的公网IP和端口信息,然后同时向对方发送UDP数据包。由于NAT会为这些数据包创建临时映射,双方可能建立直接连接。
适用性:依赖NAT类型,通常对全锥形和限制锥形NAT有效。
TCP打洞:
原理:类似UDP,但由于TCP需要三次握手,成功率较低,技术实现更复杂。
适用性:较少使用,主要用于特定场景。
(4) UPnP(通用即插即用)
原理:通过内网设备直接与路由器通信,请求在路由器上开放一个公网端口并映射到内网设备的端口。
优点:无需额外服务器,配置简单。
缺点:依赖路由器支持UPnP,且可能被禁用(安全性考虑)。
常见工具和协议
国际通用的工具:
Frp:基于反向连接的内网穿透工具。
Ngrok:提供公网域名和隧道服务。
WebRTC:结合STUN/TURN实现P2P通信,常用于实时音视频。
ZeroTier:虚拟局域网技术,绕过NAT限制。
国内的工具:
NPS、Sakura Frp、Nat123、花生壳(Oray)等。