上期问题:BGP路由经常数以万计,如果有大量不同但是又非常相似的团队属性需要实施同样的路由策略(比如:需要对携带团队属性“100:1200:1300:1400:1500:1…”的路由实施相同的策略),该如何简化配置呢?

参照我们上回所说,如果需要对携带团队属性“100:1200:1300:1400:1500:1…”的路由实施相同的策略,我们必须配置多条团队属性过滤器:

ip community-filter 1 permit 100:1

ip community-filter 2 permit 200:1

ip community-filter 3 permit 300:1

ip community-filter 4 permit 400:1

ip community-filter 5 permit 500:1

这样不免非常麻烦,这时我们可以用到高级团队属性过滤器。高级团队属性过滤器作用和普通团队属性过滤器一致,不同点就在于其过滤器的编号为100~199。高级团队属性过滤器可以使用正则表达式来制定团体,这一点在使用AA:NN格式的团队属性时非常有用。

如上面这个例子,如果我们使用高级团队属性过滤器,则只需要配置一条命令即可:

ip community-filter 101 permit .*:1

关于正则表达式,这里不多做介绍。在使用路由策略,尤其是使用AS_PATH和团队属性时,正则表达式是一个非常有用的工具,可以极大的降低我们的配置工作量,有兴趣得小伙伴可以查找相关资料了解。

 

交换机一行人路上稍遇拖延,赶到网络武林大会之时,各大门派都已然到了。交换机忙入场落座,环顾四周,中间一席,坐的正是那武林盟主IP长老。见参会者已到齐,IP长老起身,对着场下众人摆摆手,道:“承蒙诸位赶来参会,老朽感激不尽,诸位匆匆赶来,想必还未曾互相认识,老朽忝居主位,就为大家介绍一下。这位便是×××掌门虚通长老。”说罢,一老者站起来向众人致意,旁边站着一明艳少女。

交换机定睛望去,不由吃了一惊,这正是那日在路上设阵相阻的老者,未想到竟是这×××一派之长。霎时间心头涌起了一阵自得之意,手心中微微出汗。×××享誉江湖,自己居然曾战胜过×××门下阵法,实是意外之喜。但见那虚通长老身旁的少女甚是眼熟,好似在哪里见过,却一时想不起来。

正想间,IP长老已介绍完场上众人,继续说道:“这次邀诸位前来,实是有一事困扰江湖日久,想借诸位之智,看有无妙方可解。江湖上门派日多,路由表规模已10万计,如此庞大的路由,管理之难,已日益严重,虽有BGP神功调配,也渐渐难以支撑,不知各位可有解决之道。”

路由问题,自首先由路由门下解决。众人的目光一下投向交换机。交换机思考半晌,说道:“路由管理之难,其中一要因在于地址分配混乱,路由随意发布。若以规范,使路由先聚合,而后发布,必可降低路由表大小,缓解路由管理之难。”

 

 题外话:由于BGP中自动聚合限制非常多,实际效果非常不理想,所以绝大部分情况下,我们会采用手动聚合的方式。手动聚合有两种方式,下面就给小伙伴们介绍一下:

一:利用静态路由进行聚合

这种方式是先在路由表中为聚合地址创建静态表项,之后再利用network命令宣告该聚合地址,如下面这个例子:

 如图,AS100中有192.168.1.0/24192.168.2.0/24192.168.3.0/24192.168.4.0/24四个内部网络,现在要将4个内部网络的路由聚合成一条192.168.0.0/16这条路由。

R1的关键配置:

#

bgp 100

 peer 11.1.1.2 as-number 200

 #

 ipv4-family unicast

  undo synchronization

  network 192.168.0.0 255.255.0.0  /将聚合路由发布到BGP

  peer 11.1.1.2 enable

#

ip route-static 192.168.0.0 255.255.0.0 NULL0  /配置一条指向NULL0的静态聚合路由

#

由于聚合路由本身并不是合法的终端目的地址,因而静态路由指向Null接口,该路由在R1的路由表中仅代表一条精确路由。如果数据包的目的地址属于AS100C类地址,那么AS100的外部路由器将撇配该聚合路由并转发给R1,到了路由器R1之后,数据包将被匹配到更精确的地址,并被转发到正确的内部下一跳路由器。如果因某种导致更精确的C类地址不在R1路由表中的话,将把该数据包转发到Null接口并予以丢弃。我们查看R2BGP路由表:

R2的路由表中只有一条聚合路由,其他明细路由均未进入R2的路由表。

 

二:通过aggregate命令手动聚合路由,并抑制明细路由

在上面这种简单的场景下,通过静态路由进行聚合的方式已经足够了,但是对于拓扑结构或者路由策略稍微复杂一些的情况,通过静态路由进行聚合的方式不建议被使用,我们可以使用aggregate命令进行手动聚合。下面我们具体说明下aggregate命令极其参数的作用。

先在上面那个简单的例子中使用aggregate命令。

R1的关键配置:
#

bgp 100

 peer 11.1.1.2 as-number 200

 #

 ipv4-family unicast

  undo synchronization

  aggregate 192.168.0.0 255.255.0.0 detail-suppressed

  network 192.168.1.0

  network 192.168.2.0

  network 192.168.3.0

  network 192.168.4.0

  peer 11.1.1.2 enable

#

想要宣告由aggregate命令指定的聚合路由,必须通过重分布或者network命令使至少一个更精确的地址进入BGP路由表。这里我们查看R1R2BGP路由表:

 

可以看到,R1BGP路由表中包含了所有精确路由,而R2的路由表中只有一条聚合路由,这是因为我们在aggregate命令中配置了detail-suppressed参数,使R1只会将聚合路由发送给R2。而R1BGP路由表中,明细路由前面都有“s”的标志,代表这些路由已经被抑制。

 

三:同时发送聚合路由和明细路由

对于像上面这种简单拓扑来说,确实不需要同时宣告聚合路由和明细路由。我们再看一下下面这个例子:

 如图,AS100多归属到AS200AS200需要从AS100接受全部路由以设置路由策略,但AS200仅能向AS300发送聚合路由。这个场景下,AS100就需要将全部路由发送给AS200

这里一种简单的解决方式是利用我们上一回中所说的团队属性。让AS100发送给AS200的明细路由携带NO_EXPORT团队属性。配置以R1为例

R1的关键配置:

#

bgp 100

 peer 11.1.1.2 as-number 200

 #

 ipv4-family unicast

  undo synchronization

  aggregate 192.168.0.0 255.255.0.0  /路由聚合为192.168.0.0/16,并且不抑制明细路由

  network 192.168.1.0

  network 192.168.2.0

  network 192.168.3.0

  network 192.168.4.0

  peer 11.1.1.2 enable

  peer 11.1.1.2 route-policy COMMUNITY export  /R2出方向使用路由策略COMMUNITY

  peer 11.1.1.2 advertise-community  /R2发送携带团队属性的路由

#

route-policy COMMUNITY permit node 5  /配置路由策略COMMUNITY,对匹配前缀列表AGGREGATE的路由不设置团队属性

 if-match ip-prefix AGGREGATE  

 apply community none

#

route-policy COMMUNITY permit node 10  /未匹配上一个节点的路由,为其打上团队属性NO_EXPORT,这样就实现了仅对明细路由打上NO_EXPORT属性

 apply community no-export

#

ip ip-prefix AGGREGATE index 10 permit 192.168.0.0 16  /配置前缀列表AGGREGATE仅匹配192.168.0.0/16

#

我们通过命令display bgp routing-table 192.168.0.0查看R2上聚合路由的详细信息:

可以看到,该路由已被并标明是一条聚合路由,并且在AS100进行聚合,始发路由器的ROUTER ID11.1.1.1。该路由并未携带任何团队属性。我们再查看R5BGP路由表:

R5上只存在聚合路由,明细路由由于携带NO_EXPORT团队属性,并未发送给R5