面向NAT用户的IPv6过渡技术

时间:2022-02-19 01:24:45

面向NAT用户的IPv6过渡技术

摘要:传统的隧道技术不能满足隐藏在网络地址转换(NAT)域内的IPv6节点的通信要求。针对此问题,提出了一种新的面向NAT用户的IPv6过渡技术Silkroad,它可以使位于一个或多个IPv4 NAT内的节点获得IPv6的连通性。Silkroad支持所有类型的NAT用户和IPv6网络进行互联,且不需要升级现有的NAT设备;此外,Silkroad不需要任何特殊的IPv6地址前缀,能够为NAT用户分配固定的IPv6地址,并具有更高的安全性。

关键词: IPv6协议;过渡技术;网络地址转换技术;隧道技术

Abstract: Traditional tunneling methods are not suitable for IPv6 nodes, which are hidden in the network address translator (NAT). In this paper, we propose a new IPv6 transition mechanism, called Silkroad, for new NAT users. Silkroad allows nodes in one or several IPv4 NATs to use IPv6 connectivity. It also allows all types of NAT users to connect with IPv6 networks without updating NAT devices. In addition, Silkroad does not need a special IPv6 addressing prefix and can assign stable IPv6 addresses to users. It is also highly secure.

Key words: IPv6 protocol; transition technology; NAT technology; tunnel technology

由于整个网络从IPv4升级到IPv6需要一个漫长的过程,所以IPv6网络在其发展的初始阶段使用的主要是现有IPv4网络的传输设施。鉴于此,IPv6过渡的关键点在于如何兼容现有IPv4网络下众多的主机和路由器设备。在兼容IPv4网络的同时部署IPv6网络,将会使整个网络的过渡平滑而自然。在这种愿景的驱动下,出现了很多IPv4承载IPv6(IPv6 over IPv4)的隧道技术,它们都是将IPv6数据置于IPv4包的载荷部分进行数据的收发,负载的类型为41。然而,这些方法都不适用于位于网络地址转换(NAT)域内的IPv6设备,其主要原因是NAT一般都会对入口的包进行过滤,拒绝包括负载类型41在内的很多种数据包。即便允许它们通过,由于NAT内所使用的都是私有IPv4地址,也无法使用IPv6到IPv4(6to4)及很多其他的隧道机制。

NAT是解决IPv4地址不足的一种临时性技术[1]。由于IP地址资源短缺现象很严重,所以NAT技术使用得非常普遍。在NAT内,用户使用私有地址进行通信,在NAT外,则被转换为一个或若干个公有地址。由于私有地址并不是全局唯一的,所以外部互联网的节点不能够主动访问NAT内的节点,这严重破坏了端到端的连通性,因此它们更迫切需要过渡到IPv6。目前有4种NAT类型[2],分别是完全锥型NAT、受限锥型NAT、端口受限型NAT和对称型NAT。一般NAT不允许任意负载类型的数据包通过,这致使很多IPv6的隧道技术无法直接应用于NAT内的IPv6设备。因此,提供面向NAT用户的IPv6过渡技术已经成为了一个非常急迫的任务。

一种解决上述问题的方案是由微软提出的Teredo隧道技术[3],也是目前除了本文所提的Silkroad隧道技术之外的唯一解决方案。它采用IPv6在UDP中(IPv6-in-UDP)的封装方式,将IPv6的数据包置于私有IPv4数据包的数据报协议(UDP)载荷中,而不需要升级现有的NAT设备。然而,Teredo隧道技术却存在着很多不足。首先,Teredo隧道技术不能为用户分配固定不变的IPv6地址,其地址内嵌了相关的隧道参数,即用户的私有地址和UDP源端口经过NAT转换后的外部地址和外部端口。由于外部地址和外部端口在每次初始化时的随机性,用户在使用Teredo隧道技术进行通信时往往会被NAT转换成不同的外部地址或外部端口,从而获得和上次不同的IPv6地址。这种IPv6地址经常变化的情况破坏了NAT用户端到端的连通性,丧失了IPv6本来的优势。其次,Teredo隧道技术不支持对称型NAT用户。由于对称型NAT根据数据包目的地址来转换它的私有地址和UDP源端口,如果目的地址不同,那么转换后的外部地址和外部端口也就不同。Teredo协议本身采用的是客户端-客户端隧道模式,通信对端就是隧道端点,这样随着通信目的地的变化隧道参数也在不断变化,这违背了Teredo中IPv6地址配置后隧道参数不变的假定。最后,Teredo的机制本身存在着严重的安全漏洞,不能有效地阻止非法用户利用Teredo中继器和IPv6网络互联。由于Teredo中继器的无状态特性,任何没有经过身份验证的非法用户只需要构造出符合Teredo格式的源IPv6地址就可以轻松享用中继器提供的数据转发服务。非法用户通过这种方式获得IPv6连接后,便可以对IPv6网络上的节点实施攻击。

1 Silkroad协议设计

同Teredo相比,本文提出的Silkroad协议可以为NAT用户提供不变的IPv6地址,并可适用于对称型NAT中,使系统在安全方面得到了很好的保障。

1.1 Silkroad体系结构

Silkroad典型的体系结构如图1所示,其实现机制主要包括3个实体部分:Silkroad客户端(SC),Silkroad接入路由器(SAR),Silkroad导航器(SN)。其中SC为位于NAT之后想要使用IPv6网络的终端用户,它是一个双栈节点,向应用程序提供透明的IPv6连接。SAR为SC提供身份认证及中继数据的服务,它同时与IPv4与IPv6网络相连,也是一个双栈节点。SN位于IPv4网络中,拥有SC的注册信息和SAR的部署情况,它的主要功能是为SC选择一个就近的SAR进行接入,并对各个SAR的运行状况进行监视。

1.2 Silkroad操作规程

1.2.1 SAR的确定

在Silkroad协议操作的开始阶段,SC选择适当的SAR来为自己提供Silkroad隧道服务。换句话说,SC必须知道它的SAR的IPv4地址。SC获取SAR网络信息的方式有多种,例如SC可以从系统管理员处获得SAR的信息,也可以用域名服务器(DNS)去查找SAR,还可以用预先配置或设定的IPv4任播地址查找SAR。当然,因特网业务提供商(ISP)也可通过其他方式把SAR的地址或域名通告给SC。无论如何,SAR的信息一旦确定,将自动保存到SC的配置文件中。如果SC没有明确地改变它的配置,此SAR将成为SC的默认SAR。

1.2.2 IPv6地址的获取

为了获得IPv6地址,SC通过UDP隧道向SAR发送一个常规的路由请求,而SAR则通过UDP隧道向SC回复一个常规的路由通告,其中包含所请求的IPv6地址。SAR返回的响应报文还包含一个控制选项,可用于存放SAR收到路由请求时所看到的SC地址信息(经NAT映射后的IPv4地址和端口)。事实上,当一个地址请求报文到达SAR时,可能经过了多级NAT设备,此时SAR看到的地址请求报文的源地址和端口应该是最靠近SAR的那个NAT所映射的地址和端口。SAR将会把该地址和端口写入响应报文的控制选项字段,和IPv6的地址响应信息一起返回给SC。

由SAR分配给SC的IPv6地址永久分配给SC,这样即使SC的IPv4地址是动态分配的,也可保持一个固定的IPv6地址。而SC也可以要求分配临时的IPv6地址,这样的地址会有一个生存期,超过生存期后地址将被收回,除非SC提交延长地址生存期的请求。一旦一个SAR给SC分配了IPv6地址,这个SAR就会在自己的映射表里面维护一个地址映射,将SC的IPv6地址同SC的IPv4映射地址及映射端口绑定在一起,该绑定可以随着SC的IPv4地址的改变而相应动态更新。

1.2.3 NAT类型的确定

当SC收到地址响应后,将把控制选项字段中的IP地址和端口与自己发送路由请求时绑定的本地IP地址和端口进行比较。如果不匹配,则SC位于NAT域内;否则SC不需要使用Silkroad服务。为了获得更高的传输效率,SC可以选择在SAR的帮助下确定它所使用的NAT类型。为此,SC发送“测试请求”,而SAR返回“测试应答”,基本过程可参照文献[2]中的描述。一旦确定,NAT类型将被SC保存。

1.2.4 从SC到普通IPv6节点的报文

传输

图2显示了一个SC和一个普通的IPv6节点之间的报文传输,其中A是NAT域中的SC,R1是A所选择的SAR,B是一个普通IPv6节点,R2是靠近B的SAR。A若要向B发送IPv6包,A首先要把这个IPv6包封装在IPv4的UDP数据包中,并把它发送给R1。此报文称作Silkroad包,这种包的格式如图3所示。

NAT会接收此数据包,用映射地址和映射端口替换UDP的源地址和源端口,然后把包转发出去。此包通过IPv4的UDP隧道1后被R1接收,R1查看IPv6目的地址并在当前的通信对等节点列表中检查这个IPv6地址对应的表项是否存在以及该表项是否有效。如果这个IPv6地址对应的表项不存在或无效,R1将登录它的SN去查找是否B是由另一SAR提供服务的SC。此查找过程与DNS的处理过程类似。SN将在自己的管理域中查找SAR的信息,如果没找到对应表项,它将查询上层SN。SN中的默认路由是直接接入IPv6网络的SAR,这就意味着当R1找不到可以转发数据包到目的IPv6地址的SAR时,会直接将该数据包转发到IPv6网络上,之后数据包便开始遵循IPv6的路由规则进行常规的数据转发。

图2中,确定了R2的地址后,R1就会将IPv6包和控制选项字段一起通过隧道发送给R2。R1和R2之间的传输可以遵循不同的方式,它们可以用另一条UDP隧道传输IPv6包,如图2中的UDP隧道2。这种方法的优点是转发之前R1的处理比较简单,只需要替换掉UDP的源地址和源端口以及目的地址和目的端口即可。然而,UDP封装将带来一定的开销。Silkroad还可以像传统的隧道机制那样,使用IPv6在IPv4中(IPv6-in-IPv4)的封装方式,把IPv6包作为IPv4包的载荷在SAR之间发送。但是这种方法不支持控制选项字段,而且R1在转发之前必须拆包并重新封装。ISP可以指定SAR之间的传输方式,默认的处理是当包中有控制选项字段时,SAR通过UDP隧道转发包;否则,使用传统隧道转发包。事实上,控制选项字段一般只出现于一次会话的前几个报文中。在Silkroad隧道机制中,SAR需要监听UDP和IP两种封装,但是无论在SAR之间采用哪种传输方法,SC只需要支持UDP封装。为简单起见,在下面的描述中,我们假设SAR之间都使用UDP隧道转发报文。当R2接收到数据包后,如果发现B是它所负责的SC,那么R2就会把该数据包通过隧道转发给B,否则,R2将会从UDP载荷中解封装出IPv6数据包再发往IPv6网络上给B。注意R1和R2可能是同一个SAR,此时,UDP隧道2将不存在。

1.2.5 从普通IPv6节点到SC的报文

传输

图2中,B是一个普通的IPv6节点,A是一个SC,R1是A所对应的SAR。当B想要向A发送IPv6包时,B只需要遵循IPv6规则,由于A的地址空间属于R1的管辖区域,此数据包可以正常转发到R1上。当R1接收到该数据包后,发现A是它所负责的SC,然后就通过UDP隧道1转发该数据包给A。

2 路由优化

为了达到更高的传输效率,Silkroad机制在某些情况下可以进行路由优化。

2.1 两个SC间的路由优化

两个SC间的路由优化如图4所示。假设A和B是两个SC,分别位于NAT为N1、N2的后面。R1、R2分别是A和B所选择的SAR,它们也可能是同一个SAR。事实上,A和B都能识别Silkroad报文。因此,A和B可以直接互通,条件是N1和N2不能同为对称型NAT。当然,在直接通信前,A和B需要借助R1、R2交换必要的参数信息。

在A与B通信时,如果A想进行路由优化,A首先应在R1的协助下确定N1的NAT类型。然后,A将自己的映射地址和映射端口以及NAT类型封装到Silkroad报文的控制选项字段内发给B。如果N1和N2都是完全锥型NAT,则B在响应报文的控制选项字段内嵌入自己的映射地址和映射端口,通过UDP封装直接返回给A,而后A、B即可通过UDP隧道直接通信。如果N1和N2都是对称NAT,则A、B无法在无SAR协助的情况下进行直接通信。在其他的情况下(受限锥型NAT/端口受限锥型NAT/对称型NAT),则A、B需要发送更多的测试报文,在非完全锥型NAT设备上建立对应的映射关系,而后才能直接通信。在这种情况下,建议用户只在需要传输大量数据时进行路由优化,如果交互信息量比较少,则不需要发送更多的测试报文来进行路由优化。

2.2 同一链路上两个SC间的路由优化

同一链路上两个SC间的路由优化如图5所示。假设A和B为同一链路上的两个SC,均通过名为N1的NAT接入Internet,默认SAR为R1。这里我们不考虑N1的类型,只介绍A、B间如何进行路由优化,以避免所有的报文都经过R1、N1转发。

我们假设A和B已经分别从R1获得了它们的IPv6地址。当然,如果A和B都用相同的IPv4映射地址,那么它们可能位于同一个NAT域中。然而,即使IPv4映射地址不同,它们也可能位于同一个NAT域中。另一方面,即使位于同一个NAT域内,相互之间也不一定能直接通信。所以,必须采取一些措施来确定它们之间是否是直接可达的。有许多方法可以达到这一目的,这里只是给出一种可行方案。如果A想要判断它和B是否在同一链路上,A可以把自己的私有地址放在数据包的控制选项字段中,通过N1和R1发送给B。当B接收到此包时,同时向R1以及A的私有地址返回报文,内含自己的私有地址。如果A能够收到这两个报文,则A可以确认它和B在同一链路上,可以直接互通。后继报文将利用A、B的私有地址封装,只在本地链路上传播,而不必再经过R1和N1转发。

3 安全考虑

通常,Silkroad服务被局限在一个ISP的范围里,ISP应该在它的边界上实行IPv4入口过滤,阻止SAR的地址在ISP外部被用作源地址。ISP也应该对它的用户实行IPv4入口过滤,尤其是SC,使得它们不能伪造包的IPv4源地址。

在SN和SAR的交互中,可采用安全的简单网络管理协议(SNMP)。此外,若想更简单地在远程终端上执行Shell命令(RSH),则可以采用标准的IP安全协议(IPsec)。需要指出的是SC和SAR间通信过程的安全问题。由于两者间的隧道不是面向连接的,因此如果SC单方面强行释放了隧道,SAR会继续转发隧道数据,导致数据包被错误地发到原来的IPv4地址。Silkroad机制采用了保持活动(keep-alive)机制来解决这个问题。当检测到隧道失效后,SAR立即停止向离线用户转发数据包。另一方面,SC必须确保它使用的Silkroad隧道是有效的,这可以通过检查是否定期收到来自SAR的数据包来进行验证。

NAT使SC失去了端到端的连接,但却可以获得更高的安全性,因为NAT可以被看作是一种防火墙。然而,在Silkroad的帮助下,SC在IPv6网络中变成可达的节点,这就使其成为攻击者的潜在目标。为了确保通信的安全性,SC可使用IP安全服务,如使用全局IPv6连接的认证头(AH)或封装安全载荷(ESP)。SC和SAR之间认证过程的实现将有效地阻止中间人攻击,如果认证过程经过对称或非对称加密系统加密,中间人攻击就很难实现。

4 Silkroad原型系统

Silkroad机制已经在重庆的IPv6城域网示范项目中得到了实现验证,并已应用于中国联通的中国下一代互联网(CNGI)试验网。我们基于Silkroad实现了手机与手机或手机与个人数字助理(PDA)及PC用户间的IPv6通信。图6展示了Silkroad的原型系统,演示的内容是手机用户通过Silkroad接入IPv6网络,然后和IPv6网络中的PDA及PC用户进行基于IPv6协议的网络五子棋游戏。

当两个基于IP的手机进行端到端通信时,至少有一方需要具有公有IP地址,但目前移动运营商网络不支持IPv6,同时由于缺少IPv4公有地址,它们只能向手机用户分配私有IPv4地址。这样,手机用户本身就存在于NAT之中,即便支持IPv6也无法进行端到端的通信。通过本文的Silkroad系统,手机用户不仅可以和手机用户通信,还可以和PDA及PC用户进行通信,任何一方只要输入对方的IPv6地址就可以开始这个通信过程。可见,Silkroad在运营商网络由IPv4向IPv6的过渡过程中能起到重要的推动作用。

5 结束语

本文提供了一种可以使IPv4中的NAT用户获得IPv6网络通信的协议:Silkroad,它相比Teredo而言支持所有类型的NAT用户,能为用户分配固定不变的IPv6地址,并且具有更高的安全性。我们将Silkroad部署在示范性网络平台上,实现了手机与手机及手机与PDA或PC间的基于IPv6的端到端通信。Silkroad为NAT用户提供了接入IPv6网络的有效方法,在IPv4向IPv6的过渡过程中将会起到重要的推动作用。目前,Silkroad已经成为了中国通信行业标准[4]。其作为中科院知识创新工程重要方向项目“IPv6网络关键技术研究和城域示范系统”的重要成果,通过了由中科院组织的科技成果鉴定。鉴定专家委员会认为Silkroad技术具有明显的技术创新和实用价值,具有国际领先水平。

参考文献

[1] SRISURESH P, HOLDREGE M. IP network address translator (NAT) terminology and considerations [S]. RFC2663. 1999.

[2] ROSENBERG J, MAHY R, MATTHEWS P, et al. Session traversal utilities for NAT (STUN) [S]. RFC5389. 2008.

[3] HUITEMA C. Teredo: Tunneling IPv6 over UDP through (network address translations) NATs [S]. RFC4380. 2006.

[4] YD/T 1635-2007. IPv6网络技术要求--面向网络地址翻译(NAT)用户的IPv6隧道技术 [S]. 2007.

上一篇:智能型自动扫描定位喷水灭火装置 下一篇:关于汽车内外饰件塑料成型模具的研究