Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析

Cisco GNS3 IPv6 6rd实验

1、回顾

前文:https://www.cnblogs.com/kingpop/p/14054321.html
在描述Cisco GNS3搭建6rd实验之前,再来回顾下,之前讲的Linux下搭建6rd的步骤,上次只是给了一个简单的例子,并没有详细说出每个步骤的具体的作用;并且,通过对6rd原理的了解,我们可以认识到,更为普通的情况下,IPv6的前缀长度可以小于64bit的,只需要满足条件:
IPv6前缀长度 + 32 – IPv4通用前缀 – IPv4通用后缀长度 ≤ 64
此外,就Cisco设备针对IPv6的6rd功能实现来讲,提到的IPv4通用前缀和IPv4通用后缀两个概念,在当前的Linux内核中是否均支持呢?我们用实际代码来说话(如果有理解上的出入,还望各位指出);直接步入关键函数:

static bool check_6rd(struct ip_tunnel *tunnel, const struct in6_addr *v6dst,
              __be32 *v4dst)
{
#ifdef CONFIG_IPV6_SIT_6RD
    if (IPv6_prefix_equal(v6dst, &tunnel->ip6rd.prefix,
                  tunnel->ip6rd.prefixlen)) {
        unsigned int pbw0, pbi0;
        int pbi1;
        u32 d;

        /* 整个计算目的IPv4地址的过程。*/
        pbw0 = tunnel->ip6rd.prefixlen >> 5;
        pbi0 = tunnel->ip6rd.prefixlen & 0x1f;

        /* 从目的IPv6地址中取出 IPv4 不共用的部分,如192.168.10.10中 10.10 */
        d = tunnel->ip6rd.relay_prefixlen < 32 ?
            (ntohl(v6dst->s6_addr32[pbw0]) << pbi0) >>
            tunnel->ip6rd.relay_prefixlen : 0;

        pbi1 = pbi0 - tunnel->ip6rd.relay_prefixlen;
        if (pbi1 > 0)
            d |= ntohl(v6dst->s6_addr32[pbw0 + 1]) >>
                 (32 - pbi1);
        /* &#x5C06;&#x914D;&#x7F6E;&#x7684;IPv4&#x901A;&#x7528;&#x524D;&#x7F00;&#x548C;&#x83B7;&#x53D6;&#x4E0D;&#x901A;&#x7528;&#x7684;&#x90E8;&#x5206;&#x6216;&#x8FD0;&#x7B97;&#x8BA1;&#x7B97;&#x51FA;IPv4&#x76EE;&#x7684;&#x5730;&#x5740; */
        *v4dst = tunnel->ip6rd.relay_prefix | htonl(d);
        return true;
    }
#else
    if (v6dst->s6_addr16[0] == htons(0x2002)) {
        /* 6to4 v6 addr has 16 bits prefix, 32 v4addr, 16 SLA, ... */
        memcpy(v4dst, &v6dst->s6_addr16[1], 4);
        return true;
    }
#endif
    return false;
}

说了这么多了,我们也就清楚,Linux下,仅支持设置IPv4通用前缀长度,不支持IPv4通用后缀长度。现在,以Linux系统为基础环境,构建一个48的IPv6前缀长度和16的IPv4通用前缀长度的6rd环境。相关拓扑图和配置如下:

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
拓扑结构如上图所示,实际配置不同的是IPv6的前缀,将IPv6的前缀修订为2012:db8:2300::/48。
#&#x914D;&#x7F6E;CE&#x8BBE;&#x5907;
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:2300::/48 6rd-relay_prefix 192.168.0.0/16
ip link set kali006rd up
ip -6 addr add 2012:db8:2300:6e1b::1/64 dev kali006rd
ip -6 route add 2012:db8:2300::/64 dev kali006rd
ip -6 route add default via ::192.168.147.136

CE配置命令这么多,是哪条命令完成设定IPv6前缀和IPv4通用前缀的呢?以及隧道口的IPv6地址是否是可以随意设定的呢?答案当然不是的。

&#x547D;&#x4EE4;&#xFF1A;
    ip tunnel 6rd dev kali006rd 6rd-prefix 2012:db8:2300::/48 6rd-relay_prefix 192.168.0.0/16
    &#x8FD9;&#x6761;&#x547D;&#x4EE4;&#x5373;&#x5B8C;&#x6210;IPv6&#x7684;&#x524D;&#x7F00;&#x8BBE;&#x5B9A;&#x548C;IPv4&#x901A;&#x7528;&#x524D;&#x7F00;&#x7684;&#x8BBE;&#x5B9A;&#x3002;&#x7B49;&#x6548;&#x4E8E;Cisco&#x8BBE;&#x5907;&#x4E2D;&#x7684;&#x914D;&#x7F6E;&#xFF1A;

interface Tunnel0
tunnel6rd IPv4 prefix-len 16
tunnel6rd prefix 2001:db80:2300::/48

再者是隧道接口的IPv6地址如何确定?如果还记之前博客里面写的6rd原理,你就应该清楚的知道IPv6地址的前缀是有IPv6前缀和IPv4地址共同决定的。

&#x547D;&#x4EE4;&#xFF1A;
    ip -6 addr add 2012:db8:2300:6e1b::1/64 dev kali006rd
    2012:db8:2300  &#x5373;&#x8BBE;&#x5B9A;&#x7684;IPv6&#x8FD0;&#x8425;&#x5546;&#x5206;&#x914D;&#x7684;&#x524D;&#x7F00;
        6e1b  &#x5373;&#x9700;&#x8981;&#x5D4C;&#x5165;&#x5230;IPv6&#x524D;&#x7F00;&#x4E2D;&#x7684;&#x90E8;&#x5206;IPv4&#x4FE1;&#x606F;&#xFF0C;&#x7531;&#x4E8E;&#x5DF2;&#x7ECF;&#x8BBE;&#x5B9A;&#x4E86;&#x901A;&#x7528;&#x524D;&#x7F00;&#x4E3A;192.168.0.0/16&#x4E5F;&#x5373;&#x662F; 192.168&#x8FD9;&#x4E24;&#x4E2A;&#x5B57;&#x8282;&#x4E0D;&#x9700;&#x8981;&#x5D4C;&#x5165;&#x5230;IPv6&#x524D;&#x7F00;&#x4E2D;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x5C06;&#x5269;&#x4F59;&#x7684;&#x90E8;&#x5206;&#x5D4C;&#x5165;&#x5230;IPv6&#x524D;&#x7F00;&#x4E2D;&#x3002;
&#x547D;&#x4EE4;&#xFF1A;
    ip -6 route add default via ::192.168.147.136

不知道你们是否好奇这一条命令,作用到底是什么?为什么需要他?为啥搭建6to4的时候不需要呢?在回顾下上一篇博客中讲到的CE与CE通信以及CE和IPv6 internet网的通信时,报文的封装过程。
一句话解释就是:
CE到CE,封装的IPv4目的地址是从IPv6目的地址中获取的;当我们访问IPv6 Internet时,我们是要通过6rd的br路由器来与之通信的。因此我们需要先将报文送到br路由器,因此IPv6默认路由 via后面跟的IPv4地址为br路由器的IPv4地址(这个很关键,突然想起了dota情书的口头禅了:这很关键!)。

#&#x914D;&#x7F6E;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

#&#x914D;&#x7F6E;BR&#x8BBE;&#x5907;
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:2300::/48 192.168.0.0/16
ip link set kali006rd up
ip -6 addr add 2012:db8:2300:9388::1/64 dev kali006rd
ip -6 route add 2012:db8:2300::/48 dev kali006rd

#&#x5728;CE&#x8BBE;&#x5907;&#x6D4B;&#x8BD5;&#x8FDE;&#x901A;&#x6027;&#xFF1A;
root@kalimk:~# ping6 2012:db8:2300: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

2、Cisco GNS3环境搭建

讲之前,我们先来唠唠嗑吧,我为啥突然想起来要写个这个呢?
讲实话,搭建这个GNS3环境之前,我也是百度的,肯定有写的很好的,也有写的言简意赅的。我中和几篇文章,再折腾了好久才把环境搭建起来,这可能是我没太多耐心去读哪些文章。不过更为重要的原因是:每当我看到这里需要一个软件或者其他GNS3以外的东西时,都没有访问地址或资源链接,搜索到了,那个C币(CSDN)价格很喜人。我没有给他机会,我还是继续认真的百度,必应去了。哈哈哈哈哈。。。
不过安装完GNS3之后,发现最新的GNS3 2.XX版本真的很好用,比以前的好用多了,之前1.XX版本时,那个内存吃的,界面操作也不是很流畅。最近优化了不少哇。
让我们步入正题吧。

2.1 软件及工具下载方式

在GNS3官网上先注册一个账号,因为只有有了账号才能够免费下载对应的软件。
GNS3:https://gns3.com/software/download;根据自己的需求选择Windows, Linux, MAC版本。
GNS3镜像包(也即是界面中的路由器、交换机):

2.2 GNS3使用时常用操作

2.2.1 导入IOS镜像包

注:这里需要使用到IOS image文件,自己记得在前面提供的下载方式中去下载。
步骤1:点击菜单栏,Edit –> Preferences

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
步骤2:点击 New
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
步骤3:点击Next,选择我们已经下载好的IOS image文件,完成加载,其他默认即可,自己可以按需配置,作为新手的我,都是默认选项。
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
在选择Network Adapters时,可以根据自己的需求来增加一个槽。
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
如:slot1中下拉框中的NM-4T、NM-16ESW(对应到实体路由器就是一张板卡,板卡含有多个接口(以太接口、serial接口等))。这里slot0中的默认的GT96100-FE是一张含有两个fast接口的板卡。
这些配置,后期都可以再更改的。当前这里,一直点击Next按钮知道点击Finish完成。
当前,实验使用的是,c7200。记得加载c7200的IOS image包。
2.2.2 配置GNS3 VM

使用GNS3 VM作为一个Server。
步骤1:菜单栏,Help  Setup Wizard,点击Next

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
默认配置即可,再点击Next  Next,直到界面:
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
如果界面VM name的下拉框中,没有GNS3 VM,这是因为,你没有将之前下载的GNS3 VM 虚拟机加载到VMware中。相应的操作如下:
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
来完成GNS VM虚拟机的导入(当前我使用的VMware, Virtual Box的用户自行实验)。
再次GNS VM界面的Refresh按钮刷新,即可看到GNS3 VM的选项。点击Next直到Finish。
最后,最后:
重启GNS3软件,GNS3 VM会自动跟随启动的。
如果一切正常,VM虚拟机有如下界面弹出:
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
键入Enter键后,弹出的界面:
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
目前而言,主要关注的是:
  • Shell: Open a shell #启动一个shell命令行
  • Network: Configure network settings # 配置网络IP地址等相关信息,配置后,虚拟机将会自动重启。
    有个小疑问:进入到shell后,怎么再次回到这个界面,没有办法。
    注:设备中,需要使用ip 等命令,或执行命令时,提示无权限时,记得在命令前加:sudo 关键字。
2.2.3 连接网线

启动GNS3软件,创建一个项目:File  New blank project。

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
点击图中1出的路由器图标,在旁边就会列出,我们之前所加载的IOS image对应的路由器设备。
选择对应的路由器,将其拖拽到图中2旁边的空白区域,进行编辑,连接网线。上图中的【云朵图标】在图中1处的显示器图片栏目下面:
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
连接网线:

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
启动路由器,并进入命令行:

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
右键,需要启动的路由器,如:6r_br_router,选择start;再双击设备,即可进入命令行:
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析

2.3 配置6rd

现在,终于可以开始搭建6rd环境了。拓扑如下:

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
IPv4地址配置:
6rd_br_router: gi 0/0 192.168.10.10
IPv4-Network: 与br_router连接的接口的IPv4地址为 192.168.10.1
与ce_route连接的接口的IPv4地址为 192.168.1.2
6rd_ce_router: gi 0/0 192.168.1.10
注:IPv4-Network的地址配置是在GNS VM 中去配置的。
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
确保6r_br_route和6r_ce_router的互通性:
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
如果不能正常ping通,可以配置arpa来完成:
arp 192.168.1.10 000c.291f.1598 ARPA
arp &#x76EE;&#x7684;&#x5730;&#x5740; &#x5413;&#x4E00;&#x8DF3;MAC&#x5730;&#x5740; ARPA
6rd_br_router的配置如下:
interface Tunnel1
 no ip address
 no ip redirects
 IPv6 address 2001:DB80:A0A::1/48
 tunnel source GigabitEthernet0/0
 tunnel mode IPv6ip 6rd
 tunnel 6rd IPv4 prefix-len 16
 tunnel 6rd prefix 2001:DB80::/32
!
interface Ethernet0/0
 no ip address
 shutdown
 duplex auto
!
interface GigabitEthernet0/0
 ip address 192.168.10.10 255.255.255.0
 duplex full
 speed 1000
 media-type gbic
 negotiation auto
!
ip forward-protocol nd
no ip http server
no ip http secure-server
!
!
ip route 192.168.1.0 255.255.255.0 GigabitEthernet0/0
!
no cdp log mismatch duplex
arp 192.168.1.10 000c.291f.1598 ARPA
IPv6 route 2001:DB80::/32 Tunnel1
IPv6 route ::/0 2001:DB80::1
6rd_ce_router的配置如下:
interface Tunnel1
 no ip address
 no ip redirects
 IPv6 address 2001:DB80:10A::1/48
 tunnel source GigabitEthernet0/0
 tunnel mode IPv6ip 6rd
 tunnel 6rd IPv4 prefix-len 16
 tunnel 6rd prefix 2001:DB80::/32
 tunnel 6rd br 192.168.10.10
!
interface Ethernet0/0
 no ip address
 shutdown
 duplex auto
!
interface GigabitEthernet0/0
 ip address 192.168.1.10 255.255.255.0
 duplex full
 speed 1000
 media-type gbic
 negotiation auto
!
ip forward-protocol nd
no ip http server
no ip http secure-server
!
!
ip route 192.168.10.0 255.255.255.0 GigabitEthernet0/0
!
no cdp log mismatch duplex
arp 192.168.10.10 000c.291f.15a2 ARPA
arp 192.168.10.12 000c.291f.15a2 ARPA
IPv6 route 2001:DB80::/32 Tunnel1
IPv6 route ::/0 Tunnel1
6rd互通性测试:

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析
Wireshark抓取报文:

Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析

Original: https://www.cnblogs.com/kingpop/p/14163178.html
Author: KingPop
Title: Cisco GNS3教程,GNS3搭建IPv6 6rd环境,Linux 配置 IPv6 6rd详析

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

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

(0)

大家都在看

  • oracle 怎么查看用户对应的表空间

    oracle 怎么查看用户对应的表空间? 查询用户: 查看数据库里面所有用户,前提是你是有 dba 权限的帐号,如 sys,system: select * from dba_us…

    Linux 2023年6月6日
    0118
  • 世界上最流行的操作系统不是Windows?

    前言 打住,我知道列位是被标题骗进来的,但是这个论题并不是我瞎吹牛,世界上最流行的操作系统还真不是Windows。 提及操作系统,我们印象中比较深刻的无非就是Windows,Lin…

    Linux 2023年6月13日
    0124
  • Centos 6 DNS 配置 解决 Unknown host

    测试服务器Maven 打包时遇到了如下的错误 看上去应该是对 maven.aliyun.com的DNS 域名解析出问题了。 登录到服务器上 ping maven.aliyun.co…

    Linux 2023年5月27日
    0110
  • 代码上传Github后乱码解决方案

    阅文时长 | 0.23分钟字数统计 | 384字符主要内容 | 1、引言&背景 2、解决方案 3、声明与参考资料『代码上传Github后乱码解决方案』 编写人 | SCsc…

    Linux 2023年6月14日
    0184
  • 数字图像处理

    1. 图像的基本概念 连续图像:二维坐标系上连续变化的图像,图像的像点无限稠密。 离散图像:用数字序列表示的图像,像素是组成图像的基本单位。 1.1 图像数字化采样 图像经过采样与…

    Linux 2023年6月14日
    094
  • MySQL提示sql_mode=only_full_group_by解决办法

    MySQL异常sql_mode=only_full_group_by 原因:在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。会报sql_mo…

    Linux 2023年6月13日
    0131
  • web框架底层原理;django介绍

    目录 纯手撸web框架 基于wsgiref模块 优化处理 动静态网页 基于jinja2模板语法 框架请求流程 python主流web框架 *django框架介绍 内容 纯手撸web…

    Linux 2023年6月7日
    0103
  • ELK收集MySQL慢日志并告警

    采用的是 filebeat采集日志, Redis做日志存储, logstash消费处理日志,将处理过的日志存储到 ES, kibana做日志展示, Elastalert做监控告警长…

    Linux 2023年5月27日
    0104
  • 【spring-boot】Redis的整合与使用详解

    在pom.xml中添加依赖 org.springframework.boot spring-boot-starter-data-redis 2.2.1.RELEASE io.let…

    Linux 2023年5月28日
    0102
  • 面试必问的安卓虚拟机,你真的掌握了么?——安卓虚拟机基础知识回顾

    前言 21世纪,安卓虚拟机正在一步步的走入我们的生活,小到个人部分朋友在电脑上使用安卓虚拟机玩手游,大到安卓从业人员在虚拟机上面跑程序。不得不承认,对于每一位Androider 而…

    Linux 2023年6月13日
    0104
  • ToneGenerator Init failed Crash 崩溃

    需求需要在扫码时产生一个短促的提示音, 搜了下像这样实现。测试时发现多次扫码后,会触发程序崩溃问题。 异常如下 代码如下: 一番搜索, 以下为最佳答案, 加上以后,循环测试, 不再…

    Linux 2023年6月13日
    0114
  • WEB自动化-05-Cypress-元素交互

    5 元素交互 元素识别和操作是UI自动化测试的基础,下面一起来学习一下在Cypress中的元素交互操作吧。 5.1 元素定位器选择 每一个测试用例都包含对元素的定位识别和操作等。因…

    Linux 2023年6月7日
    0106
  • 【证券从业】金融基础知识-第六章 证券投资基金02

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-11 23:55 陈景中 阅读…

    Linux 2023年6月13日
    0113
  • 微信小程序全局变量的设置、使用、修改过程解析

    微信小程序全局变量的设置、使用、修改过程解析 全局变量的设置 在miniprogram > app.js 文件中设置,globalData对象就是存储全局变量的。 php;g…

    Linux 2023年6月7日
    0115
  • netstat 命令查看端口状态详解

    转载请注明出处: netstat 可以查看服务器当前端口列表及指定端口的连接状态等; -t : 指明显示TCP端口,t是TCP的首字母。 -u : 指明显示UDP端口,u是UDP的…

    Linux 2023年6月14日
    085
  • Identity Server 4资源拥有者密码认证控制访问API(二)

    基于上一篇文章中的代码进行继续延伸,只需要小小的改动即可,不明白的地方可以先看看本人上一篇文章及源码: Identity Server 4客户端认证控制访问API 一、 Quick…

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