ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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. 本文提出:
  2. 6rd技术描述
  3. 6rd部署场景
1.1 6rd作业概述:

ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探
  • 6rd的CE LAN侧接口承载IPv6主机来回的流量
  • 多点隧道接口承载隧道封装的往返于IPv6主机的流量
  • 用于6rd隧道封装的是直接的IPv6-in-IPv4的封装。IPv4协议字段被设置为协议号:41。
    ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探
6rd委托前缀

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

  • 服务商选择一个IPv6前缀用于给定6rd部署的通用6rd服务提供前缀;
  • 为CE路由器分配的IPv4地址,这个地址可以是私有的也可以是全局的;6rd不会必须使用IPv4地址整个32bit(在后面的文档中进行解释)。
    思考图3中的示例:
    ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探
    图3的示例显示了一下内容:
  • 服务提供商选择的前缀是:2001:DB8::/32
  • 每一个6rd CE路由器从10.1.0.0/16块中使用一个IPv4地址。在6rd中,你可以嵌入少于32bit的IPv4地址到6rd委托前缀。通过引入以下两个概念使该动作成为可能:
  • IPv4通用前缀:在6rd域中的所有6rd CE路由器和BR路由器可以共享一个通用IPv4前缀用于他们的IPv4地址块。这个通用前缀已分配给6rd域中所有节点,因此不需要IPv6地址携带以标识隧道终点。在图3的示例中,IPv4的通用前缀是10.1.0.0/16。
  • 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 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探

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

ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探
  • 提取IPv6目的地址头中携带的IPv4地址。现在知道6rd域地址和通用前缀长度就可以执行提取。
  • 起始是IPv4的通用前缀,然后拼接从IPv6头中提取的bit,最后拼接IPv4通用后缀。
    ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探
2.1 CE到CE:

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

ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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

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 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux 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

Original: https://www.cnblogs.com/kingpop/p/14054321.html
Author: KingPop
Title: ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577878/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JDK/MYSQL/TOMCAT环境变量

    IDE:智能开发环境 SDK:软件开发工具包 JDK:Java开发工具包 JRE:Java运行环境 JAR:Java档案文件 API:应用程序接口 1.JAVA_HOME的变量名下…

    Linux 2023年6月7日
    063
  • 笔记:linux 总结

    1.开始 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和…

    Linux 2023年5月27日
    0141
  • shell实现group by聚合操作统计

    在sql中,我们可以方便的使用group by及相应的聚合函数如sum avg count来实现分组统计需求,那当我们面对一个文本,在shell中也可以实现相应的功能吗? 在she…

    Linux 2023年5月28日
    0115
  • 关于ubuntu执行32位程序报错execvp():No such file or directory的解决方案

    一、前言 在ubuntu 执行一个程序时,居然报错 execvp():No such file or directory ,报错截图如下图所示: ls -al…

    Linux 2023年6月8日
    092
  • aspx页面,后端通过Attributes.Add给textbox添加事件时,传参失效问题。

    测试一:————————————&#…

    Linux 2023年6月7日
    086
  • iptables快速入门

    iptables简介 在生产实践过程中,为了保证生产安全,通常需要进行数据加密,例如通过网络层面上将应用隔离成内网和公网应用,内网再分成生产、测试、开发、DMZ等区域,然后进行不同…

    Linux 2023年6月6日
    086
  • Rsync数据备份工具

    Rsync数据备份工具 1、Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步(windows和Linux之间 Mac和 Linux Linux和Lin…

    Linux 2023年6月7日
    086
  • Fastadmin前台Getshell漏洞复现

    Fastadmin前台Getshell漏洞复现 一、简介 FastAdmin是一款基于ThinkPHP5+Bootstrap开发的极速后台开发框架。FastAdmin基于Apach…

    Linux 2023年5月28日
    0107
  • Shell命令

    1.shell命令的执行机制:fork+exec执行命令(任何的shell都会执行) 2.shell中的用户输入处理 1 命令行参数:选项、参数 2 运行时输入 3 read命令:…

    Linux 2023年6月6日
    091
  • docker操作常用命令:

    镜像查询:docker seacher xxxx 下载: dcoker pull xxx 查看下载的镜像: docker images 运行docker :以redis 为例: d…

    Linux 2023年6月13日
    081
  • JCL 日志门面

    JCL( Jakarta Commons Logging ),是 Apache 提供的一个 通用日志 API 。用户可以自由选择第三方的日志组件作为具体实现,像 Log4j 或 J…

    Linux 2023年6月8日
    071
  • 会计学包含的两种程序设计思想

    下班路上坐地铁的时候看了一本会计学的书,目前看了50多页。过程中,发现会计学和程序设计在思想上有惊人的相似之处。今天举两个例子做说明。 CR设计和账簿 CR设计介绍 CR设计就是只…

    Linux 2023年6月14日
    079
  • Centos7安装Redis

    下载 wget http://download.redis.io/releases/redis-5.0.0.tar.gz 解压 tar xvf redis-5.0.0.tar.gz…

    Linux 2023年5月28日
    084
  • 白话电子签章原理及风险

    因为业务需要近来在对接一个线上的电子签章平台, 签完的效果就是在PDF上盖一个红色的章。内部过程沟通中发现,对这个红色章背后的证明逻辑,技术原理,能够了解的比较清楚的人还是很少的。…

    Linux 2023年6月13日
    084
  • JavaScript快速入门-02-基本语法

    2 基本语法 2.1 JavaScript简介 JavaScript 是一门 解释型语言,其代码在客户端中执行前不需经过编译,而是直接由浏览器解释执行。主要用作 客户端脚本语言,在…

    Linux 2023年6月7日
    0103
  • 【设计模式】Java设计模式-装饰者模式

    Java设计模式 – 装饰者模式 😄 不断学习才是王道🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆原创作品,更多关注我CSDN: 一个有梦有戏的…

    Linux 2023年6月6日
    0130
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球