quagga源码学习--BGP协议中的routemap

路由策略的基础知识

定义

   路由策略(Routing Policy)作用于路由,主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径。

目的

路由器在发布、接收和引入路由信息时,根据实际组网需要实施一些策略,以便对路由信息进行过滤和改变路由信息的属性,如:

  • 控制路由的发布

    只发布满足条件的路由信息。

  • 控制路由的接收

    只接收必要、合法的路由信息,以控制路由表的容量,提高网络的安全性。

  • 过滤和控制引入的路由

    一种路由协议在引入其它路由协议发现的路由信息丰富自己的路由知识时,只引入一部分满足条件的路由信息,并对所引入的路由信息的某些属性进行设置,以使其满足本协议的要求。

  • 设置特定路由的属性

    修改通过路由策略过滤的路由的属性,满足自身需要。

  • 配置FRR功能

    为通过路由策略过滤的路由设置备份下一跳和备份出接口,可以实现IP FRR、VPN FRR、IP与VPN混合FRR功能。

收益

路由策略具有以下价值:
  • 通过控制路由器的路由表规模,节约系统资源。
  • 通过控制路由的接收和发送,提高网络安全性。
  • 通过修改路由属性,对网络数据流量进行合理规划,提高网络性能。
  • 通过FRR功能,提高网络可靠性。

路由策略的核心内容是过滤器,通过使用过滤器,可以定义一组匹配规则下表给出各种过滤器的应用范围和匹配条件的对比。

 访问控制列表(ACL)

各动态路由协议

入接口、源或目的地址、协议类型、源或目的端口号

地址前缀列表(IP-Prefix List)

各动态路由协议

源地址、目的地址、下一跳

AS路径过滤器(AS-Path-Filter)

BGP协议

AS路径属性

团体属性过滤器(Community-Filter)

BGP协议

团体属性

扩展团体属性过滤器(Extcommunity-Filter)

VPN

扩展团体属性RT

RD属性过滤器(Route Distinguisher-Filter)

VPN

RD属性

Route-Policy

各动态路由协议

目的地址、下一跳、度量值、接口信息、路由类型、ACL、地址前缀列表、AS路径过滤器、团体属性过滤器、扩展团体属性过滤器和RD属性过滤器等。

quagga在bgp协议中也应用了路由策略。

比如在bgp_update_rsclient中:

 1 /* Apply export policy. */
 2     if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT) &&
 3         bgp_export_modifier(rsclient, peer, p, &new_attr, afi, safi) == RMAP_DENY) {
 4         reason = "export-policy;";
 5         goto filtered;
 6     }
 7 
 8     attr_new2 = bgp_attr_intern(&new_attr);
 9 
10     /* Apply import policy. */
11     if (bgp_import_modifier(rsclient, peer, p, &new_attr, afi, safi) == RMAP_DENY) {
12         bgp_attr_unintern(&attr_new2);
13 
14         reason = "import-policy;";
15         goto filtered;
16     }

如果匹配了过滤器:

 1 filtered:
 2 
 3     /* This BGP update is filtered.  Log the reason then update BGP entry.  */
 4     if (BGP_DEBUG(update, UPDATE_IN))
 5         zlog(peer->log, LOG_DEBUG,
 6              "%s rcvd UPDATE about %s/%d -- DENIED for RS-client %s due to: %s",
 7              peer->host,
 8              inet_ntop(p->family, &p->u.prefix, buf, SU_ADDRSTRLEN),
 9              p->prefixlen, rsclient->host, reason);
10 
11     if (ri)
12         bgp_rib_remove(rn, ri, peer, afi, safi);
13 
14     bgp_unlock_node(rn);
原文地址:https://www.cnblogs.com/danxi/p/6393262.html