目录:
问题提出
NAT
防火墙
NAT对数据业务的影响
IPSec
NAT和IPSec共同实施
NAT对VOIP业务(SIP)的影响
SIP呼叫穿透NAT的方案
STUN协议(让终端发现自己的公网IP\端口)
STUN协议的基本思想
STUN的流程
NAT网络类型
STUN中发现NAT网络类型
TURN协议(提供Relay server,穿越Symmetric NAT)
TURN协议的基本思想
TURN内容
ICE协议
ICE的流程
3GPP中的ICE
端口预测技术
隧道技术
P2P应用穿透NAT
VOIP穿透Http防火墙
VOIP应用如何利用STUN 服务器(Hole Punching 打洞方案)
Symmetric NAT对于VOIP服务器方案的影响
TCP传输对于VOIP服务器方案的影响
SBC的含义
SBC的功能
MIDCOMM
3GPP中的ALG
问题提出
当
基于
IP
的语音和多媒体业务在网络中大规模部署的时候,遇到了以下两个最为突出的问题。
首先,几乎所有的企业网络都从网络安全角度考虑配置了专用防火墙Firewall,而大量的个人用户也在主机上安装了防火墙软件。但是复杂的
H.323
、
SIP
协议需要动态分配端口并产生和维护多个
UDP
数据流,因而这些协议很难通过传统防火墙。
同时,由于
Internet
快速膨胀,为解决
IPv4
地址空间短缺的问题,网络地址转换(
NAT
)技术被人们广泛应用。这使得位于
NAT
设备之后的
IP
语音和视频终端仅具有内部
IP
地址,而这些内部地址在公网上是不可路由的。
NAT
IPv4协议地址字段长度只有32比特,可提供232(约40亿)个IP地址。但因将IP地址按网络规模划分成A、B、C三类后,用户可用地址总数显著减少。所以IPv4正面临着地址枯竭的危机。为了克服IPv4地址资源的不足,IETF规定了在组织内部使用的地址(Private Address),这些地址区别于Internet上的全局IP地址,我们称这些地址范围为内部IP地址域,而全局IP地址空间称为全局IP地址域。一个组织可以在内部网络上使用内部IP地址,并在通往Internet的出口上利用NAT服务器进行内部IP地址和全局IP地址间的变换。这样一来,只要得到一个或几个Internet用的全局IP地址就能将成千上万的内部网终端连到Internet上。
一般情况下,可将NAT实现分为两种:基本NAT和NAPT(Network Address Port Translation)。基本NAT只对IP包头中的IP地址及校验和进行转换,当内网中多台主机同时访问外网时,则需要有多个公有IP地址以供NAT转换使用。NAPT允许内网中多台主机共用一个公网地址,也就是将内网不同主机的<IP地址+端口>信息映射到<公网IP地址+端口>来实现的。
对于地址转换的具体实现,通常是在NAT设备上维护一张NAT映射表。针对需进行地址转换的报文查询该表并进行地址替换。该表中的每条表项都拥有一个老化时间,即在有效时间内某映射表项未使用则该表项失效。
NAT设备为每个session(session的定义方法向STUN协议)创建一个绑定(binding),这个绑定由三元组(私网源地址,转换后的公网源地址,公网目的地址)决定,从公网返回的包可以通过这个绑定被路由到私网个体。
为防止地址/端口映射表过度膨胀,NAT服务器必须对地址/端口映射表中的表项进行超时处理。根据TCP/UDP协议的不同特性,NAT服务器可以对这两种协议类型采用不同的超时设置:例如对UDP设置比较短的超时间隔(几十秒左右),而对TCP连接可以监视其当前状态,当该TCP连接拆除的时候就删除对应的表项,另外还可以设置一个较长的超时间隔(数小时)以检测非正常的TCP连接中断。具体的超时设置由管理员根据网络容量和设备性能的实际情况确定。
NAT在解决IPv4地址短缺问题的同时增强了网络的安全性,因为它隐藏了主机的内部IP地址,增加了攻击者攻击网络内部主机的难度。
防火墙
防火墙是一种被动防卫技术,位于网络的边界,在两个网络之间执行访问控制策略,防止外部网络对内部信息资源的非法访问,也可以阻止特定信息从内部网络被非法输出。
一般而言,防火墙可以工作于网络层之上的各个层次。包过滤防火墙是常见的防火墙,一般的路由器上都具备这种功能。
包过滤防火墙主要工作于网络层IP,根据每个分组头内的信息来决定是否要将IP分组进行转发,以此来增强安全性。理论上,包过滤防火墙可以配置成根据协议头的任何部分进行判断,但是大多数过滤器被配置为只过滤最重要的数据域。
防火墙将过滤掉所有不请自到的网络通信。假设防火墙内的一台计算机A向防火墙外的一台计算机B主动发出数据请求分组,防火墙会让外部计算机B发回的分组通过,而且仅当该分组的目的地址和端口号与防火墙内发起请求的计算机A所使用的地址和端口
号相同;而其他的分组都将被防火墙丢弃(除了一些指定开放的地址和端口)。
NAT对数据业务的影响
NAT破坏了端到端消息的完整性,对于所有NAT敏感的协议,我们都必须做出单独的处理。这些协议包括 ICMP、FTP 、DNS、SNMP、IPSec等,这些处理会使NAT变得异常复杂甚至不可实现。
FTP层报文数据中包括了自己的的IP地址(私网地址),对方终端则只能与公网地址通信。这时需要NAT上开通ALG(Application Level Gateway,应用级网关)功能。
ICMP层“目的站点不可达”的ICMP报文数据包中包括了造成错误的数据报A的首部(注意,NAT在发送A之前进行了地址转换,所以源地址不是内部主机的真实地址,即私网地址),ALG需要转换ICMP包数据部分的报文A首部的地址,使之转换为私网地址后再发送出去。
另外还需要针对IPV4与IPV6互通场景进行ALG处理,以DNS为例:
在组网的时候,如果处于V6网络的主机需要连接到V4网络中的主机,V6主机可以认为V4主机的所对应的IPv6地址为NATPT前缀+IPv4主机地址。如:V4主机地址为10.18.34.1,NATPT设备设定的前缀为2222::/64,则V4主机对应的IPv6地址就是2222::10.18.34.1或2222::0a12:2201。
但是当V4网络中的主机需要访问V6网络中的主机的时候就不能按照这种方法来做,V4主机可以按照V6主机所对应的域名来访问,这就需要用到DNS-ALG功能。
一般的路由器支持上述转换功能,但并不支持VOIP业务层协议的穿越。
由于NAT的存在,使得对等体之间不能进行直接的通信。在P2P网络中,对等体允许分布在不同的地址空间中,很多对等体都位于NAT之后,使用私有地址,这就意味着对等体之间的通信要能够穿越NAT。
IPSec
IP数据包本身是不安全的,因为它不能确保数据的完整性,也不能保证数据源的合法性,也不能防止数据内容被窥视等。
IPSec在IP层提供安全服务,可以使系统选择自己要求的安全协议、运算规则以及加密密钥。IPSec可以在一对主机、一对安全网关、安全网关和主机之间提供一条或多条路径的保护。
IPSec能提供的安全服务包括访问控制、无连接完整性、数据源验证、抗重播包、加密、以及有限的传输流加密。因为这些服务是在IP层被提供,所以它们可以用于更上层协议(例如:TCP,UDP,ICMP,BGP等)。
IPSec使用两种协议提供通信安全-—验证头(AH)和封装安全载荷(ESP)。
AH提供无连接的完整性,数据源验证,以及可选的抗重播服务。
ESP协议可以提供加密,及有限的传输流加密。它也可以提供无连接完整性,数据源验证,和抗重播服务。
这些协议可以被单独使用,也可以被联合使用,从而在IP层提供期待的安全服务。每个协议均支持两种模式:传输模式和隧道模式。传输模式中,协议主要被用来为上层协议提供保护;在隧道模式中,协议被用来为IP包提供一个安全隧道。
SA(安全联盟)的概念是IPSec的基础,它是通讯对等双方对某些要素的一种协定。通过SA,IPSec能够区分不同的数据流提供的安全服务。SA是单工的,输出、输入的数据流需要独立的SA。
SA由一个三元组唯一的标定,该三元组一个是SPI(安全参数索引)、一个用于输出处理SA的目的IP地址或者一个用于输入处理的SA的源IP地址、以及一个特定的协议(如AH 或者ESP)。SPI是为了唯一标识SA而生成的32位整数,他在AH和ESP头中传输。IPSec数据报的接受方通过包中的SPI、源或者目的地址、协议来搜索SAD(安全联盟数据库),来共同确定与该数据包相关联的SA或者SAs(SA束)。
NAT和IPSec共同实施
a) NAT和IPSec AH之间的不兼容
IP包中的目的地址和源地址作为AH完整性校验数据的一部分,NAT改变地址域将导致消息完整性校验失败。ESP完整性校验数据中不包括消息的目的地址和源地址,所以这个问题在ESP中不会发生。这里我们分别来看一下AH的两种操作模式:传输模式和隧道模式:
从下面的两个图我们可以看出,AH无论是传输模式还是隧道模式,其完整性校验数据都包括了最外面的IP包头中的不变部分,所以他们都和NAT存在不兼容。
b) 校验和与NAT的不兼容
ESP没有上面AH的问题,但存在其他问题。TCP/UDP/SCTP校验和的计算包含消息的伪首部。结果就是,接受方接收到经过NAT转换的消息,将导致校验和计算失败。我们来分别看一下ESP的传输模式和隧道模式:
从上面的图中我们可以看出,ESP的传输模式时,如果传输层协议是TCP/UDP/SCTP等,NAT转换将导致校验和计算失败。 ESP的隧道模式不改变内部IP数据,不会有这种问题。
所以要解决这个问题可以有两种方式:采用ESP的隧道模式;IPSec数据包的接受端不进行校验和的计算。
注意,IPSec传输模式提供完整性校验以及很高强度的加密鉴别,对于包的修改,在进行校验和计算之前就能被检验出来。所以,这里校验和的检验仅仅是防止包作内部处理时发生错误。
c) IKE地址ID和NAT的不兼容
IKE自动建立和维护SA时,要进行端到端的认证。目前,端到端的认证最常用的方式是预共享密钥 。按照RFC2409,包中的源IP地址被用来作为端的标识。如果实施了NAT处理,将导致ID与密钥的不匹配,IKE实施中将对这样的包进行静默丢弃。
d) IKE端口和NAPT端口之间的不兼容
SA建立后,他有一个生命期,这个生命期可以是时间,也可以是流量。当SA过期后,要进行密钥更新。密钥更新请求是由一个安全网关向另一个安全网关发起的。如果SA是从IKE的知名端口500发起的,那么该端口就作为密钥更新请求的目的地址。如果NAT网关后面有多个安全网关,如何将进入的刷新密钥消息发送到正确的目的地是一个问题(见图9)。
e) SPD和NAT之间的不兼容
当NAT后面的主机使用IKE QM(IKE 快速模式)进行协商时,他们会协商相同的目的地址覆盖SPD入口,这样包就可能发送到错误的IPSec SA。这种情况之所以会发生,是因为既然他们存在于相同的端点之间,那么对于发送者,IPSec SA出现的几率是均等的。
f) IPsec SPI 选择与 NAT的不兼容
如果IPSec ESP数据流被加密,那么这些数据流对于NAT就不透明。但是NAT必须根据IPSec头中的元素来区分不同的输入IPSec数据流。目的地址、安全协议、IPSec SPI共同组合可以用来区分不同的数据流。
然而,因为外出和进入的SPI是独立选择的(不是在NAT网关上选择的),因此仅仅通过进入包中的SPI没办法确定其对应哪个目的地址。这样的话,如果NAT网关后有两台主机同时生成了到同一个目的地的IPSec SAs,那么就有可能NAT网关将进入的IPSec数据包发到错误的目的地去。
g) 嵌入式IP地址与NAT之间的不兼容
既然IPSec载荷受到完整性保护,那么,使用嵌入式IP地址的协议如果实施了IPSec都不能再进行NAT转换。这些协议包括FTP、IRC、SNMP、LDAP、H.323、SIP以及很多游戏等。
4、 兼容方式
从上面的介绍可以看出,采用IPSec 的隧道模式,可以实现NAT与IPSec的兼容。但是实现这种兼容必须要满足下面一些条件:
a) IPsec ESP
IPSec ESP隧道完整性检验的数据源不包含数据包的 IP头,所以完整性检验不会受到外部IP头改变的影响。IPSec ESP隧道模式也不需要关心校验和的有效性,因为其校验和的伪首部中涉及的IP地址是内部IP头的目的和源地址,而内部IP头的目的和源地址在IPSec ESP 的隧道模式中并不会发生改变。所以,如果校验和在NAT实施前是有效的,那么在NAT实施后将仍然有效。
b) 无地址确认
当前大部分IPSEC 隧道模式的实施都不进行源地址的确认,所以不会检查到IKE ID与源地址的不兼容问题,但这会带来地址欺骗的安全隐患。
c) "Any to Any" SPD 入口
IPsec 隧道模式客户可以协商"any to any" SPDs,这种模式通过地址翻译以后仍然有效。 这有效地避免了用SPD过滤允许的隧道流的情况。
d) 单客户操作
如果NAT背后仅有一个客户,不存在SPDs覆盖的危险。因为NAT将不需要在多个竞争客户之间作出选择,也就避免了密钥更新时的地址错误翻译等。
e) 没有分片
当使用证书验证时可能遇到IKE分片。当需要证书链时,这有可能发生。甚至当交换一个单独的证书时,如果密钥的长度或者证书的其他域的长度足够长,这种情况都有可能发生。然而,当使用预共享密钥进行验证时,分片几乎不可能发生。
5、 解决方式
5.1 IPSec ESP的隧道模式
在上面我们已经介绍了IPSec ESP的隧道模式,这是目前要求的 共同实施IPSec和NAT时要能实现的一种模式。
5.2 在实施IPSec前实施NAT
到目前为止,兼容IPSec和NAT的最简单的方法,并且能够完全避免上面的问题,就是将IPSec的端点设在公网上, NAT在IPSec之前实施。组网如下: