Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

了解路由策略中的策略子例程匹配条件

您可以使用从另一路由策略中调用的路由策略作为匹配条件。此过程会将被称为策略设置为一个子例程

在某些方面,Junos OS 策略框架类似于编程语言。这一相似性包括将策略嵌套到策略子例程中的概念。软件程序中的子例程是定期参考的代码部分。策略子路由以相同的方式工作 — 您将现有策略引用为其他策略中的匹配标准。路由设备首先评估子例程,然后评估主要策略。对此子例程进行评估后,会对主策略返回 true 或 false 布尔值结果。由于您作为匹配条件引用该子例程,因此真正的结果意味着主策略具有匹配项,并且可以执行任何已配置的操作。但是,子例程的错误结果意味着主策略没有匹配项。

配置子例程

要在路由策略中配置要从其他路由策略调用的子例程,请创建该子例程并使用另一路由策略policyfromto语句中的匹配条件指定其名称。

注:

不要在内部评估路由策略。结果是没有任何前缀与路由策略匹配。

子例程中指定的操作用于为调用策略提供匹配条件。如果子例程指定 accept 操作,则呼叫策略将路由视为匹配。如果子例程指定拒绝操作,则呼叫策略将认为路由不匹配。如果子例程指定了旨在操纵路由特征的操作,则会做出更改。

子例程中的终止操作可能导致的后果

具有特定语句的子例程的行为可以与包含相同语句的路由策略不同。使用子例程时,您必须记住由子例程或默认策略指定的 accept 或拒绝的可能终止操作可能会显著影响预期结果。

特别是,如果在子例程中指定的路由未发生匹配,并且所执行的默认策略操作是您预期和所需的操作,则必须考虑发生的情况。

例如,假设您是向客户 A 提供服务的互联网服务提供商(ISP)的网络管理员。您已为客户在各种链路上提供的不同相邻类别配置了多个路由策略。为了节省时间来维护客户 A 的路由策略,您已配置一个标识其路由的子例程和调用该子例程的各种路由策略,如下所示:

此配置会出现以下结果:

  • 当向邻里 export 10.1.1.1 和 10.1.2.1 发布所有 BGP 路由时,组级别语句将度量值重置为 500,而非仅与子路由路由过滤器匹配的路由。

  • 当向邻接方 export 10.1.3.1 和 10.1.4.1 广告所有 BGP 路由时,邻接方级别语句将度量值重置为 100 和 200,而非仅与子路由过滤器匹配的 BGP 路由。

发生这些意外结果的原因是,子例程策略没有为不匹配路由过滤器的路由指定终止操作,因此采用了接受所有 BGP 路由的默认 BGP 导出策略。

如果此特定子路由中包含的语句已包含在呼叫策略本身中,则只有所需路由将重置其指标。

此示例说明了路由策略与子例程之间的差异,以及子例程中终止操作的重要性。此处,不小心考虑了该子例程的默认 BGP 导出策略操作。此特定示例的解决方案是向子例程添加一个更多的术语,拒绝所有其他不匹配路由过滤器的路由:

常规子例程的终止操作策略包括:

  • 取决于处理所有其他路由的默认策略操作。

  • 添加接受所有其他路由的术语。

  • 添加拒绝所有其他路由的术语。

您选择的选项取决于您希望通过子例程实现的目标。仔细规划您的子例程。