实验拓扑
- R1-R3-R2之间的网络为IPv4环境
- PC1及PC2处于IPv6孤岛
实验需求
- R1及R2为IPv6/IPv4双栈设备
- 在R1及R2上部署GRE隧道使得PC1及PC2能够互相访问(先采用IPv6静态路由实现互通)
- R1及R2基于建立好的GRE隧道运行OSPFv3交互IPv6路由前缀
实验步骤及配置
R3的配置如下
[R3] interface GigabitEthernet0/0/0
[R3-GigabitEthernet0/0/0] ip address 10.1.1.2 24
[R3] interface GigabitEthernet0/0/1
[R3-GigabitEthernet0/0/1] ip address 10.2.2.1 24
R1的配置如下:
#完成IPv4接口部分的配置:
[R1] interface GigabitEthernet0/0/0
[R1-GigabitEthernet0/0/0] ip address 10.1.1.1 24
[R1] ip route-static 0.0.0.0 0 10.1.1.2
#完成IPv6接口部分的配置:
[R1] ipv6
[R1] interface GigabitEthernet0/0/1
[R1-GigabitEthernet0/0/1] ipv6 enable
[R1-GigabitEthernet0/0/1] ipv6 address 2001:1111::FFFF 64
#开始配置GRE Tunnel:
[R1] Interface tunnel 0/0/0
[R1-Tunnel0/0/0] tunnel-protocol gre #隧道类型为GRE
[R1-Tunnel0/0/0] ipv6 enable
[R1-Tunnel0/0/0] source 10.1.1.1
[R1-Tunnel0/0/0] destination 10.2.2.2
[R1-Tunnel0/0/0] ipv6 address auto link-local #注意如果不为tunnel口配置全局单播地址则必须为接口配置linklocal地址,否则接口的ipv6协议状态为down,如果配置了全局单播地址则系统将自动配置linklocal地址,因此无需再配置这条命令。
[R1] Ipv6 route-static 2001:2222:: 64 tunnel 0/0/0
R2的配置如下:
#完成IPv4接口部分的配置:
[R2] interface GigabitEthernet0/0/0
[R2-GigabitEthernet0/0/0] ip address 10.2.2.2 24
[R2] ip route-static 0.0.0.0 0 10.2.2.1
#完成IPv6接口部分的配置
[R2] ipv6
[R2] interface GigabitEthernet0/0/1
[R2-GigabitEthernet0/0/1] ipv6 enable
[R2-GigabitEthernet0/0/1] ipv6 address 2001:2222::FFFF 64
#开始配置Tunnel:
[R2 Interface tunnel 0/0/0
[R2-Tunnel0/0/0] tunnel-protocol gre
[R2-Tunnel0/0/0] ipv6 enable
[R2-Tunnel0/0/0] source 10.2.2.2
[R2-Tunnel0/0/0] destination 10.1.1.1
[R2-Tunnel0/0/0] ipv6 address auto link-local
[R2] Ipv6 route-static 2001:1111:: 64 tunnel 0/0/0
完成配置后,首先查看一下R1的接口IPv6信息:
[R1] display ipv6 interface brief
*down: administratively down
(l): loopback
(s): spoofing
Interface Physical Protocol
GigabitEthernet0/0/1 up up
[IPv6 Address] 2001:1::FFFF
Tunnel0/0/0 up up
[IPv6 Address] FE80::A01:101
从上面的输出可以看到,隧道接口的物理和协议都要是UP的。从报文的层面看,PC1发出的IPv6报文到达R1后,R1在原有报文的基础上先增加了一个GRE的头部,再增加一个IPv4的隧道头部,以便数据包能够穿越IPv4网络到达隧道对端。
报文的实际交互过程如下:
在R1、R2的GRE隧道建立好后,为了使PC1与PC2能够通信,我们在R1及R2上配置了IPv6静态路由,例如在R1上配置了静态路由“Ipv6 route-static 2001:2222:: 64 tunnel 0/0/0”,如此一来当R1收到去往2001:2222::/64网络的数据包时,就会将数据包送到隧道进行转发。
然而静态路由是需要手工配置的,而且可扩展性较差。采用动态路由协议可以解决这些问题,但是R1-R3并非直连路由器,如何能够运行IPv6动态路由协议?
得益于R1-R2之间已经建立起来的GRE隧道,R1、R2相当于打通了一条承载在IPv4网络上的IPv6点到点“直连链路”,虽然这条链路是虚拟的。基于这条直连链路,R1、R2即可运行IPv6动态路由协议从而动态的交互路由信息。
现在,去掉R1、R2上配置的IPv6静态路由。然后在R1及R2上增补配置:
R1的增补的配置如下:
#创建OSPFv3进程,并分配OSPFv3 RouterID:
[R1] ospfv3 1
[R1-ospfv3-1] router-id 1.1.1.1
#在tunnel0/0/0口上激活OSPFv3,加入区域0:
[R1] interface Tunnel 0/0/0
[R1-Tunnel0/0/0] ospfv3 1 area 0
#在GE0/0/1口上激活OSPFv3,加入区域0:
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ospfv3 1 area 0
R2的增补的配置如下:
[R2] ospfv3 1
[R2-ospfv3-1] router-id 2.2.2.2
[R2] interface Tunnel 0/0/0
[R2-Tunnel0/0/0] ospfv3 1 area 0
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ospfv3 1 area 0
完成上述配置后,R1、R2即会通过GRE Tunnel发送OSPFv3 Hello试图发现邻居,随后建立OSPFv3邻居关系。
[R1] display ospfv3 peer
OSPFv3 Process (1)
OSPFv3 Area (0.0.0.0)
Neighbor ID Pri State Dead Time Interface Instance ID
2.2.2.2 1 Full/- 00:00:40 Tun0/0/0 0
邻居的状态已经Full了。
[R1] display ipv6 routing-table protocol ospf
Public Routing Table : OSPFv3
Summary Count : 2
OSPFv3 Routing Table's Status : < Active >
Summary Count : 1
Destination : 2001:2222:: PrefixLength : 64
NextHop : FE80::A02:202 Preference : 10
Cost : 1563 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : Tunnel0/0/0 Flags : D
R1已经学习到2001:2222::/64的路由,R2也学到了2001:1111::/64的路由,因此PC1及PC2能够互相ping通,通过抓包可以观察到OSPFv3在GRE隧道上的工作过程。实际上我们并未给Tunnel接口配置全局单播IPv6地址,这里R1及R2使用的是Tunnel接口的链路本地地址建立OSPFv3邻居关系。