目录
一、IPV6介绍
1.1 IPV6介绍
1.1.1 IPV4的局限性
地址短缺
复杂包头,网络节点处理效率不高
很大的路由表,地址分配杂乱
部署安全,组播,移动比较麻烦
1.1.2 IPV6的特点
1、地址空间巨大,128bit
2、简单的报头。没有校验。因为即使校验出来数据不完整,也不能重传。不需要NAT
3、地址自动配置,即插即用,PC连入网不需要做任何操作。
4、支持层次化网络结构,合理的地址分配,地址自带聚合,路由条目大大减少。
5、扩展报头,支持端对端安全,自带安全机制ipsec
6、扩展包头,更好的支持QOS
7、支持移动特性,部署灵活。无缝漫游
1.2 IPV6的地址格式
ipv6地址表示格式:冒号分16进制,一个16进制4个bit
2031:0000:130F:0000:0000:09C0:876A:130B
IPV6地址结构
- 前48位前缀,16位子网位,也可以是网络位。所以通常表示64位前缀。
- 64位接口ID标识,类似IPV4中的主机位。
接口标识生成方法
- 手工配置
- 系统通过软件自动生成
- IEEE EUI-64自动生成:扩展唯一标识符,64位。通过修改MAC地址来生成。
①在MAC地址中间插入FFFE。 48+16=64
②将MAC地址的第7位进行0、1转换。如果是0转换为1,全局本地位。
1.2.1 ipv6压缩格式
- 前导0可以省略
2031:0000:130F:0000:0000:9C0:876A:130B - 一组0可以用1个0表示
2031:0:130F:0:0:9C0:867A:130B - 一组或多个连续的0可以用双冒号来表示,只能用1次::
2031:0:130F::9C0:876A:130B
1.2.2 IPV6地址网页访问方式
http://[2031:0:130F::9C0:876A:130B]:8080/index.html
1.2.3 IPV6地址分类
ipv6地址类型:
- 单播:和IPV4单播地址一样。
- 组播:替代了广播。
- 任播:该地址的数据报文会发送到本地最近的一个节点上。多台服务器提供相同服务时。和单播地址使用一个地址空间。
ipv4中MSDP中的anycast RP就是一种任播模型
1.2.3.1 单播地址
1.2.3.1.1 AGUA地址(全球可聚合地址)
由运行商(provider)分配48bit的全球路由前缀,分配省市等16bit的子网ID,加上64bit的接口id。
001开头的单播地址已经开始发放了。已经在用的公网地址。
0010 = 2 0011 = 3
现在的IPV6公网地址都是2和3开头的
2000::/3 第一个可用地址
2000::
3fff:ffffff 最后一个可用
2001::/16 正常使用
2002::/16 6to4tunnel使用
1.2.3.1.2 Link-Local Addresses
链路本地地址 类似MAC地址
- 前10位以 FE80::/10开头的,FE90,A0也可以
- 链路内有效。每个接口有且只有一个
- 一个节点想要运行IPV6,该接口一定会生成一个link-local地址,而一个接口有且只有一个link-local,一个接口可以拥有多个AGUA地址,无论使用什么IGP,通告路由的下一跳都是邻居接口的link-local地址
配置ipv6,首先全局开启IPV6,然后接口开启IPV6
ipv6 address 2001:0:0:1::1 64 #配置agua地址,自动生成一个链路本地地址
ipv6 address 2002:0:0:1:: 64 eui-64 #通过eui64自动生成ipv6地址
#查看IPV6地址信息
display ipv6 interface brief
1.2.3.1.3 Site-Local Addresses 场点本地地址
微软定义为IPv4中的私有协议前7bit FC00:/7
1.2.3.1.4 未指定地址
::/128 表示未指定地址
::/0 缺省地址
::1 环回地址
1.2.3.2 IPV6的组播地址
FF00::/8
开始
FF02::/8
常用
常见组播地址
#被请求节点组播,就是用这个取代的广播,XX:XXXX 节点单播地址的后24位
#只要一个节点有一个单播地址,那么一定会监听这个被请求节点组播地址
FF02::1:FFXX:XXXX
#对应ipv4的224.0.0.1,表示所有的节点
FF02::1
#对应ipv4的224.0.0.2,表示所有的路由器
FF02::2
#对应ipv4的224.0.0.9,表示所有rip路由器
FF02::9
1.2.3.3 任播地址
该地址的数据报文会发送到本地最近的一个节点上。多台服务器提供相同服务时,使用一个地址
ipv6 address 2013::1 64 anycast
1.3 ipv4地址迁移ipv6地址
前96位为0,后32位为ipv4地址,将ipv4地址转换为16进制表示
1.4 IPV6的报文结构
IPV6报文的区别
- ipv6中没有包头长度字段,ipv6字节固定长度40字节+可变长扩展头部。ipv420-60字节
- ipv6没有选项和填充选项
- ipv6取消了切片,原因是IPV6有pmd(路径MTU检测)
- ipv6取消了校验和字段
- ipv6新增加了流标签
报文字段
- version:版本字段
- Traffic Class:流量类别。类似IPV4中的TOS字段用于做QOS使用
- Flow label:流标签,给相同的数据打上相同的标签,不需要多次查表。
- Payload Length:载荷长度。
- next Header:下一个头部。类似Protocol字段,识别上层协议。
- hop limit:跳数限制。类似TTL。
- source Address:源IP
- destination Address:目的IP。
常见的IPV6的扩展报头。
- 逐条选项报头,next Header=0,
用于资源预留,用于路由器提示等 - 目的选项报头,next Header=60,
用于移动IPV6,只有特定的目的节点才会处理的信息 - 源路由报头,next Header=43
用于IPV6源节点强制数据包经过的路径 - 分段报头,next Header = 44
用于包分片 - 认证报头,next header=51
用于IPsec,提供认证、数据完整性等。 - 封装安全负载报头,next header = 50
用于数据的加密
1.5 IPV6基础功能的实现
1.5.1 ICMPv6
ICMPv6替代了arp协议
作用:实现邻居发现、无状态地址配置、PMTU发现等
icmpv6的差错报文
- 目的不可达错误报文:数据包无法转发到目的节点
- 数据包过大错误报文:报文超出接口的MTU
- 时间超时错误报文:Hop Limit字段等0,分段重组报文超时
- 参数错误报文:报文出错
ICMPV6的信息报文
- echo request
- echo replay
1.5.2 NDP(邻居发现协议)
邻居发现协议或者叫做ICMPV6的应用,使用ICMPV6的报文
RS:路由器请求消息,用来请求RA,用于无状态地址自动配置
目的地址FF02::2 icmp type 133
RA:路由器通告,通告路由器的一些前缀,MTU等。默认不发送,cisco默认发送
目的地址FF02::1 icmp type 134
报文内容:
跳数限制
flags:o位置位,通过DHCPv6获取其他链路信息
M位置位,使用DHCPv6来有状态地址自动配置。不置位,无状态地址自动-
路由器生存时间:在始发路由器是缺省路由器时,此字段非0。
可达时间:用于邻居不可达机制
重传计时:用于邻居不可达机制
可选项
NS:邻居请求,请求对方链路层地址,地址解析
目的地址为被请求节点组播地址,icmp type 135
报文内容:
target address:目标地址,将此地址后24bit形成目的被请求节点组播地址
NA:邻居通告,回复邻居请求消息
icmp type 136
ICMPV6 重定向
报文格式
R:路由器标记,如果是路由器发送的NA则置位
S:请求标记,表示这是回复NS的NA。
O:过载标记,需要更新缓存的链路层地址
target address:NS的源地址
1.5.2.1 RS,RA的场景
配置路由器无状态地址自动配置
路由器2
intface e0/0/0
undo ipv6 nd ra halt #取消抑制ND,RA消息的发送
路由器1
interface e0/0/0
ipv6 address auto global #地址自动获取,发送NS检测链路地址冲突,RS请求地址前缀
使用ensp云设备桥接本地网卡:
1、新增加一个本地以太网卡
2、新增加一个UDP口
3、然后选择以太网卡将出端口改为2,勾选双向通道,增加
4、然后给R1的e0/0/1口配置和本地网卡同一网段,ping测试
5、在R1接口配置IPV6地址,并使其发送RA消息
6、在主机上查看是否获得了IPV6地址
微软的ipv6地址计算方式是变换的,防止其他人推算出IPV6地址。
一个节点通过无状态地址自动配置获悉了接口的基于EUI-64的AGUA地址的同时,如果该设备是一台基于IPV6的PC,则该设备同时会指定给其分配网段前缀的路由器为缺省网关。
如果是一台路由器,那么只会获悉AGUA地址,不会指网关。
ipv6PC连入网线之后,如果没有立即收到RA报文,则会发送一个RS报文请求RA报文生成AGUA地址,IPV6路由器会无视周期性时间发送一个RA报文。
1.5.2.2 NS,NA的场景
地址解析:当去ping一台设备时,须知道对端的链路层地址。而ipv6中没有广播,不支持ARP,使用ICMPv6替代ARP。
- 发送一个ICMP type为135的类型值,目的地址为目的被请求节点组播地址的NS报文,来请求对端设备的链路本地地址。
- 收到NS消息的设备会回复一个ICMP type为136的类型值的NA报文
- 形成NDP表项将目的link-local地址与AGUA地址进行映射
STALE:
- REACH:可达时间,缺省30s。
- Delay:发送数据包到一个Stale状态的目的节点进入该状态等待5s,5s内收到可达确认进入Reach状态,没有收到进入probe状态
- Probe:每隔重传时间或1s通过目的节点发送邻居请求来搜索可达确认。
为什么ns报文的目的地址为被请求节点组播地址?
被请求节点组播地址固定格式:FF02::1:FF/104
只要一个节点配置了IPV6单播地址,那么该节点就一定监听一个被请求节点组播地址,FF02::1:FFXX:XXXX,后面24bit的X为单播地址的后24bit。也会监听一个MAC地址后24bit的组播组地址。就是用该中方式取代的广播,因为该组播组地址只有我本地能监听。
1.5.3 重复地址检测(DAD)
ICMP type 135的NS报文,源地址全0,目的地址为自己的被请求节点组播地址
当接口配置了IPV6地址会自动发送2个NS消息,来检测地址是否冲突
因为当配置了IPV6地址,接口会有一个全球AGUA地址,还会自动产生一个链路本地地址
1.5.4 ICMPv6重定向
当网关路由器知道更优的路径,会以重定向报文告诉主机,和ipv4一样,只在第一次发送有效
PC1需要和PC2通信,PC1的默认网关是R1,那么当PC1发送报文给PC2时报文会被送到R1。R1接收到PC1发送的报文以后会发现实际上PC1直接发送给R2更好,它将发送一个重定向报文给PC1,其中报文中更好的路径下一跳地址为R2,Destination Address为PC2(该部分为ICMPv6重定向报文携带的目的地址)。PC1接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往PC2的报文就直接发送给R2。
1.5.5 PMD(路径MTU检测)
检测链路上最大的MTU。
二、IPV6路由协议
2.1 RIPng
RIPng对原RIP的修改
- 工作在应用层,udp封装,端口号521.原端口520
- 所有路由协议都是用链路本地地址作为下一跳
- 所有路由协议都没有认证,使用IPV6中的扩展报头中的安全机制
- 组播地址FF02::9
配置RIPng
ripng 1
quit
interface g0/0/0
ripng 1 enable #还可以先接口启用,自动创建ripng进程
interface loo0
ripng 1 enable #只需在接口下启用ripng
dis default-parament ripng #默认参数
2.2 OSPFv3
OSPFV3和OSPFv2的不同之处
- OSPFV3基于链路,不是基于子网,一个链路可以配置多个地址
不需要考虑是否在同一网段,只要在同一链路就可以建立邻居 - 1类LSA和2类LSA没有携带IP地址,由新增的LSA宣告
- 邻居总是通过路由器ID标识,V2中广播和NBMA环境是通过接口地址表示邻居,取消了不一致性
- 增加了链路本地泛洪扩散范围,新增LSA
- 链路本地地址的使用,V3数据包具有链路本地的范围
- 对每个链路多个实例的支持,ospfv2进程不同也可以建立邻居
实例ID在OSPF头部中,原来的认证字段的位置 - 取消OSPF的认证,交由IPV6实现
- 更灵活处理未知LSA类型,可存储或泛洪不识别报文,v2丢弃不识别报文
ospfv3的LSA
新增8类LSA(链路LSA)使其扩散范围只在链路范围内有效
为什么新增9类LSA(区域内前缀LSA)?
因为在V2中拓扑发生改变和网络发生改变都需要进行1类和2类LSA的泛洪,重新进行SPF算法的计算,在很多定期变化的末梢链路边界或接入路由器容易出现问题。
ospfv3中1类LSA和2类LSA不通告前缀,将这功能放入新的区域内前缀LSA中,这样v3的1类LSA和2类LSA只有路由器的节点信息,只有在拓扑发生改变的时候进行SPF计算,如果网络或前缀发生变化,这些信息将在区域内前缀LSA中扩散,不会触发SPF的计算。
配置OSPFv3
ospfv3 1
router-id 1.1.1.1 #router-id也是32bit,必须配置
quit
interface g0/0/0
ospfv3 1 ar 0 instace 1 #实例1
interface loo0
ospfv3 1 area 0
2.3 IS-IS IPV6
通过新增TLV实现对IPV6的支持
配置
isis 1
ipv6 enable
net 49.0001.0000.0000.0001.00
interface e0/0/0
isis ipv6 enable
2.4 BGPv4+
新增加 MP_REACH_NLRI,MP_UNREACH_NLRI
配置
bgp 100
router-id 1.1.1.1
peer 12.1.1.1 as-number 200
peer 2001:: 2 as-number 200
ipv4-family unicast
undo synchronization
peer 12.1.1.1 enable
ipv6-family unicast
undo synchronization
peer 2001::2 enable
三、迁移方案
3.1 IPV6迁移方案:
- 双栈:既使用IPV4,又使用ipv6。最好的过渡技术
- 隧道:有些IPV4设备不支持ipv6。
ipv4 over ipv6隧道:IPV4封装在IPV6之上,解决ipv4孤岛问题
ipv6 over ipv4隧道:IPV6封装在IPV4之上,解决ipv6孤岛问题
gre隧道:ipv4之上封装gre,gre之上封装ipv6.应用广泛,解决很多问题
3.1.1 手动隧道
3.1.1.1 点到点隧道
通过隧道技术,使IPV6的报文在IPV4网络传输,实现IPV6孤岛之间的通信。
配置步骤:
1、IPV6站点配置好
2、公网路由配置好可以相互学到,可以配静态,ospf,isis等
3、R1和R3之间建立tunnel口。
interface tunnel 0/0/0
ipv6 enable #公网物理口不要配置IPV6地址
ipv6 address 2013::1/64 #tunnel口配置IPV6地址
tunnel-protocol ipv6-ipv4 #tunenl封装协议
source 12.1.1.1 #tunnel口依赖物理口。
destination 23.1.1.3 #源和目的可达tunnel口才能up
ping tunnel口IPV6地址测试,ipv6地址封装在IPV4之上。
4、tunnel配置好之后,相当于IPV6站点直连另一个IPV6站点。配置IPV6路由协议学习路由。本次使用OSPFV3,将tunnel口和连接IPV6站点的接口宣告进ospfv3。通过查看路由表可以看到学习到另一站点的IPV6路由。
在PC2上ping测试。
抓包查看
3.1.1.2 GRE(通用路由封装)隧道
不仅仅用在IPV6 还可以解决BGP路由黑洞等其他。与手动隧道配置一样,只是封装格式不同,应用广泛.
interface tunnel 0/0/0
tunnel-protocol gre
source 12.1.1.1
destination 23.1.1.3
抓包查看
ipv4之上是gre隧道,gre隧道内部承载着IPV6的报文
3.1.2 自动隧道,点到多点隧道
为什么需要自动隧道?
当网络中有多个IPV6站点时,每个站点之间部署一个tunnel,大量的tunnel配置,多段AGUA地址,路由条目的大量增加。
3.1.2.1 6to4 tunnel
在流量去往某个场点时,动态的建立tunnel。
如何动态建立tunnel的?
通过将tunnel源IPV4地址嵌入到隧道IPV6地址,可以用于当一台PC访问目的网络时,边界网关设备通过提取目的地址中的第17bit到48bit转换为对应的ipv4地址,自动与其建立tunnel转发。前提是内网所有设备使用的IPV6地址是tunnel源地址转换后的前缀。
IPV6地址前48bit是网络位,前16位为2002固定的,剩下48-16=32位可用,使用IPV4转换成16进制填充。
动态tunnel前提条件:
- IPV6地址必须是2002::/16,在内网接口中使用。
- 内网所有设备的IPV6地址使用的前48位网络位是2002加上tunnel源地址转换16进制后的前缀。
- 6to4tunnel只需要指定源地址
- 最后边界路由器写一条IPV6静态路由指向tunnel口。
ipv6 route-static 2002::/16 tunnel 0
配置6to4 tunnel第一种方法
转换后的地址用在边界路由器内网接口,不需要运行路由协议,一条静态足以
为了实现6to4网络之间的互通,除了配置6to4隧道外,还需要为6to4网络内的主机及6to4 router配置6to4地址。
- R1上接口G0/0/1的IPv4地址为12.1.1.1/24,转换成6to4地址后的前缀为2002:c01:0101::/48,内网的IPV6地址必须使用该前缀。
- R3上接口G0/0/0的IPv4地址为23.1.1.3/24,转换成6to4地址后的前缀为2002:1701:0103::/48,内网的地址必须使用该前缀。
- R4上接口G0/0/0的IPv4地址为24.1.1.4/24,转换成6to4地址后的前缀为2002:1801:0104::/48,内网的地址必须使用该前缀。
R1
# 配置接口G0/0/1的地址。
interface GigabitEthernet0/0/1
ip address 12.1.1.1 255.255.255.0
# 配置接口G0/0/0的地址为6to4地址2002:c01:101::1/64。
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 2002:C01:101::1/64
# 创建模式为6to4隧道的接口Tunnel0。
interface Tunnel0/0/0
ipv6 enable
ipv6 address 3001::1/64 # 配置Tunnel0接口的IPv6地址。
tunnel-protocol ipv6-ipv4 6to4
source 12.1.1.1
# 配置到目的地址2002::/16,下一跳为Tunnel接口的静态路由。
ipv6 route-static 2002:: 16 tunnel 0/0/0
R2和R3同样配置.
PC1 ping PC2测试
第二种方法
公网内隧道IPV6地址直接使用转换后的地址。然后运行路由协议学习各站点路由
自动隧道只能使用静态路由和BGPv4+,因为OSPFv3的下一跳为链路本地地址,不能嵌入到ipv6地址
3.1.2.2 isatap隧道
与6to4-tunnel的嵌入的方式不一样,嵌入到接口ID的后32bit。
没有2002::/16的限制
1、站点配置好
2、公网ipv4配置好。
3、配置tunnel
interface Tunnel0/0/0
tunnel-protocol ipv6-ipv4 isatap
ipv6 enable
ipv6 address 2013::/64 eui-64
source 12.1.1.1
查看自动生成的隧道ipv6地址是通过source 地址转换成接口ID的地址
4、运行路由协议
R1
bgp 200
router-id 1.1.1.1
peer 2013::5EFE:1701:103 as-number 100
peer 2013::5EFE:1701:103 ebgp-max-hop 255
ipv6-family unicast
undo synchronization
network 2001:: 64
peer 2013::5EFE:1701:103 enable
R2
bgp 100
router-id 3.3.3.3
peer 2013::5EFE:C01:101 as-number 200
peer 2013::5EFE:C01:101 ebgp-max-hop 255
ipv6-family unicast
undo synchronization
network 2002:: 64
peer 2013::5EFE:C01:101 enable