一、概述
简单来说,双点双向路由引入是指两个或两个以上的AS边界设备运行有两个不同的路由进程,在AS边界设备上使一个路由进程与另一个路由进程互相引入,以实现互通、冗余的效果。
二、双点双向路由引入存在的问题
1.次优路径
主要原因是路由协议的优先级,当低优先级的路由被引入到高优先级路由中时就会产生次优路径,反之则没有。
常见路由协议的内外优先级:
路由协议 | 内部优先级 | 外部优先级 |
直连路由 | 0 | 0 |
静态路由 | 60 | 60 |
OSPF | 10 | 150 |
ISIS | 15 | 15 |
RIP | 100 | 100 |
BGP | 255 | 255 |
外部优先级:一般是通过import-route引入所生成的路由,即从其他路由协议学习到的路由所携带的优先级。
内部优先级:由本地路由协议生成的路由所携带的优先级,例如OSPF通过network宣告网段所产生的的路由。
说明:除直连路由外,其他路由的外部优先级都可以修改,但内部优先级都不支持修改。当去往同一目标网段的路由比较到优先级时,优先比较路由的外部优先级,相同则比较内部优先级。
2.路由回馈
次优路径的问题产生后,再次将路由引回时所导致的,举例来说就是从OSPF引入到ISIS的OSPF路由,再从ISIS引回OSPF。这种情况可能导致路由环路。
3.路由环路
发往目标节点的数据包在多台路由器之间来回转发,直到报文TTL值老化才会被丢弃。如果在某一时刻,当前网络中存在大量发往该目标节点的数据包时,可能导致网络瘫痪。
三、实验
1.实验说明
接口地址按照图中标注网段进行配置,地址为设备编号。AR1和AR6创建环回接口loopback 1,模拟其他网段。AR1和AR6上执行import-static direct引入直连路由也就是lo 1网段。
2.做双点双向路由引入
在AR3和AR4上分别将OSPF路由引入至ISIS,ISIS路由引入至OSPF。
查看路由表,我们只关注192.168.1.0/24和172.16.1.0/24这两条路由。
通过上述路由表,可以知道AR3访问这两个网段都是走的最优路径,未出现次优路径。AR4访问192.168.1.0/24网段就不是走的最优路径,下一跳指向AR5。
原因:AR1上引入了外部路由192.168.1.0/24,在OSPF中,引入的外部路由的优先级都为150,所以AR4上去往该网段的由OSPF生成的路由优先级为150。因为做了双点双向路由引入,这条路由从OSPF中引入到ISIS,又从ISIS引回OSPF,所以当AR4将这条路由添加进全局路由表时,选择优先级更高的ISIS加入全局路由表,而OSPF的就被抑制了。
在AR2的G0/0/2接口抓包,AR4 ping 192.168.1.1
很显然发生路由环路了,查看AR2上的路由表,发现去往192.168.1.0/24网段的路由有两条做负载分担,但是192.168.1.0/24的这条路由本身由OSPF产生,而下一跳为24.1.1.4的路由是被引回来的,产生路由回馈。这也就导致了次优路径的问题,而且只要报文匹配下一跳为24.1.1.4的路由时,就会环路。
OSPF存在两个路由协议优先级,内10,外150。前面有介绍在做双点双向时,只有低优先级路由引入高优先级路由中时才会产生这类问题。OSPF的内部路由(network宣告的网段)、ISIS路由不会产生这类问题。根本原因还是协议优先级,但是又无法避免会遇到一个低优先级和一个高优先级的路由场景。有什么方法解决呢?做路由策略。
四、解决方案
1.水平分割
1.1.对顺时针方向引入的路由做过滤
[R3]route-policy ospf_into_isis permit node 20
[R3-route-policy]apply tag 10 //将所有引入到ISIS的OSPF路由打上TAG 10的标签
[R4]route-policy isis_into_ospf deny node 10
[R4-route-policy]if-match tag 10 //拒绝将ISIS路由中标签为TAG 10的路由重新引回OSPF
[R4]route-policy isis_into_ospf permit node 20
[R4-route-policy]apply tag 20 //将原ISIS中的路由(不带TAG 10)引入OSPF中并打上TAG 20的标签。
[R3]route-policy ospf_into_isis deny node 10
[R3-route-policy]if-match tag 20 //拒绝将OSPF路由中标签为TAG 20的路由重新引回ISIS
[R3]isis
[R3]cost-style wide //将度量值风格改为宽度量值,否则ISIS不支持对路由打标签,全网运行ISIS协议的路由器都需要改。
[R3-isis-1]import-route ospf route-policy ospf_into_isis //在ISIS进程中引入OSPF并调用路由策略
[R4]ospf
[R4-ospf-1]import-route isis route-policy isis_into_ospf //在OSPF进程中引入ISIS并调用路由策略
1.2.对逆时针方向引入的路由做过滤
[R4]route-policy ospf_into_isis permit node 20
[R4-route-policy]apply tag 30 //对所有引入到ISIS的OSPF路由打上TAG 30的标签
[R3]route-policy isis_into_ospf deny node 10
[R3-route-policy]if-match tag 30 //拒绝将ISIS路由中标签为TAG 30的路由重新引回OSPF
[R3]route-policy isis_into_ospf permit node 20
[R3-route-policy]apply tag 40 //将原ISIS中的路由(不带TAG 30)引入OSPF中并打上TAG 40的标签。
[R4]route-policy ospf_into_isis deny node 10
[R4-route-policy]if-match tag 40 //拒绝将OSPF路由中标签为TAG 40的路由重新引回ISIS
[R4]isis
[R4]cost-style wide
[R4-isis-1]import-route ospf route-policy ospf_into_isis //在ISIS进程中引入OSPF
[R3]ospf
[R3-ospf-1]import-route isis route-policy isis_into_ospf //在OSPF进程中引入ISIS
说明:AR2路由表中原来那条引回来的路由表项(下一跳24.1.1.4)被成功过滤。
说明:通过路由策略过滤的方式实现水平分割的功能,解决了路由回馈的导致的环路问题,但次优路径还是存在。
2.调整OSPF外部路由优先级
[R3]route-policy ospf_ase permit node 10
[R3-route-policy]if-match tag 20
[R3-route-policy]apply preference 150 //将带有TAG 20的ISIS路由引入时优先级改为150
[R3-ospf-1]preference ase route-policy ospf_ase 10 //将OSPF内外优先级都设置为10,对于匹配路由策略的路由,优先级改为150
[R4]route-policy ospf_ase permit node 10
[R4-route-policy]if-match tag 40
[R4-route-policy]apply preference 150
[R4-ospf-1]preference ase route-policy ospf_ase 10
说明:如果只改OSPF的优先级,又会导致ISIS出现次优路径,通过上面方法,解决了OSPF外部路由次优路径以及引入的ISIS路由的次优路径问题。