双点双向路由引入导致的次优路径和环路问题
拓扑图
实验目的
R1和R3上均存在一个loopback地址100.1.1.1/32和200.1.1.1/32,使用路由引入使两侧路由互通,同时R5上存在两个loopback地址,要求只引入loopback 1的地址。
对于OSPF引入外部路由后,出现的==次优路径和环路问题==进行解决。
OSPF的外部路由引入到ISIS后,==由于OSPF的外部路由优先级大于ISIS外部路由优先级==,导致在设计了路由冗余的另一点存在路由回馈现象。
在双点双向环境中,主要解决的主要问题就是
1、路由回馈问题(导致路由环路)
2、次优路径问题
解决问题的思路
1.修改ospf的优先级(存在问题,不能使用)——(如果将ospf的外部优先级修改的比isis的低,将会导致isis端的路由回馈现象)
2.路由过滤办法(不是最优解,但每添加一条外部路由,就需要重新配置。对于运维的成本增加)
3.路由打上tag,使用route-policy来变换路由的优先级。从而避免次优路径和环路问题。
必须知道的知识点
1、OSPF和ISIS路由协议优先级分别是什么
OSPF: 10 150
ISIS: 15 15
2、加表原则
当一台路由器通过不同路由协议学到了相同目的网段时,比较优先级,优先级数值小的会被优选加表
3、路由引入
import-route static:将路由表中的静态路由引入进OSPF
4、常用的路由策略
filter-policy
import-route
route-policy
实验步骤
1.实现AR1和AR3之间互通
R1
#
sysname R1
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 14.1.1.1 255.255.255.0
#
interface GigabitEthernet0/0/2
ip address 15.1.1.1 255.255.255.0
#
interface LoopBack0
ip address 100.1.1.1 255.255.255.255
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 12.1.1.1 0.0.0.0
network 14.1.1.1 0.0.0.0
network 100.1.1.1 0.0.0.0
#
R2
#
sysname R2
#
isis 1
is-level level-2
network-entity 49.0001.0000.0000.0002.00
import-route ospf 1
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 23.1.1.2 255.255.255.0
isis enable 1
#
ospf 1 router-id 2.2.2.2
import-route isis 1
area 0.0.0.0
network 12.1.1.2 0.0.0.0
#
R3
#
sysname R3
#
isis 1
is-level level-2
network-entity 49.0001.0000.0000.0003.00
#
interface GigabitEthernet0/0/0
ip address 23.1.1.3 255.255.255.0
isis enable 1
#
interface GigabitEthernet0/0/1
ip address 34.1.1.3 255.255.255.0
isis enable 1
#
interface LoopBack0
ip address 200.1.1.1 255.255.255.255
isis enable 1
#
R4
#
sysname R4
#
isis 1
is-level level-2
network-entity 49.0001.0000.0000.0004.00
import-route ospf 1
#
interface GigabitEthernet0/0/0
ip address 14.1.1.4 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 34.1.1.4 255.255.255.0
isis enable 1
#
ospf 1 router-id 4.4.4.4
import-route isis 1
area 0.0.0.0
network 14.1.1.4 0.0.0.0
#
从100.1.1.1 ping 200.1.1.1,检查连通性。
[R1]ping -a 100.1.1.1 200.1.1.1
PING 200.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 200.1.1.1: bytes=56 Sequence=1 ttl=254 time=30 ms
Reply from 200.1.1.1: bytes=56 Sequence=2 ttl=254 time=20 ms
Reply from 200.1.1.1: bytes=56 Sequence=3 ttl=254 time=20 ms
Reply from 200.1.1.1: bytes=56 Sequence=4 ttl=254 time=40 ms
Reply from 200.1.1.1: bytes=56 Sequence=5 ttl=254 time=40 ms
--- 200.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 20/30/40 ms
2.到了这一步双点双向的路由引入就完成了,我们可以在R1上查看路由表。可以看到R1去往200.1.1.1有两条路由。
[R1]dis ip routing-table 200.1.1.1
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
200.1.1.1/32 O_ASE 150 1 D 14.1.1.4 GigabitEthernet
0/0/1
O_ASE 150 1 D 12.1.1.2 GigabitEthernet
0/0/0
3.现阶段的双点双向的路由引入没有任何问题,但是当在ospf端再添加一个R5的路由,且R5上的loopback0被引入ospf域内,而loopback1不被引入ospf。
R5
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sys R5
[R5]int g0/0/0
[R5-GigabitEthernet0/0/0]ip add 15.1.1.5 24
[R5-GigabitEthernet0/0/0]q
[R5]un in en
[R5]ospf 1 router-id 5.5.5.5
[R5-ospf-1]area 0
[R5-ospf-1-area-0.0.0.0]net 15.1.1.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0]q
[R5-ospf-1]q
[R5]int loopback 0
[R5-LoopBack0]ip add 192.168.1.1 32
[R5-LoopBack0]int loopback 1
[R5-LoopBack1]ip add 192.168.2.2 32
[R5-LoopBack1]q
[R5]ip ip-prefix lp0 permit 192.168.1.1 32 less-equal 32 #配置前缀列表匹配loopback 0
[R5]route-policy lp0 permit node 10 #route-policy过滤lp0
[R5-route-policy]if-match ip-prefix lp0
[R5-route-policy]q
[R5]ospf
[R5-ospf-1]import-route direct route-policy lp0 #在ospf域内引入/这里会产生后续需解决的问题,这里只是先引入。
4.在R1上使用dis ospf lsdb查看,只有192.168.1.1,没有192.168.2.2。但是可以看见有两条去往192.168.1.1的路由
明明只从R5引入了192.168.1.1,可为什么会存在一条由2.2.2.2产生的路由呢?出现这样的情况又是由什么造成的呢?
究其原因,其实是因为在R1接收到来自R5的LSA后,将带有192.168.1.1这一路由信息的LSA泛洪给了R2、R4,R4比R2计算可能快了那么0.0001秒,导致==R4率先加表==了192.168.1.1的路由。同时R4又将ospf引入到isis内。这样ISIS内的路由器也学到了192.168.1.1的路由,最后又传递到R2。
而R2在从OSPF和ISIS中都学到了去往192.168.1.1的路由,但是isis的优先级15远小于ospf的外部优先级150,优先级更高(优先级越小越优)。故在R2上又将isis中的192.168.1.1的路由引入到了ospf中。这样在R1上就存在了两个去往192.168.1.1的路由。这一问题叫做路由回馈,将会导致环路或次优路径问题。
解决办法
方法一(路由过滤)
产生上述问题的根本原因是isis的外部路由优先级高于ospf,从而加表成功。
在ISIS上配置路由过滤,阻止从ISIS来的192.168.1.1的路由加表。只要无法加表,那么就不会被引入到ospf。
R2
[R2]ip ip-prefix 192.168.1.1 deny 192.168.1.1 32
[R2]ip ip-prefix 192.168.1.1 permit 0.0.0.0 0 le 32
[R2]isis 1
[R2-isis-1]filter-policy ip-prefix 192.168.1.1 import #在isis上使用filter-policy,拒绝192.168.1.1的路由加表。
R4
[R4]ip ip-prefix 192.168.1.1 deny 192.168.1.1 32
[R4]ip ip-prefix 192.168.1.1 permit 0.0.0.0 0 le 32
[R4]isis 1
[R4-isis-1]filter-policy ip-prefix 192.168.1.1 import
这样就解决了问题。但是这种解决办法不是最优解,如果存在n条外部路由时,运维难度增大。同时对于R2和R4上的路由没有冗余。
当R1和R2的线路断了时,连接在R2的其他设备将无法访问192.168.1.1.因为isis无法加表,从而引入ospf,R2上没有去往192.168.1.1的路由。
方法二(打上TAG,再过滤)——最优解
在R2上如果出现回馈现象,分哪几个步骤
1、R2在ISIS方向学习到了外部路由,并且加表了
2、R2在OSPF进程中引入了ISIS路由
在方法一中我们是采用了拒绝R2加表192.168.1.1的路由,从而路由无法引入ospf。但这样就会存在上面讲到的线路故障导致R2上没有去往192.168.1.1的路由问题。
而现在的解决方法就是要让R2在isis上的外部路由可以加表,又不可以让其引入ospf。
==问题(修改优先级)==
到这里有人可能会想为什么不将ospf的外部优先级修改为14,这样传递到isis的外部路由就无法回馈到ospf了。但是修改优先级的这一方法实际上是有问题的,因为他将会发生如下的情况:
当我们使用修改优先级的方法(进入OSPF 1,pre ase 14),将OSPF的外部路由优先级修改为14时。R3在ISIS中发送200.1.1.1/32的路由信息,R2将其引入到OSPF中,然后这条路由会在OSPF中以5类LSA开始泛洪,随着上图的箭头方向传达R4。R4可以同时从OSPF和ISIS中学到200.1.1.1/32的路由,而因为我们将OSPF的外部路由改为了14,这样就导致了R4在转发目的地在为200.1.1.1的数据包时会优先选择R1而不是实际上的最优路径R3.反之亦然。
解决办法:
1、在R2上,允许ISIS加表,但是对于加了表的路由条目,在引入OSPF时进行过滤,考虑使用import-route isis route-policy过滤
2、在R2上针对外部路由修改优先级
3.在R5上引入lp0的ip时,配置ip-prefix将其打上tag500的标签,在使用import-route ospf route-policy来引入isis。
R5:
ip ip-prefix lo0 index 10 permit 192.168.1.1 32
route-policy import permit node 10
if-match ip-prefix lo0
apply tag 500
ospf 1
import-route driect route-policy import
现在使用display ospf lsdb ase 192.168.1.1的时候就可以看见如下图所示,路由器5在产生这一条5类LSA的时候,其tag已经变成了500.
同时在R2和R4上查看该条路由其tag同样为500.
4.现在在R2上创建一个名字为PRE的route-policy,使用prefix去匹配tag 500的路由
R2|R4
route-policy PRE permit node 10
if-match tag 500
apply preference 10
ospf 1
preference ase route-policy PRE 150
==preference ase route-policy PRE 150==
这句的意思是在R2和R4上的ospf外部路由在修改优先级时会先匹配PRE的route-policy,如果匹配上了就会将优先级改为10,如果匹配不上就还是ospf默认的150外部优先级。(就是从192.168.1.1在R2上优先级会变成10,其他路由优先级还是150)。
这样就解决了上面的次优路劲的问题(==问题——修改优先级==),接下来只要处理路由回馈问题就可以。
5.在R2和R4上配置route-policy,具体情况请参照下表
顺时针方向 |
---|
R2: |
ospf——>isis deny tag 200 |
ospf——>isis permit tag 100 |
R4: |
isis——>ospf deny tag 100 |
isis——>ospf permit tag 200 |
逆时针方向 |
---|
R2: |
isis——>ospf deny tag 400 |
isis——>ospf permit tag 300 |
R4: |
ospf——>isis deny tag 300 |
ospf——>isis permit tag 400 |
R2(顺时针):
route-pilicy oti deny node 10
if-match tag 200
route-policy oti permit node 20
apply tag 100
isis 1
import-route ospf 1 route-policy oti
R4(顺时针):
route-policy ito deny node 10
if-match tag 100
route-policy ito permit node 20
apply tag 200
ospf 1
import-route isis 1 route-policy ito
R2(逆时针):
route-pilicy ito deny node 10
if-match tag 400
route-policy ito permit node 20
apply tag 300
ospf 1
import-route isis 1 route-policy ito
R4(逆时针):
route-pilicy oti deny node 10
if-match tag 300
route-policy oti permit node 20
apply tag 400
isis 1
import-route ospf 1 route-policy oti