继续分析CE双上联情况下的路由控制。
其实前面文章描述的仅仅是最为基本的网络结构,网络通常会更为复杂。下图所示为前面网络的拓展,此时增加了一个新的城域节点(CE-2)。由于信道等原因,在网络设计上,规划PE-1是CE-1的优选出入口,PE-2是CE-2的优选出入口。
但这时我们会面临一个主要的矛盾问题,就是CE-1与CE-2之间的互访,是否需要遵守网络拓扑所示的规则?
假设我们仍以拓扑上所示的规则来约束互访流量,就会是如下情况:以CE-1去往CE-2的流量为例,有两条必经路径,分别是CE-1至PE-1、PE-2至CE-2。也就是,当去往CE-2的流量到达PE-1后,PE-1如何在iBGP路由和OSPF路由之间做出选择?
为了分析方便,再次假定在前面步骤中,已经对全网所有网络设备的路由协议优先级进行了调整,具体数值如下(只列出所需):
华为设备 |
思科设备 |
|
直连路由 |
0 |
0 |
OSPF路由 |
10 |
10 |
OSPF external路由 |
150 |
150 |
iBGP路由 |
30 |
30 |
参照前面文章,按照第二种方式进行其他配置,具体参数不再赘述。
以PE-1为例,关于CE-2的路由信息,有两个来源,分别是来自于PE-2的iBGP路由、来自CE-2的OSPF路由。
对比前面列出的路由协议优先级,我们发现对于相同长度的前缀信息,OSPF优于iBGP。也就是当流量到达PE-1后,会直接通过与CE-2的直连链路转发,出现CE-1=>CE-2流量路径:CE-1---PE-1---CE-2,返程路径会是CE-2---PE-2---CE-1。这显然与前面的规划设计不一致,怎么办?下面开始尝试一些解决方法。
①调整全局OSPF路由协议优先级,使iBGP优先级优于OSPF
这通常会是第一反应,既然我们想让流量优先走大网,那把大网来的路由信息优先级调高不就行了?按照这种思路,假设协议优先级设置如下表:
华为设备 |
思科设备 |
|
OSPF路由 |
40 |
40 |
OSPF external路由 |
150 |
150 |
iBGP路由 |
30 |
30 |
先来看PE-1上关于CE-2的路由选择问题。由于iBGP优先级高于OSPF,因此PE-1选择PE-2为去往CE-2的下一跳。这个问题看起来得到了解决。
但细心观察,我们会发现,PE-1获取CE-1路由信息也可能有两个来源,分别是来自PE-2的iBGP,以及来自CE-1的OSPF,如下图所示:
此时,由于优先级的调整,PE-1会认为来自iBGP的路由信息更优先,因此会选择PE-2为去往CE-1的优选下一跳。
这不是和刚刚的分析矛盾了吗?为什么在PE-1上,对于CE-2的路由选择与既定规则一致,反倒是对于CE-1的选择出现了偏差?大家可以想一想为什么会有如此的现象发生,会是前面章节所说的先富抑制后富吗?
我在这一个分析中,其实是故意做了错误的引导。
将CE-1的路由信息引入iBGP,不仅仅是PE-2在做,PE-1其实也在做。也就是说,在iBGP中,关于CE-1和CE-2均会有两个来源,分别是PE-1和PE-2。我们只需要根据规则,使得来自于PE-1的关于CE-1的路由信息优先级更高即可。下图列出了基本的判断和传递过程,因为比较简单,因此不展开介绍。
这里只做一点基本的提示,通常情况下将OSPF路由引入iBGP中,有两种具体做法:一是直接在BGP进程下重分布OSPF;二是直接在BGP进程下采用network命令发布相关信息。
但在此时这种模式下,采用network命令可能会不成功。原因就留给大家去分析了。
②不调整全局OSPF路由协议优先级,仅使从备选路径上获取的OSPF路由信息优先级次于iBGP即可
这比较容易理解,对着今天的第二张图,基本都能看明白。
但是问题在于,对于OSPF路由协议,除了ABR,基本都没有办法针对特定的LSA内所含的路由信息进行调整或控制(原因也不是一句话就能说清的,感兴趣多的话,会试着写一写关于这方面的文字)。所以,这时需要在PE-1上启动两个OSPF进程,一个进程用于与CE-1的联接,一个用于CE-2,再针对具体进程调整优先级。
对于这种解决方法/模式,具体配置不会过于复杂,但就是理解起来容易有混淆,因此画了一张大概能说清楚基本过程的图。
【关键点】
1.两个OSPF进程之间,不需要进行重分布。对于网络设备而言,两个OSPF相互独立和隔离,代表两个不同的OSPF Domain,也会有两个独立的LSDB,当然也会有不同的Router-ID。
2.可以参考的路由协议优先级。
华为设备 |
思科设备 |
|
OSPF路由 (优选路径) |
10 |
10 |
OSPF路由 (次选路径) |
40 |
40 |
OSPF external路由 |
150 |
150 |
iBGP路由 |
30 |
30 |
看起来截止到这,问题已经得到了圆满解决。但实际上真的是如此吗?忽略掉其他无关的细节,同时通过①②③,给动作加上时序,如下图所示:
我们会发现,问题并没有得到结束。因为这里面又引入了BGP选路原则的内容。
熟悉BGP的应该都知道WLLA OMNI这些BGP选路所涉及到的属性。其中排第一个的就是W——weight,权重。这时思科的命名方式,华为做了改变(名字没记住),但基本的含义和作用是一致的。就是对于本地引入BGP的路由信息,权重=65535(or65536,有点困不想查了),但这一属性不可传递,即传递时为0。
相信到这里大家就明白了,只要是和图上的时序一致,PE-1的BGP进程绝对不会选取来自iBGP的路由为优选。这当然也是不可接受的。
看到这里,相信解决方法也就基本上有了。在采用重分布方式,将CE-2的OSPF路由引入BGP时,需要设置路由图/路由策略,将权重设置为0、LP(本地优先级设置为10,默认是100),就可以解决BGP的问题。
前面介绍的都是联接互联网的情况,假设CE-1和CE-2不再是需要联接互联网的城域节点,而是跨城市或省的某大型公司的两台设备,需要工作在VPN中,此时会发生什么样的变化呢?我觉得除了配置命令不同,基本是类似的。
【本节小结】
写这几篇文字,初衷还是来自于和同事在交流一个问题的思考。这个问题来自于对下列文字的解读。
当我们在BGP进程下,采用network+路由图的方式发布路由时,是否可以设置PA(路径属性)。
当时自己的回答是:通常不采用,但可以用,我自己用过。这也使得自己产生了将我怎么用的写出来的冲动。