IPv4/IPv6 网络过渡技术简介

by Blink

Blink’s Blog / 2017-08-19 15:21

IPv6

随着IPv4地址的日益紧缺,IPv6技术日渐成熟。IPv6离我们越来越近,在一些发达国家,IPv6普及程度已经很高。但我国目前只有教育网大规模使用了IPv6。

我们国家在2003年就将IPv6的发展提上了日程,这是非常正确非常及时的战略决策,当时经过五年的发展,第一期取得了预定的战略目标。但从2008年以后,我国IPv6的发展速度开始放缓,开始落后于国际水平。可谓起了个大早,赶了个晚集。

过渡技术

过渡技术,顾名思义,就是在IPv4大规模使用的情况下,让用户一步步平滑迁移到IPv6网络的一些技术。IETF专门成立了”下一代网络过渡工作组”,负责研究IPv4与IPv6的共存和互通问题。

过渡技术主要分为两个主要阶段

  • 过渡初期

    这个阶段的主要特点是IPv4大量使用,而IPv6使用较少,网络主干由IPv4连接,IPv6形成一个个的信息孤岛。

  • 过渡末期

    这个阶段则是在过渡末期,IPv6网络大量使用,主干也由IPv6进行连接,但还有一些IPv4的信息孤岛,需要将他们连通。

我们目前面临的阶段显然是过渡初期,下面介绍一下可以让用户在IPv4网络下访问IPv6资源的技术。对于这个需求,非常直观的想法是6in4的隧道,即: 客户端(以下客户端均指上网的用户一端)将需要发出的IPv6数据包加上IPv4头,然后通过隧道交给拥有双栈网络的服务器对端,由服务器将IPv4头拆掉并路由;同理,服务端将需要发送给客户端的IPv6数据包加上IPv4头并通过隧道发给客户端。

那么,需要解决的问题就出现了,即:

  • 客户端和服务端之间要如何配置隧道
  • 如何进行客户端的IPv6地址分配工作

以下介绍三种可以让用户在IPv4网络下访问IPv6资源的技术:ISATAP、6to4 和 teredo

一些概念(非本文讨论重点)

  • Node: 一切实现了 TCP/IP 协议的主机
  • Router: 路由器,具有路由功能的主机,能处理不是发给自己的包的设备,通常处于两个或以上 Link 中
  • Host: 不作路由功能的主机,即不是 Router 的 Node
  • Link: 二层链路,如以太网,一个 Link 中的 Node 可以不经过 Router 互相通信
  • IPv4 地址长度为 32 位,IPv6 地址长度为 128 位
  • NDP(Neighbor Discovery Protocol): 邻居发现协议,工作在数据链路层(Link)上,用以在链路上发现其他节点和相应的地址,并确定可用路由和维护关于可用路径和其他活动节点的信息可达性。简单来讲,对于客户端来说,NDP 可以用来自动配置IPv6地址
  • Unicast: 单播
  • Multicast: 组播
  • Broadcast: 广播

ISATAP

ISATAP(站内自动隧道寻址协议):当前支持IPv4/IPv6双栈的设备已经众多,但对于已经构建好的原始IPv4网络,ISATAP隧道技术提供了一种简易的解决方案,实现在IPv4网络上构建一条IPv6隧道,从而实现IPv4用户安装IPv6协议后,即可透过IPv4网络,通过建立的ISATAP隧道获取IPv6资源访问。

ISATAP的地址分配

假设客户端已知了ISATAP隧道服务器的IPv4地址,即客户端和隧道服务器可以建立起连接。
ISATAP的基本模型是 所有客户端和隧道服务器在 IPv6 上属于同一 Link(但和一般的以太网模型不同,其为NBMA(Non-broadcast multiple-access network) ),客户端Link Local地址后64位生成规则为0020:5efe加上自身的IPv4地址fe80::0020:5efe:<your IPv4 Address>/64

例如一个IPv4地址为 59.66.131.233 的客户端,在其使用ISATAP时生成的 Link Local地址为 fe80::0020:5efe:59.66.131.233/64

既然在同一 Link ,那么意味着可以跑 ND 来给客户端分配IPv6地址了 。但在ISATAP上跑的 ND 和标准的 ND 相比,只有前两个步骤,即 RS(Router Solicitation) 和 RA(Router Advertisement),省略了之后的NS(Neighbor Solicitation) 和 NA(Neighbor Advertisement)。

隧道的自动配置

  • 一般情况下 ISATAP 需要客户端拥有 公网IPv4地址 (也有例外的情况,即ISATAP隧道服务器也运行在内网。但无论如何,客户端需要不经过 NAT 能访问到 ISATAP 隧道服务器)
  • 隧道地址可以通过 DNS 获得。因此,一般而言,ISATAP可以让客户端 0 配置(由 isatap.searchdomain 获得隧道服务器地址) 连接到IPv6网络。

6to4

6to4 整体比较简单但非常有意思。首先,192.88.99.1 这个任播地址是分配给 6to4 使用的,2002::/16也是保留给6to4使用。6to4需要客户端拥有公网IPv4地址

6to4 地址的分配

6to4 给每个客户端分配 /48 的IPv6地址,而这 /48 内部地址的路由由客户端自己处理
* 假设客户端IPv4地址为A.B.C.D,则分配给客户端的地址为 2002:A.B.C.D::/48

6to4 的路由及工作流程

上面提到,192.88.99.1是6to4所使用的任播地址,意味着,世界上任意一台192.88.99.1都是一个6to4隧道服务器,而客户端并不用关心为自己服务的究竟是哪一台

客户端发数据

  • 对于需要发出去的IPv6报文,将其加上IPv4头部,源地址为自己的地址,目的地址为192.88.99.1 发出给世界上任意一个6to4中继节点
  • 再又中继节点发出给目的IPv6地址。

客户端收数据

  • 首先,对于2002::/16这段地址,所有的 6to4 中继节点都会通告其路由
  • 则对于从外面发回给 2002::A.B.C.D/48 的数据,会先由某一个 6to4 中继节点收到
  • 然后 6to4 中继节点从目的地址2002::A.B.C.D/48中取出A.B.C.D
  • 然后再将报文加上IPv4头部,源地址为192.88.99.1,目的地址为A.B.C.D
  • 发出,则最后客户端可以收到报文

隧道的自动配置

终上,对于客户端来说6to4可以 0 配置连接到IPv6网络。例如对于macOS,操作步骤为打开网络偏好设置 -> 点击『+』 -> 选择 6to4 -> 点击『创建』

NAT64/DNS64

NAT64是让纯IPv6客户端访问IPv4网络的一种有状态地址翻译技术,与其搭配使用的是DNS64

翻译和访问过程

  • 如上图所示,对于一个在纯IPv6网络中的客户端,若其想访问h2.example.com,则其发起DNS请求(DNS服务器为DNS64服务器),DNS构造 AAAA 记录 64::ff9b:A.B.C.D返回给客户端(其中 A.B.C.D 为 h2.example.com 的真实IPv4地址)
  • 客户端构造数据包,目的地址为64::ff9b:A.B.C.D,并发给路由器(NAT64服务器)
  • NAT64服务器取出真实地址A.B.C.D,填上源地址为自己的IPv4地址,发出,并维护NAT表
  • 对于A.B.C.D发回的数据包,查找NAT表并发回给客户端

NAT64的特点及缺陷

  • 客户端无IPv4地址
  • 对于客户端,访问受限,只能通过域名访问这一种方式
  • Google Public DNS64 地址为 2001:4860:4860::6464

DIVI(待续)

Shared via Inoreader

IPv4/IPv6 网络过渡技术简介

留下评论