简介
本文档介绍NAT(STUN)服务器对会话遍历实用程序的需求、与STUN服务器相关的网络地址转换(NAT)设置的类型、NAT如何导致此设置中的问题以及解决方案。
背景信息
NAT设备的主要用途是允许局域网(LAN)中具有私有IP地址的设备与公有地址空间(例如Internet)中的设备通信。但是,虽然NAT设备应该允许内部主机与公共空间连接,但是当涉及到点对点(P2P)应用程序(例如VoIP、游戏、WebRTC和文件共享,其中最终用户需要同时充当客户端和服务器来维护双向端到端通信)时,NAT为建立这些UDP连接提供了困难。通常需要NAT遍历技术才能使这些应用正常工作。
需要NAT穿越
Internet上的实时语音和视频通信 是 主流 现在,我们使用支持VoIP呼叫的几种常用即时消息工具(IM)。VoIP最初采用的一大障碍是大多数PC或其他设备都位于防火墙后面并使用私有IP地址。网络中的多个私有地址(IP地址和端口)通过带有 NAT. 但终端设备不知道其公有地址,因此无法在其VoIP通信中通告的私有地址上接收来自远程方的语音流量。
单方面 自地址固定(UNSAF)进程是一些始发终端尝试确定或固定地址(和端口),而另一个终端知道该地址(和端口),例如,能够 u使用协议交换中的地址数据或通告其接收连接的公有地址。
因此,正在讨论的P2P连接是UNSAF进程。 一种常用的P2P应用程序建立对等会话并保留该会话 NAT友好型是指使用可公开寻址的交汇服务器 注册和对等体发现目的。
用于NAT的会话遍历实用程序
根据RFC 5389,STUN提供处理NAT的工具。它为终端提供了一种确定由NAT设备分配的IP地址和端口的方法,该IP地址和端口对应于其私有IP地址和端口。它还为终端提供保持NAT绑定活动状态的方法。
NAT实施类型
据观察,UDP的NAT处理方法因实施而异。实施中观察到的四种处理方法是:
全锥:全锥NAT是指来自同一内部IP地址和端口的所有请求映射到同一外部IP地址和端口的NAT。此外,任何外部主机都可以向内部主机发送数据包,并将数据包发送到映射的外部地址。
限制锥:限制锥NAT是来自相同内部IP地址和端口的所有请求映射到相同外部IP地址和端口的NAT。与全锥形NAT不同,外部主机(IP地址为X)只有在内部主机之前向IP地址为X发送数据包时才能向内部主机发送数据包。
端口限制锥:端口限制锥NAT类似于限制锥NAT,但限制包括端口号。具体而言,只有当内部主机之前向IP地址X和端口P发送了数据包时,外部主机才能将包含源IP地址X和源端口P的数据包发送到内部主机。
对称:对称NAT是指从相同内部IP地址和端口到特定目标IP地址和端口的所有请求映射到相同外部IP地址和端口的NAT。 如果同一主机发送源地址和端口相同的数据包,但发送到不同的目的地,则使用不同的映射。 此外,只有接收数据包的外部主机才能将UDP数据包发送回内部主机。
考虑源(A、Pa)(其中A是IP地址,Pa是源端口)通过NAT设备与目标(B、Pb)和(C、PC)通信的拓扑。
NAT实施类型 |
Public 源时间 指定给(B、Pb(E) |
公共源,目标为(C、Pc(E) |
可以目标(例如: (B、Pb))将流量发送到(A、Pa)? |
全锥 |
(X1,Px1) |
(X1,Px1) |
Yes |
限制圆锥体 |
(X1,像素1) |
(X1,像素1) |
仅当(A, Pa)首先将流量发送到B时 |
端口限制锥形 |
(X1,像素1) |
(X1,像素1) |
仅当(A, Pa)首先将流量发送到(B, Pb)时 |
对称 |
(X1,像素1) |
(X2,Px2) |
仅当(A, Pa)首先将流量发送到(B, Pb)时 |
NAT遍历和对称NAT问题
STUN服务器响应STUN客户端发送的STUN绑定请求,并提供客户端的公共IP/端口。现在,此地址/端口 组合由STUN客户端在其点对点通信中使用 信令. 但是,现在, 终端主机 使用相同的私有地址/端口(假设为 已绑定 到公共IP/端口 在STUN响应中提供)NAT设备将其转换为同一IP,但如果是对称NAT,则转换为不同的端口 简单我NTATION 已使用。这会中断UDP通信,因为 信令 已根据p之前的端口。
思科IOS® 路由器' NAT 简单我NTATION 执行PAT时,默认情况下是对称的。 其他e前端,您会看到与这些UDP连接有关的问题 执行ping操作的路由器 NAT.
但是,Cisco IOS-XE路由器执行PAT时的NAT实施不对称。当您发送两个不同的 流具有相同的源IP和端口,但流向不同的目标,源会被NAT到相同的内部全局IP和端口。
问题的解决方案
根据此描述, 很显然, 如果执行 独立于终端 映射。
根据RCFC 4787: 使用 端点独立映射(EIM),NAT会为从同一内部IP地址和端口(X:x)连接到任何外部IP地址和端口。
从客户端上,当终端主机在两个不同的终端窗口中运行nc -p 23456 10.0.0.4 4000和nc -p 23456 10.0.0.5 5000命令时,如果您使用EIM,将会出现NAT转换结果:
Pro Inside global Inside local Outside local Outside global
tcp 10.0.0.1:23456 192.168.0.2:23456 10.0.0.4:40000 10.0.0.4:40000
tcp 10.0.0.1:23456 192.168.0.2:23456 10.0.0.5:50000 10.0.0.5:50000
在这里,您可以看到源地址和端口相同的不同流量被转换为相同的地址/端口,而与目标端口/地址无关。
在Cisco IOS路由器上,您可以使用命令启用终端无关端口分配 ip nat service enable-sym-port。
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/15-mt/nat-15-mt-book/iadnat-fpg-port-alloc.html
摘要
当您使用端口地址转换(PAT)时,Cisco IOS NAT实施默认情况下是对称的,当它传递P2P UDP流量时,可能会引起问题,该流量需要服务器(如STUN)进行NAT穿越。您需要在NAT设备上显式配置EIM才能使此正常工作。