The Cable Guy - 2003年4月

发布者 作者:The Cable Guy

Windows XP高级网络程序包中的IPv6特性

cable_guy

欲了解关于The Cable Guy所主持的所有专栏的列表和更多信息,请单击此处

Windows对等网络(Windows Peer-to-Peer Networking)是一个开发平台,您可以使用其为运行Windows XP的计算机创建对等应用程序。Microsoft已发布了Windows XP高级网络程序包,其提供了用于在运行Windows XP的计算机上运行Windows对等网络应用程序的组件。有关更多信息,请参见Windows XP对等网络。

Windows对等网络平台只能运行在IPv6上。Windows XP高级网络程序包中包括的IPv6增强特性如下:

  • IPv6 Internet连接防火墙(ICF)

    必须保护使用Windows对等网络的计算机避免恶意用户使用IPv6流量进行攻击,就像Windows XP中的ICF保护计算机避免恶意用户使用IPv4流量进行攻击一样。

  • Teredo

    当连接到Internet时,许多运行Windows XP的计算机位于网络地址转换(NAT)之后;NAT在专用地址和公共IPv4地址之间转换流量。Teredo是一种NAT遍历技术,可在IPv4 Internet上提供单播IPv6连接。

本页内容

IPv6 Internet连接防火墙(ICF)
Teredo
更多信息

IPv6 Internet连接防火墙(ICF)

防火墙通过在计算机或网络与Internet之间创建边界来提供安全。您可以使用IPv6 ICF对允许来自Internet的流量动态设置限制。IPv6 ICF不同于Windows XP中现有的ICF,后者使用IPv4流量。欲了解关于IPv4版的ICF的更多信息,请参见Windows XP在线帮助。

IPv6 Internet连接防火墙(ICF):

  • 自动运行,并为启用IPv6的所有网络连接提供过滤器。

  • 监视所有传出流量,并为响应流量动态创建传入的数据包过滤器。这称为有状态的过滤。IPv6 ICF自动丢弃所有未请求的传入流量。

  • 将IPv6流量事件记录到一个单独的(独立于IPv4 ICF)文件中。默认情况下,这个日志文件位于: systemroot\Pfirewall-v6.log)。

IPv6 ICF通过自动丢弃从IPv6 ICF计算机之外的某个源(比如Internet)发起的所有数据包来保护计算机。IPv6 ICF可阻止恶意Internet用户的一些常见企图:他们使用诸如端口扫描这样的技术来获得对计算机或网络的非法访问。与通知您关于被丢弃的传入流量的情况相反,IPv6 ICF在一个安全日志中创建条目,您可以通过该日志查看防火墙所跟踪的活动。

IPv6 ICF是在netsh防火墙环境中使用命令来配置的。您可以使用netsh命令来配置IPv6 ICF,以允许发送到特定TCP或UDP端口的特定类型的ICMP流量或IPv6流量。有关更多信息,请参见配置IPv6 Internet连接防火墙

**注意:**Windows XP在“网络连接”中仅显示IPv4 ICF配置。IPv6 ICF可能显示为禁用,但它实际上已启用并且正在过滤IPv6流量。

Teredo

Teredo也称为面向IPv6的IPv4 NAT遍历,是一种IPv6/IPv4转换技术。当IPv6/IPv4主机位于一个或多个IPv4 NAT之后时,Teredo为通过IPv4的单播IPv6连接提供地址分配和主机到主机的自动隧道功能。为了横跨各个IPv4 NAT,IPv6数据包将被当作基于IPv4的用户数据报协议(UDP)消息来发送。更多关于网络地址转换如何运作的信息,请参见Windows 2000网络地址转换(NAT)

6to4(IPv6到IPv4的转换)提供了与Teredo相同的功能;然而,6to4路由器支持对于连接到Internet的边缘设备是必备的。6to4路由器功能没有得到IPv4 NAT的广泛支持。即使NAT支持6to4,对于站点和Internet之间具有多个NAT的配置,6to4仍然不能运作。

**注意:**附带Internet连接共享和IPv6协议的Windows XP支持6to4路由器功能。

Teredo通过在站点内的主机之间为IPv6包创建隧道,从而解决了现代NAT或多层NAT配置中缺乏6to4功能的问题。与此相反,6to4从边缘设备使用隧道。来自主机的隧道给NAT带来了另一个问题:IPv4封装的IPv6数据包是在IPv4报头中的Protocol字段被设置为41的情况下发送的。大多数NAT仅转换TCP或UDP流量,并且必须手动配置来转换其他流量,或者安装一个NAT编辑器来处理该转换。由于Protocol 41转换不是NAT的一个公共特性,IPv4封装的IPv6流量将不会流过典型的NAT。因此,IPv6数据包被当作IPv4 UDP消息来封装,其中同时包含IPv4和UDP报头。UDP消息能够被大多数NAT转换,并且能够横跨多个NAT层。

需要重点注意的是,Teredo被当作IPv6连接的终极转换技术而设计的。如果通信节点之间具有本地IPv6、6to4或站内自动隧道寻址协议(Intrasite Automatic Tunnel Addressing Protocol,ISATAP)连接,就不会使用Teredo。随着更多的IPv4 NAT被升级到6to4,并且随着IPv6连接的普及,Teredo的应用将变得越来越少,直至最终根本就不使用它。

有关IPv6转换技术的更多信息,请参见IPv6/IPv4共存与迁移

**注意:**Teredo仅适用于锥形(cone)或受限制(restricted)的NAT。锥形NAT存储着内部(专用)地址和端口号与外部(公用)地址和端口号之间的映射。在准备好NAT转换表条目之后,允许传入外部地址和端口号的流量来自任何源地址和端口号。受限制的NAT存储着内部地址和端口号与外部地址和端口号之间的映射(或者针对特定的外部地址,或者针对特定的外部地址和端口号)。不管是发送到外部目标地址和端口号,还是发送到某个特定的外部地址或端口号,没有与NAT转换表中的某个条目匹配的传入数据包都会自动被丢弃。还有另外一种NAT类型,称为对称NAT,它将相同的内部地址和端口号映射到不同的外部地址和端口号,具体取决于外部目标地址(针对传出流量)。Teredo不适用于对称NAT。

面向主机的Teredo中继

支持Teredo连接的组件集如下图所示。

cg040301.gif

  • Teredo客户端

    支持Teredo隧道接口的IPv6/IPv4节点,数据包通过它经由隧道传输到其他Teredo客户端或IPv6 Internet上的其他节点(通过Teredo中继)。

  • Teredo服务器

    同时连接到IPv4 Internet和IPv6 Internet的IPv4/IPv6节点。Teredo服务器的作用是协助Teredo客户端的初始配置,促进不同Teredo客户端之间或Teredo客户端和仅使用IPv6的主机之间的初始通信。

  • Teredo中继

    能够在IPv4 Internet上的Teredo客户端和仅使用IPv6的主机之间转发数据包的IPv6/IPv4路由器。

  • 面向主机的Teredo中继

    同时具有到IPv4 Internet和IPv6 Internet的接口和连接的IPv6/IPv4节点,能够通过IPv4 Internet直接与Teredo客户端通信,而无需中间Teredo中继。对IPv4 Internet的连接可以通过一个公共IPv4地址,或通过一个专用IPv4地址再加上一个邻近的NAT来实现。对IPv6 Internet的连接可以通过对IPv6 Internet的直接连接或通过诸如6to4等IPv6/IPv4转换技术来实现。

Windows XP高级网络程序包(Advanced Networking Pack for Windows XP)包括Teredo客户端和面向主机的Teredo中继功能。在安装Windows XP高级网络程序包时,如果已分配了全局IPv6地址,那么面向主机的Teredo中继功能将自动启用。全局地址可以通过从本地IPv6路由器、ISATAP路由器或6to4路由器接收到的“Router Advertisement(路由器公告)”消息来分配。如果没有配置全局地址,则启用Teredo客户端功能。

Teredo地址

Teredo地址的格式如下图所示。

cg040302.gif

Teredo地址由以下几个部分组成:

  • Teredo前缀

    前32位用作Teredo前缀,所有Teredo地址都是这样的。虽然前缀3FFE:831F::/32被用于初始部署,但是Internet地址分配机构(Internet Assigned Numbers Authority,IANA)还没有定义这个前缀。

  • Teredo服务器IPv4地址

    下一个32位包含Teredo服务器的IPv4公用地址,可用于协助这个Teredo地址的配置。

  • 标记

    接下来的16位保留作为Teredo标记。唯一已定义的标记是称为Cone标记的高序位。仅当连接到Internet的NAT是一个cone NAT时,才会设置这个标记。

  • 模糊化的外部端口

    下16位存储对应于这个Teredo客户端的所有Teredo流量的外部UDP端口的模糊化版本。当Teredo客户端向Teredo服务器发送初始数据包时,该数据包的UDP源端口被NAT映射到一个不同的外部UDP端口。主机的所有Teredo流量都使用所映射的相同外部UDP端口。

    外部端口通过专用ORing(XORing,即地址格式为0xFFFF的外部端口)实现模糊化。例如,外部端口5000的模糊化版本的十六进制格式是EC77(5000等于0x1388,0x1388 XOR 0xFFFF等于0xEC77)。模糊化外部端口将防止NAT在那些正在被转发的数据包的有效载荷中对其进行转换。

  • 模糊化的外部地址

    最后32位存储着对应于这个Teredo客户端的所有Teredo流量的外部IPv4地址的模糊化版本。正如外部端口一样,当Teredo客户端向Teredo服务器发送初始数据包时,该数据包的源IP地址被NAT映射到一个不同的外部地址。

    外部地址通过XORing(格式为0xFFFFFFFF的外部地址)实现模糊化。例如,公用 IPv4地址131.107.0.1的模糊化版本的以冒号分隔的十六进制格式是7C94:FFFE(131.107.0.1等于0x836B0001,0x836B0001 XOR 0xFFFFFFFF等于0x7C94FFFE)。模糊化外部地址将防止NAT在那些正在被转发的数据包的有效载荷中对其进行转换。

Teredo是如何运作的

对于两台运行Windows对等网络beta版的计算机,最关键的Teredo进程是那些用于进行初始配置以及用于同不同站点中的某个对等方进行通信的那些进程。

初始配置

Teredo客户端的初始配置是通过向Teredo服务器发送一系列Router Solicitation(路由器请求)消息来完成的。所获得的响应将用于生成Teredo地址,以及确定客户端位于哪个锥形、受限制或对称的NAT之后。如果Teredo客户端在某个对称NAT之后,那么它就无法运作。从netsh interface ipv6 show teredo命令的显示中,您可以看到Teredo客户端已发现的NAT类型。

基于所接收到的Router Advertisement消息,Teredo客户端将按照下列方法构造其Teredo地址:

  • 前64位被设置为所接收到的路由器公告的Prefix Information(前缀信息)选项中包括的值。Teredo服务器所公告的64位前缀由Teredo(32位)和Teredo服务器的公用IPv4地址(32位)组成。

  • 接下来的16位或者是0x8000 (cone NAT),或者是0x0 (受限制的NAT)。

  • 再下来的16位被设置为模糊化的外部UDP端口号,包括在路由器公告中的一个特殊Teredo报头中。

  • 最后32位被设置为模糊化的外部IP地址,包括在路由器公告中的一个特殊Teredo报头中。

不同站点中的两个Teredo客户端之间的初始通信

不同站点中的两个Teredo客户端之间的初始通信的成败取决于那些站点是在使用锥形 NAT还是在使用受限制的NAT。

当两个Teredo客户端都位于锥形 NAT之后时,针对每个Teredo客户端的Teredo流量的NAT转换表条目允许流量来自任何源IP地址或源UDP端口。因此,一个站点中的Teredo客户端能够直接向另一个站点中的Teredo客户端发送数据包,而无需使用附加的数据包来建立NAT转换表条目。

当这两个Teredo客户端位于受限制的NAT之后时,必须首先建立附加的NAT转换表条目才能交换单播包。下图显示了当两个站点都使用受限制的NAT时,分别位于这两个不同站点中的两个Teredo客户端之间的初始通信过程。

cg040303.gif

为了从Teredo Client A向Teredo Client B发送一个初始通信数据包,需要采取以下程序:

  1. Teredo Client A直接向Teredo Client B发送一个空数据包。空数据包没有包含数据,只是用于创建或维护NAT映射。 由于Teredo客户端B位于一个受限制的NAT之后,来自任意源IPv4地址和UDP端口的Teredo流量将被禁止,除非存在一个面向源的NAT转换表条目。假设没有这样的条目,受限制的NAT将自动丢弃空数据包。然而,当Teredo Client A的受限制的NAT转发空数据包时,将创建一个面向源的NAT转换表条目,这个条目允许将以后从Teredo Client B发送的数据包转发到Teredo Client A。

  2. Teredo Client A通过Teredo Server 2(Teredo Client B的Teredo服务器)向Teredo Client B发送一个空数据包。空数据包中的IPv4目标地址被设置为Teredo Server 2的IPv4地址,这由Teredo Client A根据Teredo Client B的Teredo地址的第三和第四个格式块予以确定。

  3. Teredo Server 2将空数据包转发给Teredo Client B。Teredo Client B的受限制的NAT将转发该数据包,因为对于来自Teredo Server 2的Teredo流量,存在一个现有的面向源的映射(这是通过Teredo Client B的初始配置来建立的)。

  4. Teredo Client B使用自身的空数据包来响应从Teredo Client A接收到的空数据包,这个响应空数据包直接被发送到Teredo Client A。对于来自Teredo Client B的Teredo流量,由于Teredo Client A的受限制的NAT有一个面向源的映射(这是通过Teredo Client A在第1步中发送的初始空数据包来建立的),将把这个空数据包转发给Teredo Client A。

  5. 当接收到来自Teredo Client B的空数据包时,Teredo Client A判断出两个NAT都存在面向源的NAT映射。Teredo Client A将直接向Teredo Client B发送一个初始通信数据包。

这个过程对于Teredo Client A的用户来说是透明的。

另外,还存在一些附加的初始通信过程,其依赖初始通信的目的地是否在相同的链路上,或在在IPv6 Internet上,或是针对面向主机的Teredo中继。 有关更多信息,请参见Teredo概述

更多信息

关于Windows XP对等网络和IPv6的更多信息,请参考以下资源:

如对本专栏的内容有任何疑问或欲发表反馈信息,请致信Microsoft TechNet。请注意我们不能保证一定回复您的来信。

欲了解关于The Cable Guy所主持的所有专栏的列表和更多信息,请点击此处