6Teredo 原理概述.docx
《6Teredo 原理概述.docx》由会员分享,可在线阅读,更多相关《6Teredo 原理概述.docx(37页珍藏版)》请在冰豆网上搜索。
6Teredo原理概述
Teredo原理概述-IPv6隧道技术
IPv6论坛-PoweredbyDiscuz!
摘要
了解Teredo(又成为面向IPv6的IPv4NAT穿越,是一项IPv6/IPv4过渡技术,在IPv6/IPv4主机位于一个或多个IPv4NAT之后时,用来为单播IPv6连接提供地址分配和主机间自动隧道。
为了能够通过IPv4NAT,IPv6数据包作为基于IPv4的用户数据包协议(UDP)消息发送出去。
本文向读者提供了有关Teredo的概述(包括Teredo地址以及数据包结构),并且详细解释了Teredo客户端的发起通信的方式、特定于Teredo主机的中继、仅支持IPv6主机使用IPv4Internet的方法、IPv6Internet、Teredo服务器以及Teredo中继。
鸣谢
ChristianHuitema,架构设计师,Microsoft公司
StewartTansley,项目经理,Microsoft公司
MohitTalwar,软件开发工程师,Microsoft公司
DaveThaler,软件开发主管,Microsoft公司
本页内容
简介
网络地址转换(NAT)概述
Teredo构成
Teredo地址
Teredo数据包格式
Teredo路由
Teredo过程
总结
简介
在开始有关Teredo详细讨论前,我们有必要首先了解一下什么是Teredo以及我们为什么需要它。
Teredo是一项地址分配和自动隧道技术,能够跨越IPv4Internet实现IPv6单播连接。
在它之前已经有了一种能够通过IPv4Internet实现IPv6单播连接的自动隧道技术——6to4。
6to4路由器使用一个公用的IPv4地址来构建6to4前缀,起到IPv6通告和促进路由器的作用。
6to4路由器压缩和解压经过站点节点的IPv6数据流。
6to4技术依靠公用IPv4地址的配置以及边界设备中采用的6to4路由功能。
在许多小型办公室/家庭办公室(SOHO)配置中,IPv4Internet络地址转换(NAT)被广泛使用。
如要了解更多关于网络地址转换工作的情况,请参阅文中的“网络地址转换(NAT)概述”。
在大多数NAT配置中,提供NAT功能的设备并不具备成为6to4路由器的功能。
即使NAT设备普遍支持6to4,还是有一些配置包含多层NAT。
在这些多层配置中,支持6to4的NAT无法成为路由器,因为它不具备一个公共的IPv4地址。
Teredo通过在站点内的主机之间实现IPv6数据包隧道来解决现今NAT设备缺乏6to4功能以及多层NAT配置问题。
相反,6to4使用边缘设备之间的隧道。
主机之间隧道给NAT带来了另外一个问题:
IPv4压缩的IPv6数据包发送时协议域的IPv4标头设定为41。
大多数的NAT只解析TCP或者UDP数据流,而且需要通过手动设置来实现对其它协议的解析或者安装负责处理解析的NAT编辑器。
因为协议41的解析并不是NAT的通用功能,所以IPv4压缩的IPv6通信传输不能通过一般的NAT。
为了使IPv6数据传输能够通过单个或多层NAT,IPv6数据包必须压缩成IPv4UDP格式的数据,包含IPv4和UDP标头各一个。
UDP数据普遍能够被NAT解析而且能够通过多层NAT。
总之,Teredo是一项IPv6/IPv4转换技术,能够实现在处于单个或者多个IPv4NAT后的主机之间的IPv6自动隧道。
来自Teredo主机的IPv6数据流能够通过NAT,因为它是以IPv4UDP数据格式发送的。
如果NAT支持UDP端口解析,那么它就支持Teredo。
但是对称NAT是一个例外,详细情况在本文的"NAT的种类"中讲解。
Teredo是作为实现IPv6连接最后一种转换技术而设计的,认识到这一点很重要。
如果原来的IPv6、6to4或者ISATAP连接可用,那么主机就不必作为Teredo的客户端。
现在,越来越多的IPv4NAT经过了升级以便能够支持6to4,而且IPv6连接变得越来越普遍,Teredo将会使用得越来越少,直到最后完全被放弃。
网络地址转换(NAT)概述
网络地址转换(NAT)是指符合RFC1631标准的IPv4路由器,它能够在发送前解析数据包IP地址以及TCP/UDP端口号。
例如,设想一个由多台计算机组成的,连接到Internet的小型商务网。
通常需要为每台连接到Internet的电脑从Internet服务提供商(ISP)处得到一个IP地址。
但是通过NAT,这个小型的商务网就可以使用私有地址(如RFC1918所述),然后通过NAT将专用地址映射到单个或者多个IP公用地址。
NAT是针对以下各项要求的常见解决方案:
•你想利用一条连接访问Internet,而不是将多台电脑连接到Internet上。
•你想使用私有地址。
•你想在不部署代理服务器的情况下使用Internet资源。
网络地址转换的工作原理
当一台小型商务企业的内部网计算机用户连接到Internet资源时,该用户的TCP/IP协议产生一个IP数据包,该数据包包含以下值,这些值位于IP和TCP或UDP标头中:
(粗体内容表示受NAT影响的项目):
•目标IP地址:
Internet资源IP地址
•源IP地址:
私有IP地址
•目标端口:
Internet资源TCP或UDP端口
•源端口:
源应用程序TCP或UDP端口
请求源主机或者其它路由器将此IP数据包发送给NAT,然后由NAT将向外发送的数据包的地址解析如下:
•目标IP地址:
Internet资源IP地址
•源IP地址:
ISP分配的公用地址
•目标端口:
Internet资源TCP或UDP端口
•源端口:
重新映射的源应用程序TCP或UDP端口
NAT将重新映射的IP数据包发送到Internet。
响应计算机将向NAT返回一个响应。
当NAT接收到此响应时,该数据包将包含以下地址信息:
•目标IP地址:
ISP分配的公用地址
•源IP地址:
Internet资源IP地址
•目标端口:
重新映射的源应用程序TCP或UDP端口
•源端口:
Internet资源的TCP或者UDP端口
当NAT完成映射和解析地址后,将向Internet客户端发送数据包,此数据包包含以下地址信息:
•目标IP地址:
私有IP地址
•源IP地址:
Internet资源IP地址
•目标端口:
源应用程序TCP或者UDP端口
•源端口:
Internet资源TCP或UDP端口
对于向外发送的数据包,源IP地址和TCP/UDP端口号将被映射到一个公用源IP地址和一个可能变化的TCP/UDP端口号。
对于接收的数据包,目标IP地址和TCP/UDP端口号将被映射到私有IP地址和初始TCP/UDP端口号。
例如,一个小型办公网络使用192.168.0.0/24作为企业内部网络私有ID并且其Internet网络服务提供商分配的单一公用IP地址为131.107.0.1。
当此小型内部网中一台内部私有地址为192.168.0.99的客户访问IP地址为157.60.0.1的网站服务器时,此用户机的TCP/IP协议产生一个包含以下在IP和TCP或者UDP标头中的数值的IP数据包:
•目标IP地址:
157.60.0.1
•源IP地址:
192.168.0.99
•目标端口:
80
•源端口:
1025
请求源主机将此IP数据包发送给NAT设备,然后由NAT设备解析向外发送数据包的地址如下:
•目标IP地址:
157.60.0.1
•源IP地址:
131.107.0.1
•目标端口:
80
•源端口:
5000
NAT将重新映射后的IP数据包发送到Internet。
网站服务器向NAT返回一个响应。
当NAT接受到此响应时,数据包包含以下地址信息:
•目标IP地址:
131.107.0.1
•源IP地址:
157.50.0.1
•目标端口:
5000
•源端口:
80
当NAT完成地址的映射和解析后,它将此数据包发送给Internet客户端,数据包包含以下地址信息:
•目标IP地址:
192.168.0.99
•源IP地址:
157.60.0.1
•目标端口:
1025
•源端口:
80
图1展示了此例子的配置方式。
图1:
NAT示例
从私用流量到公共流量的映射储存在一个NAT转换表中,包括两种类型的条目:
1.动态映射
在专用网络用户开始通信时产生。
除非被与NAT转换表相对应的流量所刷新,否则动态映射在指定的时间后将从NAT转换表中删除。
2.静态映射
通过手动设置,使Internet客户进行的通信能够映射到某个特定的私有网络地址和端口。
如果想让连接在Internet上的计算机能够使用某个私有网络上的服务器(如网站服务器)以及应用程序(如游戏),那么静态映射是必需的。
静态映射不会从NAT转换表中删除。
如果在NAT转换表中存在某个映射,那么NAT只是单向地从Internet向私有网络传送数据。
这样,NAT就为连接到私有网络部分的计算机提供了某种程度的保护。
但是,如果考虑到Internet的安全性,NAT就要配合全功能的防火墙一起使用。
NAT的类型
以下各类NAT的定义:
•Cone(Cone)NAT
完全NAT是指在NAT转换表中存储了内部地址和端口号与外部地址和端口号之间映射关系的一类NAT。
一旦NAT转换表开始工作,来自任何源地址和端口通往外部地址和端口的入站数据包都将被转换。
•受限NAT
受限NAT是指在NAT转换表中存储了内部地址和端口号与外部地址和端口号之间的映射,无论是特定的源地址或者特定源地址与端口号。
如果从某个未知外部地址或者端口到外部目标地址和端口的入站数据包与NAT转换表吻合,那么此数据流将被自动放弃。
•对称NAT
对称NAT是指根据外部目标地址(适用于出站数据包)将相同的内部地址和端口号映射到不同的外部地址和端口号的NAT。
Teredo只能工作于Cone和受限NAT,不能工作于对称NAT。
Teredo构成
Teredo结构由以下各部分组成(如图2所示):
•Teredo客户端
•Teredo服务器
•Teredo中继
•特定于Teredo主机的中继
图2:
Teredo结构图
Teredo客户端
Teredo客户端是指支持Teredo隧道接口的IPv6/IPv4节点,通过此隧道界面数据包可以传送给其它的Teredo客户端以及IPv6Internet上的其它节点(通过Teredo中继)。
Teredo客户端与Teredo服务器建立通信获得配置基于Teredo的IPv6地址用的地址前缀或者帮助建立与IPv6Internet上其它Teredo客户端和服务器之间的通信。
TheAdvancedNetworkingPackforWindowsXP包含了一个Teredo客户端。
Teredo服务器
Teredo服务器是指连接IPv4Internet与IPv6Internet的IPv6/IPv4节点,支持用来接受数据包的Teredo隧道接口。
Teredo服务器的常见作用是帮助Teredo客户端的地址配置以及协助在Teredo客户端之间或者客户端与纯IPv6主机之间与其他Teredo客户端建立通信连接。
Teredo服务器使用UDP3544端口侦听Teredo通信。
有关Teredo服务器在协助建立通信连接中的作用,请参阅本文"Teredo程序步骤"。
TheAdvancedNetworkingPackforWindowsXP不包含Teredo服务器功能。
TheAdvancedNetworkingPackforWindowsXP有助于建立通信连接,Microsoft采用IPv4Internet上的Teredo服务器。
Teredo中继
Teredo中继是指能够在IPv4Internet上的Teredo客户端之间(使用Teredo隧道接口)以及与纯IPv6主机之间传送数据包的IPv6/IPv4路由器。
在某些情况下,Teredo中继和Teredo服务器协同工作,帮助在Teredo客户端之间以及与纯IPv6主机之间建立连接。
Teredor中继使用UDP3544端口侦听Teredo通信。
有关Teredo中继在Teredo客户端之间以及Teredo客户端与纯IPv6主机之间的发起和开展通信方面所具有的作用,请参阅本文中"Teredo进程"部分。
TheAdvancedNetworkingPackforWindowsXP不包含Teredo中继功能。
Microsoft没有打算使用任何IPv4Internet上的Teredo中继。
个人Internet服务提供商(ISP)可以使用他们自己的Teredo中继。
在向处于IPv6Internet上的IPv6主机发送数据包的时候,采用了TheAdvancedNetworkingPackforWindowsXP的Teredo客户端将和Teredo中继协同工作。
Teredo中继并不需要和特定于Teredo主机的中继进行通信。
特定于Teredo主机的中继
配置了全球地址的Teredo客户端与IPv6主机之间的通信必须经过Teredo中继。
这对于连接到IPv6Internet的IPv6主机而言是必需的。
但是,当IPv6主机既支持IPv6又支持IPv4,并且同时连接到IPv4Internet和IPv6Internet,那么,Teredo客户端与IPv6主机之间的通信就会通过IPv4Internet实现,而不必经过IPv6Internet和Teredo中继。
特定于Teredo主机的中继是指同时具有IPv4与IPv6Internet连接,并且无需Teredo中继即可通过IPv4Internet直接与Teredo客户端通信的IPv6/IPv4节点。
与IPv4Internet的连接可以通过使用一个公用的IPv4地址或者使用一个专用IPv4地址和边界NAT来实现。
与IPv6Internet的连接可以通过直接连接或者当IPv6数据包通过IPv4Internet隧道时使用诸如6to4这类的IPv6转换技术来实现。
特定于Teredo主机的中继使用UDP3544端口侦听Teredo通信。
采用了TheAdvancedNetworkingPackforWindowsXP的Teredo客户端包括了特定于Teredo主机的中继功能。
当在安装了SP1或者更高版本的补丁并且分配了全球地址的WindowsXP上安装了TheAdvancedNetworkingPackforWindowsXP后,特定于Teredo主机的中继功能便会自动激活。
这个全球地址可以通过从本地IPv6路由器、ISATAP路由器或者6to4路由器发送的路由器通告中获得。
如果运行WindowsXPSP1的计算机没有全球地址,那么Teredo客户端功能便被激活。
特定于Teredo主机的中继能够使Teredo客户端与6to4主机、带有非6to4全球地址前缀的IPv6主机或者组织内部的地址中使用全球前缀的ISATAP以及6over4主机进行有效通信。
但是所有的主机都必须使用TheAdvancedNetworkingPackforWindowsXP。
Teredo地址
Teredo地址格式见图3。
图3:
Teredo地址格式
Teredo地址包含以下内容:
•Teredo前缀
最前面的32位是Teredo前缀,所有的Teredo地址的前缀都是相同的。
互联网号码分配机构(IANA)还没有对该前缀进行定义,尽管该前缀3FFE:
831F:
:
/32已经运用于初始配置。
•Teredo服务器IPv4地址
接下来的32位包含Teredo服务器的IPv4的公共地址以帮助设定Teredo地址。
更多信息请参阅本文中的"Teredo客户的初始配置"。
•标志
接下来的16位是为Teredo标志预留的。
唯一定义的标志是被称作“ConeFlag”的高位。
只有当接入Internet的NAT为ConeNAT时,“ConeFlag”才可以使用。
接入Internet的NAT是否是ConeNAT在Teredo客户端的初始配置中设定。
更多信息请参阅本文的"Teredo客户初始设定"章节。
•隐藏外部端口
接下来的16位储存的是与该Teredo客户端所有Teredo通信相对应的外部UDP端口的隐藏模式。
当Teredo客户端向Teredo服务器发送初始数据包时,NAT会将源数据包的UDP端口映射到一个不同的外部UDP端口。
Teredo客户保留了这个端口映射以便使其留在NAT转换表中。
因此,主机所有的Teredo通信均使用同一外部映射的UDP端口。
UDP外部端口是由Teredo服务器根据从UDP源端口导入的原始Teredo客户数据包决定并发回Teredo客户的。
外部端口的隐藏是将外部端口与0xFFFF进行逻辑异或运算。
例如,外部端口的隐藏文件5000的16位进制格式是EC77(5000=0x1388,0x1388XOR0xFFFF=0xEC77)。
隐藏这个外部端口可以预防NAT在数据包的有效载荷内转发时对其进行转换。
•隐藏外部地址
最后32位储存与Teredo客户端所有Teredo通信相对应的外部IPv4地址的模糊形式。
就像外部端口一样,当Teredo客户端向其服务器发送初始数据包后,数据包的源IP地址被NAT映射到一个不同的外部公用地址。
Teredo客户保留了这个地址映射以便使其留在NAT的转换表。
因此,主机上所有的Teredo通信均使用同一外部的映射公用IPv4地址。
外部IPv4地址是由Teredo服务器根据Teredo客户发送的原始数据包的源IPv4地址决定的,并且发回给Teredo客户。
外部地址通过与0xFFFFFFFF进行异或运算后被隐藏。
例如,公共IPv4地址131.107.0.1隐藏后其十六进制的冒号格式为7C94:
FFFE(131.107.0.1=0x836B0001,0x836B0001XOR0xFFFFFFFF=0x7C94FFFE)。
隐藏外部地址避免了NAT在数据包的有效载荷内转发时将其转换。
图4是2个Teredo客户端与他们的地址的示例。
图4:
Teredo地址示例
对于Teredo客户端A,其Teredo地址由以下项目组成:
•Teredo通信的外部地址和端口是157.60.0.1,UDP端口是4096
•Teredo服务器的公用IPv4a地址为206.73.118.1
•位于一个ConeNAT后面
所以,使用Teredo地址前缀格式:
ServerAddr:
Flags:
ObscExtPort:
ObscExtAddr,Teredo客户端Teredo地址为3FFE:
831F:
CE49:
7601:
0:
DFFF:
7C94:
FFFE。
这基于以下几点:
•CE49:
7601是206.73.118.1的16进制冒号形式
•8000是完全标记设为1时标记域的值,表示Teredo客户端A的NAT是一个ConeNAT。
•EFFF是4096(0x1000)的隐藏形式
•C2C3:
FFFE是157.60.0.1的隐藏形式
对于Teredo客户端B,其Teredo地址由以下项目组成:
•Teredo通信的外部地址和端口是131.107.0.1,UDP端口是8192
•Teredo服务器位于公用IPv4a地址206.73.118.1上
•位于一个受限NAT的后面
所以,使用Teredo地址前缀格式:
ServerAddr:
Flags:
ObscExtPort:
ObscExtAddr,Teredo客户端Teredo地址为3FFE:
831F:
CE49:
7601:
0:
DFFF:
7C94:
FFFE。
这基于以下几点:
•CE49:
7601是206.73.118.1的16进制冒号形式
•0是完全标记设为0时标记域的值,表示Teredo客户端B的NAT是一个受限NAT。
•DFFF是8192(0x2000)的隐藏形式
•7C94:
FFFE是131.107.0.1的隐藏形式
Teredo地址只是分配给Teredo客户端。
Teredo服务器、中继、和特定于主机的中继并不分配Teredo地址。
Teredo数据包格式
本章节讨论以下问题:
•Teredo数据包格式
•Teredo气泡数据包
•Teredo指示符
Teredo数据包格式
Teredo数据包格式如图5所示。
图5:
Teredo数据包格式
Teredo数据包由以下部分构成:
•IPv4标头包含与自动隧道终端相对应的源IPv4地址和目标IPv4地址并且可以被NAT转换。
•UDP标头包含Teredo数据通信的源端口和目标端口,可以被NAT解析。
•IPv6标头包含源IPv6地址和目标IPv6地址,其中至少有一个是Teredo地址。
•IPv6载荷包含零个或者更多的IPv6扩展标头以及压缩的IPv6数据包的上层协议数据单位(PDU)。
Teredo气泡数据包
Teredo气泡数据包为建立或维持一个NAT映射而发送,由IPv6标头组成,并且不包含IPv6有效载荷。
图6为Teredo气泡数据包。
图6:
Teredo气泡数据包