我们以实验的方式直观的看一下OSPF在MGRE中的建邻。
首先介绍一下接口网络类型。
MGRE嘴上形容是P2MP,但实际上还是P2P,在P2P网络中建邻,不需要DR/BDR选举,但是在这里我们就会有疑问,R1和R3/4/5,都分别使用了P2P,那么R1会和谁建立邻居?全建立邻居还是只和一个建立?如果只和一个建立邻居,想要R1实现邻居全学习到,需要进行怎样的设置?
我们先搭建一下基础网络
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24
[R1]int l0
[R1-LoopBack0]ip add 1.1.1.1 32[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 12.0.0.2 24
[R2-GigabitEthernet0/0/0]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 32.0.0.2 24
[R2-GigabitEthernet0/0/1]int g0/0/2
[R2-GigabitEthernet0/0/2]ip add 42.0.0.2 24
[R2-GigabitEthernet0/0/2]int g4/0/0
[R2-GigabitEthernet4/0/0]ip add 52.0.0.2 24[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]ip add 32.0.0.1 24
[R3]int l0
[R3-LoopBack0]ip add 3.3.3.3 32[R4]int g0/0/0
[R4-GigabitEthernet0/0/0]ip add 42.0.0.1 24
[R4]int l0
[R4-LoopBack0]ip add 4.4.4.4 32[R5]int g0/0/0
[R5-GigabitEthernet0/0/0]ip add 52.0.0.1 24
[R5]int l0
[R5-LoopBack0]ip add 5.5.5.5 24[R1]int t0/0/0
[R1-Tunnel0/0/0]ip add 10.0.0.1 24
[R1-Tunnel0/0/0]tunnel-protocol gre p2mp
[R1-Tunnel0/0/0]source 12.0.0.1
[R1-Tunnel0/0/0]nhrp entry multicast dynamic [R3]int t0/0/0
[R3-Tunnel0/0/0]ip add 10.0.0.2 24
[R3-Tunnel0/0/0]tunnel-protocol gre p2mp
[R3-Tunnel0/0/0]source g0/0/0
[R3-Tunnel0/0/0]nhrp entry 10.0.0.1 12.0.0.1 re[R4]int t0/0/0
[R4-Tunnel0/0/0]ip add 10.0.0.3 24
[R4-Tunnel0/0/0]tunnel-protocol gre p2mp
[R4-Tunnel0/0/0]source g0/0/0
[R4-Tunnel0/0/0]nhrp entry 10.0.0.1 12.0.0.1 re[R5]int t0/0/0
[R5-Tunnel0/0/0]ip add 10.0.0.4 24
[R5-Tunnel0/0/0]tunnel-protocol gre p2mp
[R5-Tunnel0/0/0]source g0/0/0
[R5-Tunnel0/0/0]nhrp entry 10.0.0.1 12.0.0.1 re
首先在这里我没有配置静态路由,物理链路不同,R1中nhrp映射表应该仅有1个。
我们配置一下静态路由查看现象。
[R1]ip route-static 0.0.0.0 0 12.0.0.2[R3]ip route-static 0.0.0.0 0 32.0.0.2[R4]ip route-static 0.0.0.0 0 42.0.0.2[R5]ip route-static 0.0.0.0 0 52.0.0.2
在静态配置完后,我们立刻查看一下nhrp映射表
仅有两个邻居,为什么仅有R5出现在映射表
我们等待一段时间再刷一下
现在有3个了;
原因:nhrp的映射报文在注册时就开始发送,但是因为物理链路不同,将会导致报文不可达,达到一定次数后,停止发送,检测物理链路,链路可达后,才继续发送报文。所以映射表个数不同。
OSPF配置
[R1]ospf 1 rou 1.1.1.1
[R1-ospf-1]a 0
[R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0]network 10.0.0.1 0.0.0.0[R3]ospf 1 rou 3.3.3.3
[R3-ospf-1]a 0
[R3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0]network 10.0.0.2 0.0.0.0[R4]ospf 1 rou 4.4.4.4
[R4-ospf-1]a 0
[R4-ospf-1-area-0.0.0.0]network 4.4.4.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0]network 10.0.0.3 0.0.0.0[R5]ospf 1 rou 5.5.5.5
[R5-ospf-1]a 0
[R5-ospf-1-area-0.0.0.0]network 5.5.5.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0]network 10.0.0.4 0.0.0.0
查看一下R1邻居表
仅有一个邻居,且显示为full
查看隧道接口
MGRE的Type为P2P
回答我们之前的问题,很明显R1只想和R4建立,建立成功。但是R3/R5也想和它建邻,但是点到点,仅允许建立一个邻居
解决方案:
1、修改接口类型为broadcast
如果我们仅仅去更改R1接口类型。
[R1-Tunnel0/0/0]ospf network-type broadcast
三个邻居全部建立
但是没有DR/BDR的选举
很明显,仅改变一个不够
[R3]int t0/0/0
[R3-Tunnel0/0/0]ospf network-type broadcast [R4]int t0/0/0
[R4-Tunnel0/0/0]ospf network-type broadcast [R5]int t0/0/0
[R5-Tunnel0/0/0]ospf network-type broadcast
再次查看:
我们可以看到,R1认为其他3个都是DR,自己是BDR,明显认知存在问题
这里就需要我们手动来选举DR,选举中心站点为DR,节点放弃选举
[R3]int t0/0/0
[R3-Tunnel0/0/0]ospf dr-priority 0[R4]int t0/0/0
[R4-Tunnel0/0/0]ospf dr-priority 0[R5]int t0/0/0
[R5-Tunnel0/0/0]ospf dr-priority 0
此时的认知才相同。
2、修改接口类型为P2MP
目前,R1只和R3建邻。
[R1-Tunnel0/0/0]ospf network-type p2mp[R3-Tunnel0/0/0]ospf network-type p2mp[R4-Tunnel0/0/0]ospf network-type p2mp[R5-Tunnel0/0/0]ospf network-type p2mp
点到多点不需要DR/BDR选举,
Type为P2MP,和broadcast的区别在hello时间过大,我们可以适当修改
[R1-Tunnel0/0/0]ospf timer hello 10[R3-Tunnel0/0/0]ospf timer hello 10[R4-Tunnel0/0/0]ospf timer hello 10[R5-Tunnel0/0/0]ospf timer hello 10