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

news/2024/11/25 19:32:53/

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_6RDif (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);/* 将配置的IPv4通用前缀和获取不通用的部分或运算计算出IPv4目的地址 */*v4dst = tunnel->ip6rd.relay_prefix | htonl(d);return true;}
#elseif (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;}
#endifreturn false;
}

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

拓扑结构如上图所示,实际配置不同的是IPv6的前缀,将IPv6的前缀修订为2012:db8:2300::/48。

#配置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: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地址是否是可以随意设定的呢?答案当然不是的。
命令:
ip tunnel 6rd dev kali006rd 6rd-prefix 2012:db8:2300::/48 6rd-relay_prefix 192.168.0.0/16
这条命令即完成IPv6的前缀设定和IPv4通用前缀的设定。等效于Cisco设备中的配置:

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

再者是隧道接口的IPv6地址如何确定?如果还记之前博客里面写的6rd原理,你就应该清楚的知道IPv6地址的前缀是有IPv6前缀和IPv4地址共同决定的。
命令:
ip -6 addr add 2012:db8:2300:6e1b::1/64 dev kali006rd
2012:db8:2300 即设定的IPv6运营商分配的前缀
6e1b 即需要嵌入到IPv6前缀中的部分IPv4信息,由于已经设定了通用前缀为192.168.0.0/16也即是 192.168这两个字节不需要嵌入到IPv6前缀中,只需要将剩余的部分嵌入到IPv6前缀中。
命令:
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情书的口头禅了:这很关键!)。

#配置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: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#在CE设备测试连通性:
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--- 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

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镜像包(也即是界面中的路由器、交换机):

  • 百度云盘:https://pan.baidu.com/s/1WnIcOE9Qo27yHIMMgtxPuw 提取码: 3bt8
  • 其他地址:http://srijit.com/working-cisco-ios-gns3/
    当需要搭建与外部通信(如:宿主机,Internet网)时,所使用到的GNS3虚拟机,
    根据自己的需要下载匹配的版本:https://gns3.com/software/download-vm

    (后续,更新在百度云盘中…)
    其他:https://github.com/GNS3;github GNS3项目托管。
2.2 GNS3使用时常用操作
2.2.1 导入IOS镜像包

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

步骤2:点击 New

步骤3:点击Next,选择我们已经下载好的IOS image文件,完成加载,其他默认即可,自己可以按需配置,作为新手的我,都是默认选项。

在选择Network Adapters时,可以根据自己的需求来增加一个槽。

如: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


默认配置即可,再点击Next  Next,直到界面:

如果界面VM name的下拉框中,没有GNS3 VM,这是因为,你没有将之前下载的GNS3 VM 虚拟机加载到VMware中。相应的操作如下:

来完成GNS VM虚拟机的导入(当前我使用的VMware, Virtual Box的用户自行实验)。
再次GNS VM界面的Refresh按钮刷新,即可看到GNS3 VM的选项。点击Next直到Finish。
最后,最后:
重启GNS3软件,GNS3 VM会自动跟随启动的。
如果一切正常,VM虚拟机有如下界面弹出:

键入Enter键后,弹出的界面:

目前而言,主要关注的是:

  • Shell: Open a shell #启动一个shell命令行
  • Network: Configure network settings # 配置网络IP地址等相关信息,配置后,虚拟机将会自动重启。
    有个小疑问:进入到shell后,怎么再次回到这个界面,没有办法。
    注:设备中,需要使用ip 等命令,或执行命令时,提示无权限时,记得在命令前加:sudo 关键字。
2.2.3 连接网线

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

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

连接网线:

启动路由器,并进入命令行:


右键,需要启动的路由器,如:6r_br_router,选择start;再双击设备,即可进入命令行:

2.3 配置6rd

现在,终于可以开始搭建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 中去配置的。


确保6r_br_route和6r_ce_router的互通性:


如果不能正常ping通,可以配置arpa来完成:

arp 192.168.1.10 000c.291f.1598 ARPA
arp 目的地址 吓一跳MAC地址 ARPA
6rd_br_router的配置如下:
interface Tunnel1no ip addressno ip redirectsIPv6 address 2001:DB80:A0A::1/48tunnel source GigabitEthernet0/0tunnel mode IPv6ip 6rdtunnel 6rd IPv4 prefix-len 16tunnel 6rd prefix 2001:DB80::/32
!
interface Ethernet0/0no ip addressshutdownduplex auto
!
interface GigabitEthernet0/0ip address 192.168.10.10 255.255.255.0duplex fullspeed 1000media-type gbicnegotiation 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 Tunnel1no ip addressno ip redirectsIPv6 address 2001:DB80:10A::1/48tunnel source GigabitEthernet0/0tunnel mode IPv6ip 6rdtunnel 6rd IPv4 prefix-len 16tunnel 6rd prefix 2001:DB80::/32tunnel 6rd br 192.168.10.10
!
interface Ethernet0/0no ip addressshutdownduplex auto
!
interface GigabitEthernet0/0ip address 192.168.1.10 255.255.255.0duplex fullspeed 1000media-type gbicnegotiation 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互通性测试:

Wireshark抓取报文:


http://www.ppmy.cn/news/427410.html

相关文章

vue中使用echarts词云

1. 安装 cnpm install echarts-wordcloud2. 创建模板组件 WordCloudChart <template><div :id"id" :style"{ height:height,width:width }" /> </template><script>import echarts from "echarts/lib/echarts";impor…

15.TFTP 与 NFS 服务器配置

15. TFTP 与 NFS 服务器配置 实验要求: 1.安装并配置TFTP服务。 2.安装并配置NFS服务。 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机。 2. TFTP的rpm安装包。 3. TFTP下载工具Tftpd32。 4. NFS的rpm安装包。 硬件: 1.PC机一台。 背景知识: 1. 交叉开发: 嵌入式系统开发多采…

CTF 小白教程《从0到1:CTFer成长之路》SQL - 2 解题过程

大家好&#xff01; 我是小黄&#xff0c;很高兴又跟大家见面啦 &#xff01; 拒绝水文&#xff0c;从我做起 &#xff01;&#xff01;&#xff01;&#xff01; 未经允许&#xff0c;禁止转载 &#xff0c;违者必究&#xff01;&#xff01;&#xff01;&#xff01; 本实验…

Android退出应用程序

前言 在某些极端情况下&#xff0c;例如&#xff0c;用户拒绝授予某项核心权限&#xff0c;此时应用需要暂停服务&#xff0c;这是就要考虑用户退出。 Android程序有很多Activity&#xff0c;比如说主窗口A&#xff0c;调用了子窗口B&#xff0c;如果在B中直接finish(), 接下…

vivoiqooz1鸿蒙系统,OPPOreno5与iQOOz1哪个好?哪个更值得入手?

OPPOreno5这款手机以超炫酷的外观设计俘获了女性玩家们的喜爱。而iQOOz1却是以超强的性价比和性能赢得了大众们的一致好评&#xff0c;那么OPPOreno5与iQOOz1哪款手机更好呢? 1、手机基本参数对比 2、屏幕方面 OPPOreno5&#xff1a;6.43英寸OLED屏幕&#xff0c;为用户带来超…

PPP和PPPOE详解

二层广域网技术 广域网技术广域网接口PPP封装技术PPP协议的基本概念LCP协议PAP认证协议CHAP认证协议NCP协议MP二层PPP链路聚合技术PPP配置MP配置 IP-Trunk技术PPPOE技术 以太网技术 广域网技术 广域网接口 1、路由器广域网接口的演变 2、以太网接口 以太网接口由Xerox公司…

javap指令集

栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 icons…

详解PPP和PPPoE的工作原理

转载前言 ---------------------------- 广工目前的校园网认证方式是基于PPPoE的(没错, 客户端Dr.COM 5.2.1(p)中的p就是指的这个), PPPoE和PPP关系紧密, 但又不是简单的包含与被包含的关系, 故而转载一篇好文分享给同学们。(注意这里的PPP和PPTP(Point to Point Tunneling Pr…