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)

大家都在看

  • Ubuntu 20.04 双系统安装完整教程

    1、查看电脑的信息 1.1 查看BIOS模式 “win+r”快捷键进入”运行”,输入”msinfo32″回车…

    Linux 2023年6月7日
    089
  • 如何访问github.io类的网站

    上网查找后看到有两种说法: 找到/etc/hosts文件,Windows一般在/Windows/System32/drivers/etc目录下,MAC在/private/etc目录…

    Linux 2023年6月8日
    0112
  • CNN卷积神经网络的构建

    1.卷积神经网络由输入层,卷积层,激活函数,池化层,全连接层组成. input(输入层)–conv(卷积层)–relu(激活函数)–pool(池…

    Linux 2023年6月6日
    082
  • Redis中使用redis-cli及密码登录

    使用redis-cli登录后如果Redis中设置了密码那么输入密码可能会出现: NOAUTH Authentication required的错。 这个时候可以输入:auth pa…

    Linux 2023年5月28日
    091
  • Shell第三章《for循环》

    语法结构: for &#x53D8;&#x91CF;&#x540D; [ in &#x53D6;&#x503C;&#x5217;&a…

    Linux 2023年6月6日
    0139
  • MySQL8主从复制

    环境介绍 主服务器配置 修改my.cnf配置文件 在/etc/my.cnf 添加如下信息 登录主服务器给从服务器授权 登陆mysql 创建user授权 备注:rootslave就是…

    Linux 2023年6月14日
    0137
  • 使用idea操作git(ssh协议)

    问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from rems…

    Linux 2023年6月6日
    0126
  • Centos 7防火墙策略配置指南

    Centos 7防火墙策略配置指南 —— 清听凌雪慕忆 @ 1. 开启防火墙 1.1 user切换到root用户 1.2 查看防火墙服务状态 1.3 查看firewall的状态 1…

    Linux 2023年6月7日
    0148
  • Action Sheets 和 Activity Views

    行动表行动表是一种特殊的提醒方式,它展示了与当前环境相关的两个或多个选择。在较小的屏幕上,动作表会从屏幕的底部滑上去;在较大的屏幕上,动作表会以弹出式的方式一次性出现。 在执行一个…

    Linux 2023年6月7日
    096
  • 数据库主从复制

    主从复制是MySQL中最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库…

    Linux 2023年6月6日
    063
  • 在VS code使用Remote-SSH远程连接Linux 开发C++ 配置详细介绍

    VS code 远程连接服务器,编译C++ 一、前期准备 1、VS code安装 Remote-SSH插件 2、Windows安装SSH。 3、Linux服务器连接测试。 a.接通…

    Linux 2023年5月27日
    0142
  • 通过route , tracert , traceroute 查看本地路由配置及访问ip或域名时经过的路由信息

    转载请注明出处: 1.路由器和交换机的区别和过程 在windows 系统或linux 系统访问 外网ip 或域名时,都会通过层层的路由器,然后将请求转发到最终的目标服务器;因为互联…

    Linux 2023年6月14日
    0104
  • 什么是草台班子?

    有个朋友最近想跳槽,他对管理的兴趣不大,而且认为自己的性格也不适合做管理,更想成为技术专家。基于这些考虑,他希望能进入知名大厂,如果面试不顺利,去小而美公司也行。他的面试经验不多,…

    Linux 2023年6月6日
    0104
  • Centos8安装docker报错(错误提示:All mirrors were tried)

    Centos8从零安装Docker-ce 背景:我把服务器整个yum源的配置文件里的内容全删了。因为我一直碰到”All mirrors were tried&#8221…

    Linux 2023年5月27日
    0149
  • 分布式系统中数据存储方案实践

    数据膨胀的时候,必然放大细节。 一、背景简介 在项目研发的过程中,对于数据存储能力的依赖无处不在,项目初期,相比系统层面的组件选型与框架设计,由于数据体量不大,在存储管理方面通常容…

    Linux 2023年6月14日
    082
  • DotNet发布程序到NuGet

    1、新建一个类库 2、选择项目属性,在包栏目下填写 3、选择项目,鼠标右键”打包” 主要注意的是生成配置需改为 Release 4、然后就可以在我们项目 b…

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