Teredo隧道

title: 目的.
content: 6to4,最常用的IPv6通过IPv4的隧道协议,但它需要隧道端点有一个公网IPv4地址。然而,许多主机目前通过一个或多个NAT设备来连接IPv4互联网,原因之一是IPv4位址枯竭。在这种情况下,只有NAT设备有IPv4地址,6to4隧道端点必须在NAT设备上被实现。出于技术或经济原因,目前已被部署的许多NAT设备无法升级为实现6to4。  Teredo通过在UDP/IPv4数据包内封装IPv6数据包来缓解这个问题,大多数NAT可以正确转发此种流量。这样一来,NAT后的IPv6感知主机可以作为Teredo隧道端点,即使它没有专用的公网IPv4地址。实际上,一个实现Teredo的主机可以在没有本地网络环境合作的条件下获得IPv6连通性。  从长远来看,所有IPv6主机都应该使用原生IPv6连接。临时性的Teredo协议包含“落幕程序”规定:Teredo实现应该提供一个方法在当IPv6成熟并且使用一个非脆弱的连通机制时停止Teredo连接的使用。根据IETF89,微软计划在2014年上半年停用他们为Windows准备的Teredo服务器,并鼓励停用公共运行的Teredo中继。
title: 概述.
content: Teredo协议执行几种功能:
title: 节点类型.
content: Teredo定义了几种不同类型的节点:
title: IPv6地址.
content: 每个Teredo客户端被分配一个公共IPv6地址,其构造如下(高阶位编号为0):  "Teredo IPv6地址表"  举例来说,IPv6地址2001:0000:4136:e378:8000:63bf:3fff:fdd2就是通过一个Teredo中继: "Teredo IPv6示例表"
title: 服务器.
content: Teredo客户端使用Teredo服务器通过简化的类STUN“鉴别流程”检测客户端是否在任何类型的NAT后面。Teredo客户端也通过定期发送UDP数据包来维护其NAT上对其Teredo服务器的绑定,这样确保服务器始终可以联系到其客户端——NAT打孔正常工作的必要条件。  如果一个Teredo中继(或另一个Teredo客户端)必须发送一个IPv6数据包到一个Teredo客户端,它首先发送一个Teredo气泡(bubble)包到客户端的Teredo服务器(根据Teredo客户端的Teredo IPv6地址推算)。然后服务器转发“气泡”包到客户端,使Teredo客户端软件了解它必须打孔到Teredo中继。  Teredo服务器也可以将Teredo客户端的ICMPv6包传输到IPv6互联网。在实践中,当一个Teredo客户端想联系一个原生IPv6节点,它必须定位相应的Teredo中继——即公网IPv4和UDP端口号,以发送封装的IPv6包。为做到此目的,客户端制作一个传往IPv6节点的ICMPv6 Echo请求(ping),并经它配置的Teredo服务器发送。Teredo服务器解开封装并将ping传往IPv6互联网,使ping最终抵达IPv6节点。IPv6节点应该在收到ICMPv6 Echo回复后按照RFC 2460应答。这个应答包首先被路由到最近的Teredo中继,然后逐步抵达与其联系的Teredo客户端。  维护一个Teredo服务器所需的带宽很少,因为它们不参与IPv6数据包的实际发送与接收。另外,它不涉及对互联网路由协议的任何访问。Teredo服务器的必备条件仅有:  公共Teredo服务器:
title: 中继.
content: Teredo中继可能需要大量的网络带宽。另外,它必须输出(宣告)Teredo IPv6前缀(2001::/32)到其他IPv6主机。这样之后,Teredo中继就能收到其他寻址到Teredo客户端的IPv6主机的流量,然后通过UDP/IPv4转发它们。与此对应,它会收到其他通过UDP/IPv4寻址到IPv6主机的Teredo客户端发来的数据包,将这些数据包注入到IPv6网络。  在实践中,网络管理员可以设置一个只服务于他们公司或校园的私有Teredo中继。这可以为他们的IPv6网络与任何Teredo客户端提供一个短途路径。但是,在超过单个网络的规模上设置一个Teredo中继需要输出BGP IPv6路由到其他自治系统(AS)的能力。  不同于6to4,连接中的两个端点可以使用不同的中继,在原生IPv6主机与一个Teredo客户端之间的流量使用同一个Teredo中继,即最靠近原生IPv6主机网络侧的那个。Teredo客户端不能自己定位一个中继,因为它不能自己发送IPv6数据包。如果它需要启动与一个原生IPv6主机的连接,它首先通过Teredo服务器使用客户端的Teredo IPv6地址发送一个数据包到原生IPv6主机。原生IPv6主机之后照常响应客户端的Teredo IPv6地址,这能使数据包最终找到Teredo中继,从而启动与客户端的连接(可能使用Teredo服务器进行NAT打孔)。Teredo客户端和原生IPv6主角之后使用中继进行通信,只要它们需要。此设计意味着Teredo服务器与客户端都不需要知道任何Teredo中继的IPv4地址。它们通过全局IPv6路由表自动找到合适的路由,因为所有Teredo中继都宣告网络2001::/32。 2006年3月30日,意大利ISP ITGate是第一个在其IPv6互联网上宣告到2001::/32的路由的AS,这使RFC 4380兼容的Teredo实现有望充分可用。但截至2007年2月16日,它已不再有效。  2009年第一季度,IPv6骨干Hurricane Electric使用任播技术启用了14个Teredo中继并全局性宣告2001::/32。这些中继分别位于西雅图、弗里蒙特、洛杉矶、芝加哥、达拉斯、多伦多、纽约、Ashburn、迈阿密、伦敦、巴黎、阿姆斯特丹、法兰克福和香港。  预计大型网络运营商将维护Teredo中继。与6to4一样,仍不清楚如果大部分互联网主机通过基于IPv4的Teredo使用IPv6,Teredo将会如何扩展。虽然微软自发布用于Windows XP的Teredo伪隧道以来运行有一组Teredo服务器,但他们从未为IPv6互联网整体提供Teredo中继服务。
title: 限制.
content: Teredo不兼容所有NAT设备。根据RFC 3489的术语,它支持全锥、受限和端口受限的NAT设备,但不支持对称NAT。最初的Shipworm规范制作的最终版Teredo协议也支持对称NAT,但最终由于安全考虑而放弃。  台湾的国立交通大学之后提出了SymTeredo,这增强了原有的Teredo协议以支持对称NAT,并且微软和Miredo的实现实施了某些的未规定、非标准的扩展以改进对对称NAT的支持。但是在对称NAT后的Teredo客户端与在对称NAT或端口限制NAT后的Teredo客户端的连通似乎仍然不可能。  另外,Teredo假设两个客户端交换封装的IPv6数据包时,他们使用的映射/外部的UDP端口号与他们联系Teredo服务器(以及建立Teredo IPv6地址)的端口号相同。若无此假设,两个客户端直接不可能建立直接通信,从而中继不得不进行三角形路由。一个Teredo实现尝试在启动时检测NAT类型,并且如果NAT看起来对称,则拒绝运作。(此限制有时可以在NAT设备上配置转发规则来解决,但这需要NAT设备的管理权限。)  Teredo只能为每个隧道端点提供一个IPv6地址。因此,不能使用一个Teredo隧道连接多个主机,这不同于6to4和某些点对点IPv6隧道。所有Teredo客户端与IPv6互联网的可用带宽都受到Teredo中继可用资源的限制,这与6to4等中继没什么区别。
title: 备选方案.
content: 6to4需要一个公网IPv4地址,但为每个隧道端点提供一个较大的48位IPv6前缀,并有较低的封装头。点对点隧道可能比Teredo更可靠和负责,并且提供永久IPv6地址通常不依赖于隧道端点的IPv4地址。部分点对点隧道中间人(Tunnel broker)也支持UDP封装以穿透NAT(例如AYIYA协议可以做到)。但反过来说,点对点隧道通常需要注册。自动化工具(例如AICCU)可以简化使用点对点隧道的流程。
title: 安全事项.
title: 暴露.
content: Teredo分配全局可路由的IPv6地址使NAT设备后的网络主机增加了攻击面,因为如不这样做则无法被互联网访问。因为这样做,Teredo潜在地将任何启用IPv6并开放端口到外部的应用程序暴露在外。Teredo隧道的封装可以隐蔽IPv6数据流量的内容,防止数据包检测乃至部分IPv4恶意软件的传播。US CERT已发表一篇论文,论述使用IPv6隧道的恶意软件风险。Teredo也将IPv6栈和隧道软件暴露给攻击者,如果它们被发现存在任何远程可利用的漏洞,这可能变得危险。  微软IPv6栈有一个“保护等级”套接字选项。这允许应用程序指定它们是否愿意处理出自Teredo隧道的流量,任何非Teredo隧道的流量(默认设置),或者只接收本地内部网的流量。  Teredo协议也在数据包中封装有关隧道端点的详细信息。
title: 防火墙、过滤和阻止.
content: 为使Teredo伪隧道正常工作,发出的UDP数据包不能被过滤。此外,对这些数据包的回复(即回传的流量)也不能被过滤。这取决于NAT的典型设置及其有状态防火墙的功能。如果外发的IPv4 UDP流量被拦截,Teredo隧道软件会检测到致命错误并停止。另外,如果拦截外发值3544端口的UDP流量可能会干扰Teredo的活动。
title: 通过路由环路DoS.
content: 在近期,一种新的使用Teredo隧道利用路由环路制造拒绝服务攻击已被发现。这相对容易预防。
title: 默认启用.
content: 微软操作系统的当前版本已启用IPv6过渡技术,包括默认启用Teredo。如果IPv6未在公司网络上实现,可以通过命令行提示符、注册表编辑或使用组策略禁用这些过渡技术。由于微软默认启用,如果需要避免IPv6启用状态下的新安全威胁,管理员需要明确配置Windows操作系统中的和相关过渡技术。
title: 实现.
content: Teredo目前有多种实现可用:
title: 名称由来.
content: Teredo隧道协议的最初昵称为shipworm(船蛆)。该想法来自该协议将穿过NAT设备,很像船虫穿过木头上的隧道。Shipworms是造成很多木壳船损坏的成因,但Christian Huitema在原始草案中指出:“该种动物只在相对干净且未受污染的水中生存,它最近在几个北美港口的复出也证明这与清洁相关。与此类似,通过穿透NAT,该服务将有助于达到新的互联网透明度。”  Christian Huitema后将名称改为Teredo以避免将它与电脑蠕虫混淆。Teredo navalis(船蛆)是一种著名的船虫种类的拉丁名。

Summary: Teredo是一个IPv6转换机制,它可为运行在IPv4互联网但没有IPv6网络原生连接的支持IPv6的主机提供完全的连通性。与其他的类似协议不同,它可以在网络地址转换(NAT)设备(例如家庭路由器)后完成功能。

Teredo tunneling: In computer networking, Teredo is a transition technology that gives full IPv6 connectivity for IPv6-capable hosts that are on the IPv4 Internet but have no native connection to an IPv6 network. Unlike similar protocols such as 6to4, it can perform its function even from behind network address translation (NAT) devices such as home routers.