【思科】IPv6 过渡技术 - 6to4隧道
- 实验要求
- 实现思路
- 6 to 4 特点
- 注意点
- IPv4 转 IPv6 格式小技巧
- 配置
- R1
- 基础配置
- OSPFv3 局域网可达
- R2
- 基础配置
- 局域网环境(OSPFv3):IPv6 网络
- 6 to 4 隧道
- R3
- R4
- 基础配置
- 局域网环境(OSPFv3):IPv6 网络
- 6 to 4 隧道
- R5
- 基础配置
- OSPFv3 局域网可达
- 检查
- R2的tunnel 接口状态
- R4的tunnel 接口状态
- R1 的路由表
- R5 的路由表
- R1 Ping R5
- 抓包分析
- 6to4是如何自动建立隧道?
- ① 报文的目的地址
- ② 那怎么自动建立呢?
- 配置文档
- R1
- R2
- R3
- R4
- R5
实验要求
实验环境 : EVE
实验需求:
实现双方站点的IPv6网络 可以跨 IPv4 网络进行通信
实现思路
① IPv6网络用OSPFv3来实现互通
② IPv4网络用OSPF来实现互通
③ 使用6 to 4隧道实现Pv6网络 可以跨 IPv4 网络进行通信
隧道可以在原有的IPv6头部,再加上Pv4头部,就可以帮助IPv6跨IPv4网络进行通信了
6 to 4 特点
自动建立隧道,不需要向GRE 或者 IPv6 in IPv4 隧道一样,手动指定隧道目的 !
注意:不支持组播
有一个特定前缀:2002::/16 2002:IPv4:: /48
那这个嵌入的IPv4的地址,就是我出接口的IPv4地址
报文结构(基于IPv6 in IPv4 隧道) :IPv4 — IPv6
详情可以去查看该篇IPv6 in IPv4 隧道实验
链接: IPv6 in IPv4 隧道实验
注意点
① OSPFv3 只能通过接口下宣告,不能使用Network!!!
② IPv6 in IPv4隧道的 IPv6地址格式2002:IPv4:: /48
这个IPv4需要我们,手动将十进制换算成十六进制,所以推荐用计算机来换算会更快一些
IPv4 转 IPv6 格式小技巧
可以用计算器来进行进制转换:
HEX : 十六进制
DEC : 十进制
一个十进制 转换成 两个十六进制
配置
R1
基础配置
R1(config)#int e0/0
R1(config-if)#no shutdown
R1(config-if)#ipv6 address 2001:12::1/64
R1(config-if)#exit
R1(config)#int loopback 1
R1(config-if)#ipv6 address 2000:1:1::1/64
R1(config-if)#exit
R1(config)#int loopback 2
R1(config-if)#ipv6 address 2000:1:2::1/64
R1(config-if)#exit
R1(config)#int loopback 3
R1(config-if)#ipv6 address 2000:1:3::1/64
R1(config-if)#exit
=================================== 查看接口IPv6地址 =================================
R1(config)#do show ipv6 int brief
Ethernet0/0 [up/up]
FE80::A8BB:CCFF:FE00:1000
2001:12::1
Ethernet0/1 [administratively down/down]
unassigned
Ethernet0/2 [administratively down/down]
unassigned
Ethernet0/3 [administratively down/down]
unassigned
Loopback1 [up/up]
FE80::A8BB:CCFF:FE00:1000
2000:1:1::1
Loopback2 [up/up]
FE80::A8BB:CCFF:FE00:1000
2000:1:2::1
Loopback3 [up/up]
FE80::A8BB:CCFF:FE00:1000
2000:1:3::1
OSPFv3 局域网可达
## 记得要启用IPv6单播路由,才能去配置动态路由
R1(config)#ipv6 unicast-routing
## 进入OSPFv3 IPv6 地址族,设置RID为 1.1.1.1
R1(config)#router ospfv3 1
R1(config-router)#address-family ipv6
R1(config-router-af)#router-id 1.1.1.1
R1(config-router-af)#exit
R1(config-router)#exit
## 接口下宣告
R1(config)#int range e0/0,lo1,lo2,lo3
R1(config-if-range)#ospfv3 1 ipv6 area 0
R1(config-if-range)#exit
R2
基础配置
R2(config)#int e0/0
R2(config-if)#no shutdown
R2(config-if)#ipv6 address 2001:12::2/64
R2(config-if)#exit
R2(config)#int e0/1
R2(config-if)#no shutdown
R2(config-if)#ip address 172.16.23.2 255.255.255.0
R2(config-if)#exit
局域网环境(OSPFv3):IPv6 网络
## 需要开启IPv6单播功能
R2(config)#ipv6 unicast-routing
## 进入OSPFv3 IPv6 地址族,设置RID为 2.2.2.2
R2(config)#router ospfv3 1
R2(config-router)#address-family ipv6
R2(config-router-af)#router-id 2.2.2.2
R2(config-router-af)#exit
## 接口下宣告
R2(config)#int range e0/0
R2(config-if-range)#ospfv3 1 ipv6 area 0
R2(config-if-range)#exit
============================== 查看 R2 学到IPv6 路由条目 ============================
R2(config)#do show ipv6 route
IPv6 Routing Table - default - 6 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
B - BGP, HA - Home Agent, MR - Mobile Router, R - RIP
H - NHRP, I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea
IS - ISIS summary, D - EIGRP, EX - EIGRP external, NM - NEMO
ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
RL - RPL, O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1
OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
la - LISP alt, lr - LISP site-registrations, ld - LISP dyn-eid
lA - LISP away, a - Application
O 2000:1:1::1/128 [110/10]
via FE80::A8BB:CCFF:FE00:1000, Ethernet0/0
O 2000:1:2::1/128 [110/10]
via FE80::A8BB:CCFF:FE00:1000, Ethernet0/0
O 2000:1:3::1/128 [110/10]
via FE80::A8BB:CCFF:FE00:1000, Ethernet0/0
C 2001:12::/64 [0/0]
via Ethernet0/0, directly connected
L 2001:12::2/128 [0/0]
via Ethernet0/0, receive
L FF00::/8 [0/0]
via Null0, receive
6 to 4 隧道
## 目的:IPv4网络内部互通
R2(config)#router ospf 110
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 172.16.23.0 0.0.0.255 area 0
R2(config-router)#exit
## 6 to 4 隧道,因为是自动建立
## 目的是为了和所有有需要的设备建立隧道通信
## 所以就不用指定隧道的目的了
## 建立 6to4 隧道
R2(config-if)#int tunnel 24
R2(config-if)#tunnel mode ipv6ip 6to4 ## 将Tunnel模式改为 6to4
R2(config-if)#ipv6 address 2002:AC10:1702::2/64 ## IPv6地址设置为规定样式
R2(config-if)#tunnel source e0/1 ## tunnel隧道的源
R2(config-if)#exit
## 因为6to4隧道不支持组播
## 所以我们就写一条静态路由,去往R5的路由
R2(config)#ipv6 route 2000:5::/32 Tunnel24 2002:AC10:2204::4
## 需要重分发进OSPFv3中,让R1学到R5的网络
R2(config)#router ospfv3 1
R2(config-router)#address-family ipv6
R2(config-router-af)#redistribute static ## 将静态路由重分发进OSPFv3中
R2(config-router-af)#exit
================================== 查看到接口状态 ====================================
R2(config)#do show ipv6 int br
Ethernet0/0 [up/up]
FE80::A8BB:CCFF:FE00:2000
2001:12::2
Ethernet0/1 [up/up]
unassigned
Ethernet0/2 [administratively down/down]
unassigned
Ethernet0/3 [administratively down/down]
unassigned
Tunnel24 [up/up]
FE80::AC10:1702
2002:AC10:1702::2
R2(config)#
R3
R3(config)#int e0/0
R3(config-if)#no shutdown
R3(config-if)#ip address 172.16.23.3 255.255.255.0
R3(config-if)#exit
R3(config)#int e0/1
R3(config-if)#no shutdown
R3(config-if)#ip address 172.16.34.3 255.255.255.0
R3(config-if)#exit
R3(config)#router ospf 110
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 172.16.0.0 0.0.255.255 area 0
R3(config-router)#exit
R4
基础配置
R4(config)#int e0/0
R4(config-if)#no shutdown
R4(config-if)#ip address 172.16.34.4 255.255.255.0
R4(config-if)#exit
R4(config)#int e0/1
R4(config-if)#no shutdown
R4(config-if)#ipv6 address 2001:45::4/64
R4(config-if)#exit
局域网环境(OSPFv3):IPv6 网络
## 需要开启IPv6单播功能
R4(config)#ipv6 unicast-routing
## 进入OSPFv3 IPv6 地址族,设置RID为 4.4.4.4
R4(config)#router ospfv3 1
R4(config-router)#address-family ipv6
R4(config-router-af)#router-id 4.4.4.4
R4(config-router-af)#exit
R4(config-router)#exit
## 接口下宣告
R4(config)#int e0/1
R4(config-if)#ospfv3 1 ipv6 area 0
R4(config-if)#exit
6 to 4 隧道
## 目的:IPv4网络内部互通
R4(config)#router ospf 110
R4(config-router)#router-id 4.4.4.4
R4(config-router)#network 172.16.34.0 0.0.0.255 area 0
R4(config-router)#exit
## 建立6to4 隧道
R4(config)#int tunnel24
R4(config-if)#ipv6 address 2002:AC10:2204::4/64
R4(config-if)#tunnel source e0/0
R4(config-if)#tunnel mode ipv6ip 6to4
R4(config-if)#exit
R4(config)#ipv6 route 2000:1::/32 Tunnel24 2002:AC10:1702::2
R4(config)#router ospfv3 1
R4(config-router)#address-family ipv6
R4(config-router-af)#redistribute static
R4(config-router-af)#exit
R4(config-router)#exit
R5
基础配置
R5(config)#int e0/0
R5(config-if)#no shutdown
R5(config-if)#ipv6 address 2001:45::5/64
R5(config-if)#exit
R5(config)#int loopback 1
R5(config-if)#ipv6 address 2000:5:1::1/64
R5(config-if)#exit
R5(config)#int loopback 2
R5(config-if)#ipv6 address 2000:5:2::1/64
R5(config-if)#exit
R5(config)#int loopback 3
R5(config-if)#ipv6 address 2000:5:3::1/64
R5(config-if)#exit
=================================== 查看接口IPv6地址 =================================
R5#show ipv6 int br
Ethernet0/0 [up/up]
FE80::A8BB:CCFF:FE00:5000
2001:45::5
Ethernet0/1 [administratively down/down]
unassigned
Ethernet0/2 [administratively down/down]
unassigned
Ethernet0/3 [administratively down/down]
unassigned
Loopback1 [up/up]
FE80::A8BB:CCFF:FE00:5000
2000:5:1::1
Loopback2 [up/up]
FE80::A8BB:CCFF:FE00:5000
2000:5:2::1
Loopback3 [up/up]
FE80::A8BB:CCFF:FE00:5000
2000:5:3::1
OSPFv3 局域网可达
## 记得要启用IPv6单播路由,才能去配置动态路由
R5(config)#ipv6 unicast-routing
## 进入OSPFv3 IPv6 地址族,设置RID为 5.5.5.5
R5(config)#router ospfv3 1
R5(config-router)#address-family ipv6
R5(config-router-af)#router-id 5.5.5.5
R5(config-router-af)#exit
R5(config-router)#exit
## 接口下宣告
R5(config)#int range e0/0,lo1,lo2,lo3
R5(config-if-range)#ospfv3 1 ipv6 area 0
R5(config-if-range)#exit
检查
R2的tunnel 接口状态
R4的tunnel 接口状态
R1 的路由表
R5 的路由表
R1 Ping R5
R1#ping 2000:5:1::1 source lo 1
抓包分析
抓的是 R2的e0/1口
其实这个时候就可以看到,数据包发送的时候
此时就只新增了IPv4报文头这样子就比GRE少了一个封装字段,提高了传输效率
6to4是如何自动建立隧道?
① 报文的目的地址
当R1的内部想要去Ping R5的内部时
流量到达R2身上,这个时候是需要有目的IP地址的
但是他查看到了我是用6to4隧道,那么就没有去设置隧道目的,那这个时候是怎么传递的呢?
查看R2的路由表,看到我们写的那条静态路由
该条静态路由的下一跳是2002:AC10:2204::4 ,这下一条里面藏着一个IPv4地址,就是172.16.34.4
接上面的问题
那设备发现这是个6to4隧道,那么就会去路由表找静态路由,然后去提取该IPv4地址,作为我报文的目的地址。
② 那怎么自动建立呢?
其实就是提取我每一条静态路由的IPv4地址,作为我的隧道目的地址,这样子就OK啦
主要就是静态路由中,有下一跳有包含 IPv4 地址,这个就是我的目的地址,所以就可以自动去建立
当需要建立很多条隧道的时候,就不用那么麻烦的一条一条的去建立啦
配置文档
R1
!
ipv6 unicast-routing
!
interface Loopback1
ipv6 address 2000:1:1::1/64
ospfv3 1 ipv6 area 0
!
interface Loopback2
ipv6 address 2000:1:2::1/64
ospfv3 1 ipv6 area 0
!
interface Loopback3
ipv6 address 2000:1:3::1/64
ospfv3 1 ipv6 area 0
!
interface Ethernet0/0
ipv6 address 2001:12::1/64
ospfv3 1 ipv6 area 0
!
router ospfv3 1
!
address-family ipv6 unicast
router-id 1.1.1.1
!
R2
ipv6 unicast-routing
!
interface Tunnel24
ipv6 address 2002:AC10:1702::2/64
tunnel source Ethernet0/1
tunnel mode ipv6ip 6to4
!
interface Ethernet0/0
no shutdown
ipv6 address 2001:12::2/64
ospfv3 1 ipv6 area 0
!
interface Ethernet0/1
no shutdown
ip address 172.16.23.2 255.255.255.0
!
router ospfv3 1
!
address-family ipv6 unicast
redistribute static
router-id 2.2.2.2
!
router ospf 110
router-id 2.2.2.2
network 172.16.23.0 0.0.0.255 area 0
!
ipv6 route 2000:5::/32 Tunnel24 2002:AC10:2204::4
R3
!
interface Ethernet0/0
no shutdown
ip address 172.16.23.3 255.255.255.0
!
interface Ethernet0/1
no shutdown
ip address 172.16.34.3 255.255.255.0
!
router ospf 110
router-id 3.3.3.3
network 172.16.0.0 0.0.255.255 area 0
!
R4
ipv6 unicast-routing
!
interface Tunnel24
ipv6 address 2002:AC10:2204::4/64
tunnel source Ethernet0/0
tunnel mode ipv6ip 6to4
!
interface Ethernet0/0
ip address 172.16.34.4 255.255.255.0
no shutdown
!
interface Ethernet0/1
no shutdown
ipv6 address 2001:45::4/64
ospfv3 1 ipv6 area 0
!
router ospfv3 1
!
address-family ipv6 unicast
redistribute static
router-id 4.4.4.4
!
router ospf 110
router-id 4.4.4.4
network 172.16.34.0 0.0.0.255 area 0
!
ipv6 route 2000:1::/32 Tunnel24 2002:AC10:1702::2
!
R5
!
ipv6 unicast-routing
!
interface Loopback1
ipv6 address 2000:5:1::1/64
ospfv3 1 ipv6 area 0
!
interface Loopback2
ipv6 address 2000:5:2::1/64
ospfv3 1 ipv6 area 0
!
interface Loopback3
ipv6 address 2000:5:3::1/64
ospfv3 1 ipv6 area 0
!
interface Ethernet0/0
no shutdown
ipv6 address 2001:45::5/64
ospfv3 1 ipv6 area 0
!
router ospfv3 1
!
address-family ipv6 unicast
router-id 5.5.5.5
!