IPv6 Rapid Deployment, IPv6 6rd初探

IPv6 Rapid Deployment: Provide IPv6 Access to Customers over an IPv4-Only Network

原文地址:https://www.cisco.com/c/en/us/products/collateral/ios-nx-os-software/enterprise-ipv6-solution/whitepaper_c11-665758.html

一、你将会学到什么?

IPv6 rapid deployment(6rd)(RFC 5969)是一种无状态隧道机制,它允许一个服务商在不要求升级已存在的IPv4接入网络基础设施的情况下,轻巧安全的快速部署IPv6。当然这里有一系列方法通过IPv4来承载IPv6,6rd的方式尤其成功,其主要在于他的实施是一个轻巧、自然地可扩展、有弹性且易于配置的无感知模式。6rd提供的服务是生产质量,使得所有的客户和整个Internet看起似乎是原生的本地IPv6网络。

  1. 本文提出:
    • 6rd技术描述
    • 6rd部署场景
1.1 6rd作业概述:

IPv6 Rapid Deployment, IPv6 6rd初探
图 1提供一个6rd作业的视图
6rd由两个主要的硬件组件组成,CE(Customer Equipment)路由器和BR(Border Relay)路由器。

1.2 CE路由器(客户边缘路由器):

CE路由器位置在服务商提供IPv4接入基础设施的边缘和为这些终端用户网络提供IPv6通信。来自于这些终端用户的原生IPv6流量通过CE路由器封装成IPv4,隧道连接到BR路由器和或直接送到相同6rd域的其他CE路由器。反过来,通过BR路由器从Internet网接收到的封装的6rd流量和来自其他CE路由器的6rd流量将会被解封装后,并转发到最终用户节点。

1.3 BR路由器

BR路由器提供CE路由器和IPv6网络(公有网络或私有网络)两者之间的通信。CE和BR路由两者都是双栈(IPv4和IPv6)设备,在BR和CE两者之间可以仅是IPv4。
在CE路由器,如果IPv6报文的目的地址和本地配置的6rd前缀匹配,这个报文会被认为是本地6rd域的一部分,需要被转发到其他CE路由器。在这种情况下,IPv4地址嵌入在IPv6的目的地址中,作为6rd隧道的目的地址使用。本地WAN接口的IPv4地址将被用作6rd隧道的源地址,这个IPv6报文直接封装成IPv4。如果IPv6目的地址和本地配置的6rd前缀不匹配就另说,如果这个报文不属于本地6rd域,这个报文将会通过6rd隧道隧穿到BR路由器。在这种情况下,在CE路由器本地配置的BR IPv4地址将被用作封装作报文的目的地址。

1.4 6rd作业详述:

IPv6 Rapid Deployment, IPv6 6rd初探

  • 6rd的CE LAN侧接口承载IPv6主机来回的流量
  • 多点隧道接口承载隧道封装的往返于IPv6主机的流量
  • 用于6rd隧道封装的是直接的IPv6-in-IPv4的封装。IPv4协议字段被设置为协议号:41。
    IPv6 Rapid Deployment, IPv6 6rd初探
6rd委托前缀

图2展示的网络中,CE路由器给他的网站提供一个范围的前缀。这些前缀称作6rd委托前缀和IPv6域主机配置协议(DHCPv6)的PD前缀相似。一个6rd委托前缀有以下几个元素组成:

  • 服务商选择一个IPv6前缀用于给定6rd部署的通用6rd服务提供前缀;
  • 为CE路由器分配的IPv4地址,这个地址可以是私有的也可以是全局的;6rd不会必须使用IPv4地址整个32bit(在后面的文档中进行解释)。
    思考图3中的示例:
    IPv6 Rapid Deployment, IPv6 6rd初探
    图3的示例显示了一下内容:
  • 服务提供商选择的前缀是:2001:DB8::/32
  • 每一个6rd CE路由器从10.0.0./8块中使用一个IPv4地址。在6rd中,你可以嵌入少于32bit的IPv4地址到6rd委托前缀。通过引入以下两个概念使该动作成为可能:
    1. IPv4通用前缀:在6rd域中的所有6rd CE路由器和BR路由器可以共享一个通用IPv4前缀用于他们的IPv4地址块。这个通用前缀已分配给6rd域中所有节点,因此不需要IPv6地址携带以标识隧道终点。在图3的示例中,IPv4的通用前缀是10.0.0.0/8。
    2. IPv4通用后缀:所有6rd CE路由器和BR路由器可以统一一个通用的IPv4地址尾部来标识隧道终点。例如,在这个示例中,假设IPv4的通用后缀是0.0.0.1/8。后缀的实现通过隧道传输终点将会使用(在CE路由器上,在6rd CE WAN侧的接口地址是一个典型的IPv4地址,将被用作隧道源地址):
      • CE1:10.1.1.1
      • CE2:10.1.2.1
      • BR: 10.1.3.1
  • IPv4地址块中的这些bit数是独立的,在一个域中不同的6rd CE路由器和BR路由器可以按照以下方式计算:
    32 bits - (IPv4通用前缀长度)-(IPv4通用后缀长度)
    在前面的示例中,值将会是:
    32 - 16 – 8 = 8。
    这8bit需要嵌入在6rd委托前缀中。
  • 因此,6rd委托前缀长度是服务商选择的前缀长度和同一域中6rd CE路由器和BR路由器IPv4地址块中不相同的bit数之和;在前面的示例中,这个长度是:
    32 + 8 = 40
  • 6rd的参数在表1中显示
    IPv6 Rapid Deployment, IPv6 6rd初探

示例2:
很常见的是挑战服务提供商受限于现有服务提供者,导致在6rd地址空间压缩IPv4地址是不行的。因为这个,整个IPv4地址的32bit需要插入6rd IPv6地址,如下图4所示:
IPv6 Rapid Deployment, IPv6 6rd初探
区域注册机构(RIPE、ARIN等)正在研究一种模型,其中一个服务提供商通过6rd提供IPv6服务可以获得一个/29的IPv6地址分配,来替代小于 /32的地址分配。这将为每位终点用户网提供3bit用于分割本地网络,从而为每个终点用户提供8个子网。

6rd地址隧道终点的确定:
当目的地是6rd域地址的本机IPv6报文到达一个6rd CE路由器,它将被送到适当的目标CE路由器。6rd隧道的目的IPv4地址通过以下规则来获取:

  • 确定IPv6头中携带的IPv4地址bit数,如下所示:
    (32bits)-(IPv4 通用前缀长度)-(IPv4通用后缀长度)
  • 确定这些bit在IPv6头中的位置。图4展示了6rd域的前缀长度
    IPv6 Rapid Deployment, IPv6 6rd初探
  • 提取IPv6目的地址头中携带的IPv4地址。现在知道6rd域地址和通用前缀长度就可以执行提取。
  • 起始是IPv4的通用前缀,然后拼接从IPv6头中提取的bit,最后拼接IPv4通用后缀。
    IPv6 Rapid Deployment, IPv6 6rd初探
    现在应用之前的算法到先前介绍的6rd网络中。思考一个报文的目的主机是2001:DB8:0100::11,它是CE网站1的一个主机。
  • IPv6头中携带的bit数是:
    (32bits)-(IPv4通用前缀长度)-(IPv4通用后缀长度)
    这儿,值是:32 – 16 = 8
  • 确定了位于IPv6头中的这些bit后,6rd本地域前缀长度是32
  • 提取IPv6头中携带的IPv4地址的bit。现在你知道了位置和长度既可执行提取。结果是8位介于33至40bit之间的二进制值。示例如下:
    从2001:DB8:0100::11中32bit开始提取8bit,产生16进制0x01(IPv6地址是十六进制的)。二进制值是:00000001,在十进制编号系统中是1。
    • 重建远程6rd CE路由器地址,以IPv4通用前缀开始,拼接从IPv6头中提取的bit数,在拼接IPv4通用后缀。
      结果是:10.1.1.1,这个是CE1的地址。
      每当CE路由器收到目的地为第六本地域内的目的地的IPv6数据包时,都会运行前面的第六隧道端点确定。
      如果收到本地IPv6报文发往超出了6rd本地域的IPv6 Internet网,6rd BR路由器的IPv4地址将由手动输入提供。
路由考虑:

本地路由用于同一6rd域的CE和BR路由器之间。为了实现高可用性,可以配置一个以上的BR路由器。为了达到这个目的,BR路由器必须使用在IPv4内部网关协议(IGP)中通告IPv4任播地址,导致6rd域中有多个6rd BR路由器。CE路由器将会基于IGP的选举规则使用最近的BR路由器。
服务提供商必须向IPv6 Internet宣布已注册的IPv6地址范围(第6个委托前缀),以实现全球可达性。

二、一个6rd报文的生命周期

本节逐步说明数据包如何从CE路由器发送到另一个CE路由器或IPv6 Internet并返回(图7)。
IPv6 Rapid Deployment, IPv6 6rd初探

2.1 CE到CE:

如果IPv6目标地址落在本地配置的6rd域前缀的范围内,然后需要转发到另一个6rd CE路由器,则将在面向客户的接口上本地接收IPv6流量(图8)。
IPv6 Rapid Deployment, IPv6 6rd初探
这个IPv6报文封装在IPv4标记头中。嵌入的IPv4地址复制到IPv4目的地址中。本地配置的隧道源地址复制为IPv4源地址。IPv4的隧道头的协议字段的类型被设置为41(IPv6 in IPv4)。
隧道化IPv6数据包的IPv4数据包通过遵循IPv4路由表的IPv4域转发到目标CE路由器。
目的CE路由器接收这个隧道化的IPv6报文,然后将IPv4头移除。出于安全措施,IPv4头中的源地址将要和嵌入在IPv6头中的IPv4地址做比较。如果不匹配,报文将会被丢弃。如果匹配,这个IPv6报文将会被视为一个本地IPv6报文转发到CE LAN侧的IPv6目标地址去。

2.2 CE到IPv6 Internet网

在CE到IPv6 Internet的场景中,IPv6流量在面向用户侧的接口时本地接收的。IPv6目的地址没有填入本地配置的6rd前缀的范围,这意味着它不针对本地6rd域内的目标。在这种情况下,报文需要被转发到6rd BR路由器。
在CE到CE的场景中,IPv6头封装在IPv4头中。然而,不同之处在于本地配置的BR IPv4地址复制到IPv4的目的地址。此外,本地配置的隧道源地址复制到IPv4源地址。协议字段设置为41(IPv4中的IPv6),然后,按照正常的IPv4路由表将封装的数据包通过IPv4域转发到BR路由器。
BR路由器接收IPv4数据包并删除IPv4标头封装。 将IPv4标头源地址与嵌入在IPv6源地址中的IPv4地址进行比较。 如果地址不匹配,则丢弃该数据包。 否则,IPv6数据包将本地转发到IPv6目标地址。

2.3 IPv6 Internet到CE

在从IPv6 Internet到CE的场景中,BR路由器从其面向IPv6网络的接口之一接收本地IPv6数据包。 IPv6目标地址属于本地配置的6rd前缀的范围,这意味着它以本地第6个域内的目标为目标。 在这种情况下,需要将数据包转发到适当的CE路由器(图9)。
IPv6 Rapid Deployment, IPv6 6rd初探
6rd BR路由器会将IPv6数据包封装在IPv4标头中。 IPv6标头中嵌入的IPv4地址用作IPv4目标地址。 隧道的源地址将是在6rd BR路由器的6rd隧道接口上配置的IPv4地址。 标头中的IPv4数据包的协议字段设置为41(IPv4中的IPv6)。 然后,数据包由第六BR路由器使用传统的IPv4转发路径转发到第六CE路由器。

当CE路由器接收到隧道化的6rd IPv4报文,为了暴露封装的IPv6报文将会移除IPv4头。首先,IPv4头源地址将和本地配置的6rd BR IPv4地址进行比较。如果地址不匹配报文将被丢弃。如果匹配,则6rd CE路由器通过IPv6将IPv6报文本地转发到IPv6目标地址。

三、配置:

6rd CE路由器委派的IPv6地址是从本地WAN接口IPv4地址与第六个前缀组合得出的。 可以手动配置地址。但是,通常会通过DHCPv4从连接的服务提供商接收IPv4地址。
除了此IPv4地址,还必须配置其他信息。

  • 6rd前缀:这是在整个6rd域中使用的通用前缀,它确定数据包是针对6rd域内部还是外部的目的地;
  • 6rd前缀长度:此参数提供有关第6个前缀中的值位的信息;
  • IPv4掩码长度:此参数指定在所有6rd CE和BR路由器IPv4地址*有多少位,因此可以在站点的6rd前缀内压缩。 在Cisco IOS软件内,可以压缩来自IPv4前缀和后缀的位。
3.1 Cisco的基本配置:
BR Router

IPv6 general-prefix DELEGATED_PREFIX 6rd Tunnel0
interface Loopback0
ip address 10.0.0.1 255.255.255.0
!
interface Tunnel0
tunnel source Loopback0
tunnel mode IPv6ip 6rd
tunnel6rd IPv4 prefix-len 8
tunnel6rd prefix 2001:db80::/32
IPv6 address DELEGATED_PREFIX::/128 anycast
!
IPv6 route 2001:db80::/32 Tunnel0
IPv6 route ::/0 2001:babe::1
CE Router

IPv6 general-prefix DELEGATED_PREFIX6rd Tunnel0
interface Dialer0
ip address dhcp ! (10.1.1.1)
!
interface Tunnel0
tunnel source Dialer0
tunnel mode IPv6ip 6rd
tunnel 6rd IPv4 prefix-len 8
tunnel 6rd prefix 2001:db80::/32
tunnel 6rd br 10.1.3.1
IPv6 address DELEGATED_PREFIX ::/128 anycast
!
interface Ethernet0
IPv6 address DELEGATED_PREFIX ::/64 eui-64
!
IPv6 route 2001:db80::/28 Tunnel0
IPv6 route ::/0 Tunnel0, 2001:db80:a000:0010::
IPv6 route 2001:db80:0:A00::/56 Null0
3.2 Linux的配置步骤:

三台Linux虚拟构建网络拓扑。
IPv6 Rapid Deployment, IPv6 6rd初探

#配置CE设备
ip address add 192.168.110.27 dev eth0
ip link set eth0 up
ip tunnel add kali006rd mode sit local 192.168.110.27
ip tunnel 6rd dev kali006rd 6rd-prefix 2012:db8::/32 6rd-relay_prefix 192.168.147.136/32
ip link set kali006rd up
ip -6 addr add 2012:db8:c0a8:6e1b::1/64 dev kali006rd 
ip -6 route add 2012:db8::/32 dev kali006rd
ip -6 route add default via ::192.168.147.136

#配置ISP
ip address add 192.168.147.1 dev eth0
ip link set eth0 up
ip address add 192.168.110.1 dev eth1
ip link set eth1 up

#配置BR设备
ip address add 192.168.147.136 dev eth0
ip link set eth0 up
ip tunnel add kali006rd mode sit local 192.168.147.136
ip tunnel 6rd dev kali006rd 6rd-prefix 2012:db8::/32
ip link set kali006rd up
ip -6 addr add 2012:db8:c0a8:9388::1/64 dev kali006rd 
ip -6 route add 2012:db8::/32 dev kali006rd

#在CE设备测试连通性:
root@kalimk:~# ping6 2012:db8:c0a8:9388::1 -c 5
PING 2012:db8:c0a8:9388::1(2012:db8:c0a8:9388::1) 56 data bytes
64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=1 ttl=64 time=0.759 ms
64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=2 ttl=64 time=1.64 ms
64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=3 ttl=64 time=0.769 ms
64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=4 ttl=64 time=0.606 ms
64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=5 ttl=64 time=0.710 ms

--- 2012:db8:c0a8:9388::1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4065ms
rtt min/avg/max/mdev = 0.606/0.897/1.642/0.376 ms

#在BR设备创建一个IPv6/IPv4 Internet
ip link del kaliBr0
ip link add dev kaliBr0 type bridge
ip link set kaliBr0 up
ip -6 addr add 2233:ccc::1/64 dev kaliBr0

#在CE设备测试连通性:
root@kalimk:~# ping6 2233:ccc::1 
PING 2233:ccc::1(2233:ccc::1) 56 data bytes
64 bytes from 2233:ccc::1: icmp_seq=1 ttl=64 time=0.723 ms
64 bytes from 2233:ccc::1: icmp_seq=2 ttl=64 time=0.424 ms
64 bytes from 2233:ccc::1: icmp_seq=3 ttl=64 time=0.722 ms
64 bytes from 2233:ccc::1: icmp_seq=4 ttl=64 time=1.69 ms
64 bytes from 2233:ccc::1: icmp_seq=5 ttl=64 time=0.887 ms
64 bytes from 2233:ccc::1: icmp_seq=6 ttl=64 time=1.62 ms
64 bytes from 2233:ccc::1: icmp_seq=7 ttl=64 time=0.603 ms
64 bytes from 2233:ccc::1: icmp_seq=8 ttl=64 time=0.642 ms
64 bytes from 2233:ccc::1: icmp_seq=9 ttl=64 time=0.596 ms
64 bytes from 2233:ccc::1: icmp_seq=10 ttl=64 time=0.677 ms

--- 2233:ccc::1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9138ms
rtt min/avg/max/mdev = 0.424/0.858/1.687/0.413 ms

注意:CE和BR之间,只能存在IPv4网络,需要将网卡的IPv6都禁用掉。
我的环境是KaliLinux:
IPv6 Rapid Deployment, IPv6 6rd初探

四、其他考虑:

  • 最大传输单元和分片
  • 6rd和6to4
    6rd是自动6to4隧道机制(RFC 3056)的一般化。 它克服了6to4自动隧道机制最大的缺点:对所有6to4站点使用众所周知的固定前缀2002 :: / 16。 该IPv6前缀由IPv6 Internet上的许多路由器(也称为6to4中继路由器)注入。 直接后果是,流量可能不对称,服务提供商无法控制返回路径的6to4中继,并且当本机IPv6可用时,站点必须重新编号。 第六种机制通过允许每个服务提供商为每个客户使用唯一的IPv6前缀来消除这些缺点,从而有助于确保不需要其他不受信任的第三方中继。

参考链接:
https://blog.51cto.com/enderjoe/2367434?source=dra
https://blog.csdn.net/qq_39628285/article/details/105230013?utm_medium=distribute.pc_relevant

上一篇:c++ rapidjson


下一篇:BES-项目实践过程中使用的git总结