计算机网络 (21) - NAT 穿透 - NAT 穿透问题
NAT 的另一个重要问题是它妨碍 P2P 应用程序,在 P2P 应用中,任何主机 A 应当能够对任何其他对等方 B 发起一条 TCP 连接,但如果 B 位于 NAT 后面,它不能充当服务器并接收 TCP 连接,这就是 NAT 穿透问题。
假如客户期望连接内网地址为 10.0.0.1
的服务器,但客户不能直接利用地址 10.0.0.1
直接访问服务器,因为服务器所在内网对外唯一可见的地址是 NAT 地址 138.76.29.7
。把 NAT 看作一面“墙”,我们要做的就是在 NAT 上产生一个“洞”,使外部用户能够访问到内网的服务器。解决 NAT 穿透的方法可以分为三类:
-
解决方案一:静态配置 NAT 路由器的转换表。将特定端口的连接请求转发给服务器,如将目的地址为
138.76.29.7, 2500
的数据报总是转发给10.0.0.1, 25000
。 -
解决方案二:UPnP(Universal Plug and Play,通用即插即用) 互联网网关设备协议(IGD)自动配置。UPnP 协议实际上与第一种解决方案达到的目的是一样的,只不过手段不同(自动配置、手动配置)。UPnP 要求内网中的服务器(主机)和 NAT 路由器都是 UPnP 兼容的。
举一个例子,假定你的主机位于一个支持 UPnP 的 NAT 内网中,具有专用地址
10.0.0.1
并且在端口 3345 上运行 BitTorrent,该 NAT 的公共IP地址为138.76.29.7
。你的主机上的 BitTorrent 应用程序请求 NAT 产生一个“洞”,将地址10.0.0.1, 3345
映射到138.76.29.7, 5001
(该应用程序选择了公共端口号 5001)在 NAT 转换表中存储该映射。你的主机的 BitTorrent 应用程序也应通告外界它在139.76.29.7, 5001
可供使用。外部主机能够向138.76.29.7, 5001
发送 TCP SYN 分组,当 NAT 路由器收到该 SYN 分组,替换其目的 IP 地址和目的端口号,转发到你的主机。 -
解决方案三:中继(如 Skype)。NAT 内部的客户与中继服务器建立连接,外部客户也与中继服务器建立连接,中继服务器桥接两个连接的分组,从而实现了 NAT 的穿透。
下一篇: stun 协议 NAT 穿透方法简介
推荐阅读
-
NAT 穿透是如何工作的?技术原理与企业实践》(Tailscale,2020 年) 取自 https://arthurchiao.art/blog/how-nat-traversal-works-zh/ NAT 如何渗透:技术原理和企业级实践》(Tailscale,2020 年)
-
NAT 穿透--P2P--摘要
-
stun 协议 NAT 穿透方法简介
-
计算机网络 (21) - NAT 穿透 - NAT 穿透问题
-
详细解释和分析 NAT 穿透.RP
-
P2P UDP 穿透 NAT 原理与实施
-
利用 TCP 实现 NAT 穿透(TCP 打洞
-
如何进行 NAT 穿透:技术原理和企业实践
-
WebRTC NAT 穿透
-
NAT 穿透技术简介和实施场景分析-2.STUN 简介