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.htmlhtml

1、你将会学到什么?

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

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


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

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地址将被用做封装做报文的目的地址。api

1.4 6rd做业详述:

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

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

  • 服务商选择一个IPv6前缀用于给定6rd部署的通用6rd服务提供前缀;
  • 为CE路由器分配的IPv4地址,这个地址能够是私有的也能够是全局的;6rd不会必须使用IPv4地址整个32bit(在后面的文档中进行解释)。
    思考图3中的示例:

    图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中显示

示例2:
很常见的是挑战服务提供商受限于现有服务提供者,致使在6rd地址空间压缩IPv4地址是不行的。由于这个,整个IPv4地址的32bit须要插入6rd IPv6地址,以下图4所示:

区域注册机构(RIPE、ARIN等)正在研究一种模型,其中一个服务提供商经过6rd提供IPv6服务能够得到一个/29的IPv6地址分配,来替代小于 /32的地址分配。这将为每位终点用户网提供3bit用于分割本地网络,从而为每一个终点用户提供8个子网。网络

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

  • 肯定IPv6头中携带的IPv4地址bit数,以下所示:
    (32bits)-(IPv4 通用前缀长度)-(IPv4通用后缀长度)
  • 肯定这些bit在IPv6头中的位置。图4展现了6rd域的前缀长度
  • 提取IPv6目的地址头中携带的IPv4地址。如今知道6rd域地址和通用前缀长度就能够执行提取。
  • 起始是IPv4的通用前缀,而后拼接从IPv6头中提取的bit,最后拼接IPv4通用后缀。

    如今应用以前的算法到先前介绍的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个委托前缀),以实现全球可达性。oop

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

本节逐步说明数据包如何从CE路由器发送到另外一个CE路由器或IPv6 Internet并返回(图7)。
测试

2.1 CE到CE:

若是IPv6目标地址落在本地配置的6rd域前缀的范围内,而后须要转发到另外一个6rd CE路由器,则将在面向客户的接口上本地接收IPv6流量(图8)。

这个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)。

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目标地址。

3、配置:

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虚拟构建网络拓扑。

#配置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:

4、其余考虑:

  • 最大传输单元和分片
  • 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

相关文章
相关标签/搜索