在网络中会存在一些业务路由控制的需求,需要有路由的控制工具。 控制工具:route-policy。 可以应用在路由的发布、接收、引入。
ACL
访问控制列表(ACL)是一个匹配工具,能够对报文及路由进行匹配和区分。
ACL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。
ACL可以匹配路由、可以匹配流量。
ACL匹配路由时:只能针对路由的网络号(前缀)做匹配。默认是过滤所有。
::: warning
ACL末尾隐含的规则可以是允许或者拒绝,根据后续使用的执行工具ACL有默认的操作:
ACL匹配流量的信息,默认规则放行所有。
ACL匹配路由的信息,默认规则拒绝所有。
:::
::: danger
ACL是匹配工具,由执行工具操作,动作效果会叠加。
:::
通配符通常采用类似网络掩码的点分十进制形式表示,是一个32比特长度的数值,用于指示IP地址中哪些比特位需要严格匹配,哪些比特位无需匹配。
通配符对应位为0表示需要匹配,必须保持一致。
通配符对应位为1表示无需匹配,值可以任意。
::: tip ACL适用于种类条目或参数(端口、协议等)比较多的。 :::
IP-Prefix List:IP前缀列表
和ACL的区别是ACL只能匹配路由的网络号(前缀),IP-Prefix List还可以做网络掩码的匹配。
IP-Prefix List只能匹配路由,默认规则是过滤所有。
设置ACL匹配主机路由:
设置IP前缀列表匹配主机路由:
上图中命令表示:在1.1.1.0/24网段内,只匹配前缀为1.1.1.0,且掩码为32位的路由。
::: tip
IP前缀列表中的序号作用相当于ACL中的rule+序号,index后的节点数为1-4294967295。
index是默认规划,序号间隔为10,可以不加index参数。
:::
[AR1]ip ip-prefix test permit 192.168.1.2 24 设置允许通过的前缀列表
[AR1-isis-1]import-route isis level-2 into level-1 filter-policy ip-prefix test
::: warning 如果前缀列表不加上匹配掩码的范围,则和ACL匹配主机路由没有任何区别。 举例:
acl 2000
rule 5 permit source 192.168.1.0 0.0.0.0
rule 10 permit source 192.168.1.1 0.0.0.0
rule 15 permit source 192.168.1.0 0.0.0.255
rule 20 permit source 0.0.0.0 0
rule 25 permit source 0.0.0.0 255.255.255.255
等同于
ip ip-prefix host index 10 permit 192.168.1.0 24
ip ip-prefix host index 15 permit 192.168.1.1 32
ip ip-prefix host index 20 permit 192.168.1.0 24 less-equal 32
ip ip-prefix host index 25 permit 0.0.0.0 0
ip ip-prefix host index 30 permit 0.0.0.0 0 less-equal 32
:::
------------------------------------
### 路由策略工具:
**filter:通过匹配路由前缀,在发布、接收时过滤路由。**
**filter-policy:通过匹配路由前缀,在发布、接收时过滤路由,还可以通过携带的属性(优先级、开销、下一跳)进行匹配、修改、过滤。**
**route-policy:路由策略:由多个节点组成,每一个节点之间是“或”的关系,如果路由信息没有在第一个节点匹配,则向下进行第二个节点的匹配。每一个节点内都存在多个语句。**
- **条件语句,通过一些信息项的指定,符合指定信息项的路由被匹配:**

条件语句可以配置多个,并且多个条件语句之间是“与”的关系,即需要同时满足所有的条件语句。
如果匹配信息项是一样的,那么条件语句会相互替换(比如匹配路由时,acl和ip-prefix会相互替换)。
- **执行语句,为满足条件的路由,附加相关值:**

执行语句可以配置多个,并且多个执行语句之间是“与”的关系,即会同时执行所有的执行语句。
::: warning
**route-policy存在默认的节点,默认节点动作为deny。**

**route-policy的一个节点内如果不存在任何条件语句,则意思为匹配所有。**

:::
匹配工具(ACL、prefix-list)存在permit和deny的动作。
策略工具route-policy也存在permit和deny的动作。
**如果都为permit则放行,其他的组合都是拒绝。**
所有节点都没有被匹配的被默认规则过滤。
acl/prefix-list permit , route-policy permit 结果:在该节点允许通过,不需要向下匹配其他节点。
acl/prefix-list permit , route-policy deny 结果:在该节点拒绝通过,且不再向下匹配其他节点。
acl/prefix-list deny , route-policy permit 结果:在该节点拒绝通过,需要再向下匹配其他节点。
acl/prefix-list deny , route-policy deny 结果:在该节点拒绝通过,需要再向下匹配其他节点。
::: warning
**实际动作是路由和节点进行匹配,并调用节点中的ACL,匹配成功后直接通过,匹配不成功时,如果节点动作是允许,路由和下一个节点匹配。如果节点动作是拒绝,该路由就在这个节点被过滤,不会和下一个节点匹配。**
:::
------------------------------------
### 双点双向

背景:当存在多个网络需要融合,可以使用路由重发布来实现。如果存在多个边缘节点,会出现次优路径、路由回馈、路由环路等等问题。
#### 路由重发布:
如果OSPF、ISIS是默认的环境,那么在多点路由重发布时,不会存在任何问题。
因为OSPF本身存在内部优先级(10)和外部优先级(150),ISIS优先级为15。
**在OSPF本身已经存在外部路由的情况下,会存在问题:**
1. **次优路径:因为不同协议路由携带不同的优先级值,设备会优选优先级值低的路由加入路由表。**
如AR1引入静态,优先级150,通过AR2引入到ISIS,优先级15,AR3在来自AR1和来自AR4的路由之间选择优先级值小的(越小越优先),此时AR3访问静态路由时走AR3-AR4-AR2-AR1,形成次优路径。
AR2的ISIS视图中引入OSPF:

::: tip
**优先级高的区域向优先级值低的区域做引入,会形成次优路径。**
:::
2. **路由回馈:路由器优选优先级值低的路由加入路由表,并将该路由引入到优先级值高的协议。** 路由表中最优的路由可以执行重发布,即AR3收到的优先级值低的路由可以发给AR1,形成路由回馈。
AR3的OSPF视图中引入ISIS:

::: tip
**优先级低的区域向优先级值高的区域再次引入,会形成路由回馈。**
:::
3. **路由环路:当次优路径和路由回馈同时出现,且高优先级值协议区域的内部选路存在问题,就会引发路由环路。**
如AR1引入的静态是type2,AR3路由回馈时发给AR1的是type1(OSPF视图下执行import-router isis type 1),type1优于type2,由于路由环路,AR2的路由表中保留的是AR3发来的type1路由,如果AR2和AR3之间有连线时,接口宣告在OSPF中,AR2访问该静态路由会先找到AR3,AR3找到AR4,再到AR2,形成路由环路。
------------------------------------
问题解决:
1. **路由环路:不需要有明确的方法解决,只要解决次优路径或次优路径问题即可。**
2. **次优路径:通过更改路由优先级值来解决。** 如将引入ISIS的OSPF外部优先级改为小于ISIS再执行引入。
3. **路由回馈:通过路由标记的手段,将其他协议引入的路由,不在重新引入:**
- **双tag:不利于后续路由的管理**。
如AR2和AR3向ISIS引入时标记tag100,AR2和AR3向OSPF引入时标记tag200。AR4匹配AR2来的路由时,只能通过下一跳,不能通过tag值匹配。
- **四tag:方便后续路由的再匹配。**
如将AR2、AR3向ISIS、OSPF引入的路由都各设置一个tag值。
::: tip
路由标记是AR2将静态从OSPF引入ISIS区域时打上tag值,AR3从ISIS向OSPF引入时,不引入带有对应tag值的路由(使用过滤工具)。
:::
------------------------------------
#### 四tag实验:
AR2将OSPF区域的路由打tag 100标签后引入ISIS:
[AR2-acl-basic-2000]dis th
acl number 2000
rule 5 permit source 1.1.1.1 0
rule 10 permit source 192.168.1.0 0
[AR2-route-policy]dis th
route-policy OSPF_to_ISIS permit node 20
if-match acl 2000
apply tag 100
[AR2-isis-1]import-route ospf 1 route-policy OSPF_TO_ISIS
AR4上查询数据库:

如上,ACL匹配生效了,但是没有携带tag。
::: tip
**如果想让ISIS的路由携带路由标记,则需要使用宽的开销风格。**
:::
[AR4-isis-1]cost-style wide
##### 解决路由回馈

此时如果在AR3上ISIS直接引入到OSPF,在OSPF区域设备中就会出现两条192.168.1.0的5类LSA,为防止路由回馈,AR3上只需要匹配特定的路由做引入:
[AR3-acl-basic-2000]dis th
acl number 2000
rule 5 permit source 4.4.4.4 0
[AR3-route-policy]dis th
route-policy ISIS_TO_OSPF permit node 20
if-match acl 2000
apply tag 200
[AR3-ospf-1]import-route isis route-policy ISIS_TO_OSPF

::: tip
上述如果在AR4引入一条192.168.0.0/16的静态路由,ACL匹配:
rule 10 permit source 192.168.0.0 0

**在AR3引入到OSPF中时,由于192.168.0.0是包含AR2传来的192.168.1.0,在AR3传到OSPF区域后,AR1的外部路由会查看到AR3通告的192.168.1.0/24(被打上200的标记),出现路由回馈。如果要防止这种情况发生,需要在ACL匹配时将通配符掩码进行修改为严格匹配。**
ACL匹配/16位:
rule 10 permit source 192.168.0.0 0.0.255.255
上述引入时不是引入单条路由,而是以16位的信息引入,16位包含24位:

OSPF中查看标记值:


:::
**通过route-policy解决上述路由回馈问题:**


如上,AR1仍然可以看到AR3通告的192.168.1.0的路由,原因是匹配规则是节点逐一查找,匹配到node20时,路由192.168.1.0就被匹配通过了。
::: warning
为避免上述情况,**在写route-policy时,必须将拒绝条目写在允许条目之前。**
:::
如下:

此时AR1的数据库中,AR3就只通告192.168.0.0:

**AR3通告到OSPF区域的路由优先级由15变为150,不会被AR2通告回ISIS区域**,但为了日后路由匹配的方便(ISIS优先级根据需要可能会被调整到比OSPF更大),避免AR3形成路由回馈,在AR2上需要对tag200做过滤:

至此解决了顺时针方向的路由回馈问题。
##### 解决次优路径


如上,AR3访问AR1引入的外部路由时,需要走AR4的下一跳(优先级15),出现次优路径。
**解决方法是将这条路径的优先级改大。**
::: tip
可以在ISIS视图下直接修改ISIS优先级,也可以在ISIS视图下关联route-policy。
:::
更改优先级解决次优路径:
[AR3]route-policy PRE permit node 10 [AR3-route-policy]if-match tag 100 匹配tag100(发到ISIS区域的)的路由 [AR3-route-policy]apply preference 160 [AR3-isis-1]preference route-policy PRE 将协议优先级和route-policy关联

ISIS的路由优先级变为160:


::: tip
**由上,打tag值可以解决路由回馈问题;修改优先级可以解决次优路径问题。**
:::
------------------------------------
上述解决次优的方式存在缺陷,次优路径的形成是由于OSPF外部引入路由优先级较大,引入到优先级较小的ISIS中出现了次优问题,应该由OSPF解决,而不是修改ISIS优先级。
::: tip
**为了减少协议之间的影响,如果路由重发布时需要更改优先级、开销、tag等,建议由同一个协议来完成。** (其他默认不变的协议就可以用来对接其他协议)
:::
即进行如下操作:
1. 先将OSPF的外部路由优先级值在边缘节点上改为大于等于10,小于15,建议改为10,
即边缘节点上OSPF内部和外部使用一样的优先级值。
2. 为了解决路由回馈使用四tag进行路由标记和过滤。
3. 为了解决次优路径使用更改优先级的方式来改变携带特定路由标记的路由信息。
**上述操作后,次优路径变为反方向的,即逆时针方向的次优路径,AR2访问AR4的路由时走优先级更低(10)的OSPF区域,形成次优路径。**
上述拓扑中,删除PRE的route-policy进行实验:
[AR3]undo route-policy PRE [AR2-ospf-1]preference ase 10 修改OSPF外部优先级为10 [AR3-ospf-1]preference ase 10
::: warning
**优先级值只是本地概念,即修改优先级只有当前设备生效。**
即AR2和AR3上修改了OSPF外部优先级,AR2和AR3认为外部优先级为10,而AR1仍认为是150。
:::

如上AR2访问AR4走优先级低的OSPF区域,形成次优路径。
**哪台设备出现次优路径,就修改哪台设备上对应路由的优先级。**
匹配出该路由的tag,通过修改这条路由的优先级,消除次优路径:
[AR2]route-policy PRE permit node 10 [AR2-route-policy]if-match tag 200 [AR2-route-policy]apply preference 150 将ISIS引入OSPF的路由优先级改为150(大于15) [AR2-ospf-1]preference ase 10 route-policy PRE 将外部路由的优先级和route-policy关联

::: tip
正常配置时,为防止路由回馈和次优路径,顺时针和逆时针的配置都需要做。
:::
##### 逆时针方向配置(使用前缀列表)
即在AR2和AR3上分别再做ISIS到OSPF、OSPF到ISIS的引入。

[AR3]ip ip-prefix HOST permit 192.168.1.0 24 [AR3]ip ip-prefix HOST permit 1.1.1.1 32 [AR3]route-policy OSPF_TO_ISIS permit node 20 [AR3-route-policy]if-match ip-prefix HOST [AR3-route-policy]apply tag 400 [AR3-isis-1]import-route ospf route-policy OSPF_TO_ISIS
AR4上查看AR3的分片LSP(AR3引入的外部路由):

[AR2]route-policy ISIS_TO_OSPF deny node 10 [AR2-route-policy]if-match tag 400 拒绝OSPF通告出去的tag=400的路由再通告回来
[AR2]ip ip-prefix HOST permit 192.168.0.0 16 [AR2]ip ip-prefix HOST permit 4.4.4.4 32
[AR2]route-policy ISIS_TO_OSPF permit node 20 [AR2-route-policy]if-match ip-prefix HOST ISIS经过AR2通告到OSPF的路由 [AR2-route-policy]apply tag 300 允许前缀列表HOST的tag=300的路由进来 [AR2-ospf-1]import-route isis route-policy ISIS_TO_OSPF
在AR2引入带路由策略的ISIS路由后,AR1中来自ISIS的外部路由通告者由AR3变为AR2,原因是AR3中外部路由是AR4发来的优先级15的路由,AR2通告后,OSPF区域内优先级是10,AR3使用更优先的OSPF发来的路由:


此时AR3使用OSPF区域通告的路由出现次优路径:

将OSPF区域内引入的ISIS路由(tag=300)的优先级值改大:
[AR3]route-policy PRE permit node 10 [AR3-route-policy]if-match tag 300 [AR3-route-policy]apply preference 150 [AR3-ospf-1]preference ase route-policy PRE
::: warning
**AR3本身配置了preference ase 10的命令,上述preference ase route-policy PRE,会把preference ase 10的命令替换掉,需要使用如下命令:**
[AR3-ospf-1]preference ase 10 route-policy PRE
```
即先将外部优先级都修改为10,然后再使用route-policy单独做优先级的修改。
:::
至此拓扑中所有的路由回馈、次优路径都被解决:
::: warning 执行双点双向重发布设备: 双点双向重发布前后,设备的IP路由表是没有任何变化的。 即拓扑中AR2和AR3的IP路由表在重发布前后是一致的。唯一改变的是路由的优先级。 :::