HCIP-ICT实战进阶05-路由策略与策略路由

0 前言

什么是路由策略?

  1. 基于报文的目的IP地址进行路由表查找, 之后转发数据;
  2. 针对控制平面, 为路由协议和路由表服务, 针对路由信息进行过滤或者是路由属性更改;
  3. 一般需要结合路由协议一起完成策略.

什么是策略路由?

  1. 基于策略转发, 如果策略失败, 在查找路由表, 之后转发数据;
  2. 针对转发平面, 直接为数据服务, 针对需要转发的数据, 直接控制转发;
  3. 一般需要手动在设备上逐台配置, 或者是在部分设备上调整转发路径.

1 路由控制的技术背景

正常情况下, 是通过路由特征定义, 然后结合路由策略工具进行路由信息更改.

注: filter-policy既是调用工具又是策略工具, 它拥有两个领域的功能.

路由策略会用到的工具:

  1. 条件工具: 用于将需要的路由筛选出来(就是匹配部分路由的工具);

    通用的条件工具:

    • ACL(访问控制列表)

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

    BGP专用工具:

    • AS-Path
    • community filter
    • ext-community filter
    • RD Filter
  2. 策略工具: 用于将筛选出来的路由进行某个动作的执行(比如修改路由属性, 过滤路由等动作), 策略工具严格来说不能直接应用, 只是一个动作, 而不是执行;

    通用策略工具: route-policy(有且只有一个)

  3. 调用工具: 将路由策略具体应用到某个路由协议中, 使其生效.

    通用的调用工具:

    1. Filter-policy
    2. import-route

    BGP专用:

    1. dampening
    2. network
    3. peer

2 条件工具

2.1 ACL(Access Control List, 访问控制列表)

ACL编号

  • 基本ACL: 2000-2999, 匹配源IP、分片信息、生效时间段.
  • 高级ACL: 3000-3999, 源IP、目的IP、源端口、目的端口、IP协议号、ICMP、
  • 二层ACL: 4000-4999
  • 用户ACL: 5000-6031
  • 基本ACLv6: 2000-2999
  • 高级ACLv6: 3000-3999

ACL规则编号

表示当前这条ACL规则是在匹配顺序中的哪一步, 默认ACL规则编号顺序步长为5.

为什么要步长: 因为ACL写完之后, 会根据编号顺序进行匹配, 如果需要在某两个规则之间增加新的规则, 此时就能手动指定规则编号来插入新规则.

如果要在5 6 7 8 9 10中插入规则:

通过修改步长实现ACL重新排序:

acl 2000
step 10

注意: 修改步长时不能与原有步长一致.

就会变成10 20 30 40 50 60

再次修改步长重新排序:

acl 2000
step 5

就会变成 5 10 15 20 25 30

当然这种操作看起来不太聪明, 除了上述的配置顺序(config模式, 默认), 还有自动模式(auto模式).

修改配置顺序模式命令:

acl 2000 match-order [config|auto]

auto模式

在auto模式下, 规则匹配越精确, 则排序越靠前, 如果精确度一样, 就按照config模式进行排序(先来后到).

具体的匹配内容

主要了解一下通配符概念

比如创建一个ACL, 用于匹配192.168.1.0/24

acl 2000
rule permit sourse 192.168.1.0 0.0.0.255

在以上配置里面, 最重要的就反掩码通配符的概念.

通配符: 二进制的0表示精确匹配, 二进制1表示模糊匹配.

默认规则

华为ACL没有默认规则, 但华为一些调用ACL的工具默认都是允许工作;

思科、锐捷有默认ACL规则, 默认是拒绝匹配.

条件ACL存在的缺陷

ACL一般是用于匹配IP路由前缀, 无法匹配掩码信息, 所以后来又使用了一个新的工具: IP-Prefix, 用于对路由条目进行精确匹配(前缀+掩码匹配).

2.2 IP-Prefix(IP-Prefix List, IP前缀表)

IP-Prefix也是一个规则的集合, ACL可以用于匹配流量数据,也可以用于匹配路由条目, 但是IP-Prefix只能匹配路由条目.

ACL和IP-Prefix只是条件工具,用于筛选信息, 如果需要使用,则需要借助策略工具进行进一步操作, 策略工具就是route-policy.

类比ACL

IP-Prefix ACL
ip-prefix-name(前缀列表名) acl-number(ACL编号)
index(序号) rule-number(规则编号)

一个ip-prefix-name下面可以有多个index.

匹配机制

配置命令

ip ip-prefix xxx index 10 permit 1.1.1.0 24
  • ip ip-prefix命令表示当前是创建前缀列表;
  • xxx: 前缀列表的名字;
  • index 10: 当前规则编号, IP-Prefix没有默认步长, 需要手工配置, 一般配置步长为10;
  • permit: 匹配动作, 同ACL;
  • 1.1.1.0 24: 表示匹配1.1.1.0的前24位, 同时掩码也是24, 这里不同于ACL, 掩码是严格精确匹配的, 如果这里有个1.1.1.0 25的网段就会因为掩码不同而不被匹配.

如果需要匹配多个掩码, ip-prefix还有一些参数可以实现:

ip ip-prefix xxx index 30 permit 1.1.1.0 24 gr 30
ip ip-prefix xxx index 30 permit 1.1.1.0 24 le 30
ip ip-prefix xxx index 30 permit 1.1.1.0 24 gr 31 le 28

gr(greater-equal): 表示掩码需要大于等于, 这里表示前24位精确匹配, 掩码匹配范围是30-32.

le(less-equal): 表示掩码需要小于等于, 这里表示前24位精确匹配, 掩码匹配范围是24-30.

同时使用gr和le时表示掩码匹配范围在二者之间, 这里表示前24位精确匹配, 掩码匹配范围是28-31.

查看命令:

dis ip ip-prefix

配置举例

  • 单语句匹配

    1. 路由10.1.1.0/24被permit, 其他都被deny

      ip ip-prefix aa index 10 permit 10.1.1.0 24
    2. 路由全被deny

      ip ip-prefix bb index 10 deny 10.1.1.0 24
  • 多语句匹配

    1. 路由10.1.1.0/24被deny, 路由10.1.1.1/32被permit, 其他路由被deny

      ip ip-prefix aa index 10 deny 10.1.1.0 24
      ip ip-prefix aa index 20 permit 10.1.1.1 32
    2. 路由10.1.1.0/26, 10.1.1.1/32被permit, 其他路由被deny

      ip ip-prefix bb index 10 permit 10.1.1.0 26 greater-equal 26 less-equal 32
  • 通配地址匹配

    1. 所有掩码长度在8-32的路由被permit

      ip ip-prefix aa index 10 permit 10.0.0.0 8 le 32
    2. 路由10.1.0.0/16 被permit, 其他路由被deny

      ip ip-prefix aa index 20 deny 10.1.1.0 24 le 32
      ip ip-prefix aa index 10 permit 10.1.0.0 16 le 32

3 调用工具

这里只回顾traffic-filter, filter-policy放在下面策略工具里面讲

3.1 traffic-filter

这其实应该算是策略路由的内容, 但我想了想还是放在这里比较好.

traffic-filter(流量过滤工具),只能在接口视图下调用ACL,无法调用IP-Prefix, 因为traffic-filter是流量过滤工具.

配置命令

  • 在接口上配置

    acl 2000
    rule 5 permit source 10.1.1.1 0.0.0.0
    qu
    int g0/0/0
    traffic-filter {inbound|outbound} acl 2000
    qu

一般情况下,最好使用inbound过滤, 因为如果采用outbound时, 数据需要从入接口进入设备, 并进行路由表查表, 查表完才决定向哪个接口转发, 然后到出接口的时候才会进行流量过滤, 收包、拆包、解析、查表都是会消耗设备的性能.

注意: traffic-filter工具不能针对自己产生的流量过滤(不管是in方向还是out方向过滤,自己产生的流量无法进行过滤), 只能对其他设备转发过来的流量进行过滤.

3.2 Filter-policy

filter-policy工具是专门用于进行路由过滤使用的, 一般会结合ACL或IP-Prefix对过滤的路由进行筛选.

filter-policy严格来说是属于调用工具, 但是其本身自带策略工具的功能, 可以不像其他调用工具一样一定需要Route-policy来间接调用条件工具.

Filter-policy可以针对距离矢量路由协议(RIP、BGP), 使用时无限制; 也可以针对链路状态路由协议(OSPF、ISIS), 使用时需要注意使用位置.

3.2.1 距离矢量路由协议

  • import: 接收到的路由选择部分接收;
  • export: 向外发送的路由选择部分发送.

在距离矢量路由协议中, 设备之间传递的是路由信息, 如果需啊哟对这种路由信息进行某种过滤, 可以使用filter-policy实现.

BGP:

配置命令

对BGP还不熟悉的可以去瞧瞧我的这篇博客.

在BGP中应用:

[Huawei-bgp-af-ipv4]filter-policy {acl-number | acl-name acl-name | ip-prefix ip-prefix-name} import

对接收的路由信息进行过滤.

[Huawei-bgp-af-ipv4]filter-policy {acl-number | acl-name acl-name | ip-prefix ip-prefix-name} export [protocol [process-id]]

对发布的路由进行过滤, 只有通过过滤的路由才被BGP发布.

[Huawei-bgp-af-ipv4]peer {group-name | ipv4-address} filter-policy {acl-number | acl-name acl-name | ip-prefix ip-prefix-name} {import|export}

配置向对等体(组)发布, 或从对等体(组)接收路由时的路由过滤策略.

3.2.2 链路状态路由协议

OSPF:

ISIS:

  • import: 在任意设备配置, 在LSA被计算成路由信息之后阻止其加入路由表, 不会影响LSA传递;
  • export: 只能在ASBR配置, 针对五类或者七类LSA防止其生成.

配置命令:

  1. 调用ACL(isis在进程视图下, ospf在进程区域视图下):

    filter-policy acl-number {import | export}
  2. 调用IP-Prefix(isis在进程视图下, ospf在进程区域视图下):

    filter-policy ip-prefix-name {import | export}

4 策略工具

4.1 Route-policy(路由策略/路由图)

中文名称其实叫做路由策略, 一般为了区分route-policy和路由策略概念, route-policy更多会称之为路由图.

route-policy需要在创建之后,被其他调用工具调用.

主要作用:

  1. 对路由进行过滤;
  2. 对路由属性进行修改.

一个route-policy类似于ACL、IP-Prefix, 也是很多规则的集合,但是有些许差别.

4.1.1 Route-policy组成

一个router-policy由多个节点(node)构成, 各个节点都会有自己的编号, 使用的时候按照编号的大小, 从小到大进行匹配, 每一个节点都有一个动作(permit、deny), 如果匹配到就不会再往下匹配了.

每一个节点都会包含多个if-match和apply语句:

  • if-match: 用于当前节点匹配哪些内容, 通常会调用ACL或者IP-Prefix, 缺省时匹配所有路由;

  • apply: 用于当前节点应该执行什么动作.

华为设备默认所有未匹配的路由将被拒绝通过route-policy, 如果Route-Policy中定义了一个以上的节点, 应保证节点中至少有一个节点的匹配模式是permit. 因为在route-policy用于路由信息过滤时: 如果某路由信息没有通过任一节点, 则认为该路由没有通过该route-policy, 如果route-policy的所有节点都是deny模式, 则没有路由信息能通过该route-policy.

注意事项:

一个节点里面的if-match语句是与关系, 但route-policy同一个节点的不同if-match语句不一定全是与关系(IE知识点: 比如调用了BGP的专用工具, 则这些if-match之间是或关系)

总结: 多个节点之间为或关系, 单个节点中多个if-match为与关系.

配置命令

  1. 配置route-policy命令

    [Huawei]route-policy route-policy-name {permit|deny} node node

    创建路由策略并进入到route-policy视图.

  2. 配置if-match子句

    [Huawei-route-policy]if-match ?
    acl 匹配基本acl
    cost 匹配路由信息的cost
    interface 匹配路由信息的出接口
    ip-prefix 匹配前缀列表
    ...
  3. 配置apply子句

    [Huawei-route-policy]apply ?
    cost 设置路由的cost
    cost-type{type-1|type-2} 设置ospf的开销类型
    ip-address next-hop 设置ipv4路由信息的下一跳地址
    preference 设置路由协议的优先级
    tag 设置路由信息的标记域
    ...
  4. 配置允许所有:

    route-policy test permit node 100

    对, 这样就好了, 如果缺省则会拒绝所有.

重要提醒: 不管是ACL、IP-Prefix、route-policy, 如果规则里面主要是permit, 最后就要手写一个deny any; 如果规则里面主要是deny, 最后就要手写一个permit any. 这样能无视不同设备厂商默认permit/deny, 不容易出错, 要养成习惯.

查看路由策略:

dis route-policy

4.1.2 Route-policy的匹配顺序

ACL、IP-prefix、route-policy:

动作permit,原本的含义是匹配到了之后需要执行, 虽然都算是匹配需要执行动作, 但是大部分情况下,都表示允许通过, 动作deny一般也都是表示拒绝通过.

以上动作,不管怎么理解, acl、ip-prefix、route-policy都不能算是直接拒绝或者允许, 都只能算是匹配到了需要执行, 最后的处理动作还是要根据调用的工具来决定.

4.1.3 route-policy配置举例

  • 举例1:

    route-policy test permit node 10
    if-match x1
    if-match x2
    apply y1
    • 创建了一个route-policy取名为test

    • 节点编号是10.

    • 动作是permit.

    • if-match语句: 用来定义匹配条件, 多个就是需要同时匹配, 因为同一个route-policy节点里的if-match子句是与关系.

    • apply语句: 对当前匹配到的内容进行某些修改.

    route-policy和IP-Prefix一样, 默认最后有一个规则时deny any.

  • 举例2:

    • node 10: 拒绝ip-prefix Pref1匹配到的路由信息, 即拒绝5.5.5.5/32、1.1.2.0/24这些路由;
    • node 20: 允许ip-prefix Pref2未匹配到的路由信息, 未允许任何路由通过;
    • node 30: 允许acl 2001匹配到, 且下一跳路由被acl 2002匹配到的路由信息, 即1.1.3.0/24->13.13.13.1/32和1.1.3.0/25->13.13.13.1/32, 并将其开销值改为21;
    • node 40: 允许ip-prefix Pref3匹配到的路由信息, 即1.1.3.0/25->34.34.34.2这条路由, 并将其开销值改为11;
    • node 50: 允许其他路由信息.

    注意:

    • 1.1.3.0/24->34.34.34.2是被node 50允许的, node 20只允许了1.1.3.0/24->13.13.13.1/32这一条路由信息.

    • 1.1.3.0/25->13.13.13.1/32已经被node 30匹配过了, 在node 40里不会再被匹配, 因此开销值不会被修改.

    • 6.6.6.6/32没有被Pref2匹配到, 且ip-prefix自带的deny any导致了node 20实际上没有允许到任何一条路由, 所以6.6.6.6/32是被node 50匹配到的.

4.2 路由策略的使用方法和隐患

4.2.1 对接收的路由做过滤

R1、R2、R3允许OSPF, R1将192.168.1.0/24、192.168.2.0/24、192.168.3.0/24、192.168.4.0/24宣告进OSPF. 现在要求R2不能访问R1上的192.168.1.0/24网段, 但是R3可以正常访问. 为实现该需求, 可以在R2上对接收(import)的路由使用filter-policy进行过滤.

方案一, 通过调用工具Filter-policy进行路由加表前过滤:

R2(ip-prefix):

ip ip-prefix fun1 index 10 deny 192.168.1.0 24 gr 32
ip ip-prefix fun1 index 100 permit 0.0.0.0 0 le 32 ospf 1
filter-policy ip-prefix fun1 import
qu

filter-policy在OSPF中, import会让接收到的LSA在计算完路由信息后进行过滤, 只有被允许的路由信息才会加入设备的LSDB, 而LSA会原封不动地传递给其他设备, 即R2上不会存在192.168.1.0/24, R3上会存在.

R2(ACL):

acl 2000
rule deny source 192.168.1.0 0.0.0.255
rule permit
ospf 1
filter-policy acl 2000 export
qu

也可以通过filter-policy调用ACL.

方案二, traffic-filter进行流量过滤:

R1:

acl 3000
rule 5 deny ip source R2-ip-address mask destination 192.168.1.0 0.0.0.255
rule 100 permit
qu
int g0/0/0
traffic-filter inbound acl 3000
qu

4.2.2 对发布的路由做过滤

R1、R2、R3允许OSPF, R1将192.168.1.0/24、192.168.2.0/24、192.168.3.0/24、192.168.4.0/24引入进OSPF. 现在要求R2、R3都只能学习到192.168.1.0/24网段的路由, 学习不到其他三个网段的路由. 为实现该需求, 可以在R1上使用filter-policy对引入的路由在发布(export)时进行过滤.

由于R1引入直连路由, 环回口网段作为外部路由将产生五类LSA, R1成为ASBR.

R1:

ip ip-prefix out index 10 permit 192.168.1.0 24
ip ip-prefix out index 100 deny 0.0.0.0 0 le 32 ospf
import-route direct
filter-policy ip-prefix out export

除了IP-Prefix之外, 也可以通过ACL进行路由过滤:

acl 2000
rule permit source 192.168.1.0 0.0.0.255
rule deny
qu
ospf 1
import-route direct
filter-policy acl 2000 export
qu

4.2.3 修改路由属性

R1、R2、R3允许OSPF, R1将直连网段192.168.1.0/24引入进OSPF. 现在要求R2、R3只能学习到的OSPF路由192.168.1.0/24为external-type 1路由(默认为type 2), 为是实现该需求, 可以在R1上使用Route-policy在引入路由时修改外部路由的类型为external-type 1.

R1:

ip ip-prefix external index 10 permit 192.168.1.0 24
ip ip-prefix external index 100 deny 0.0.0.0 0 le 32 route-policy RP permit node 10
if-match ip-prefix external
apply cost-type type-1
route-policy RP permit node 20
qu ospf
import-route direct route-policy RP
qu

ip-prefix默认自带一条不匹配所有路由, 这里加上只是习惯, route-policy RP permit node 20同理.

4.2.4 双点双向引入

  • 在边界路由器上把两个路由域的路由相互引入, 称为双向路由重发布.
  • 两个路由域存在两个边界路由器, 并且都执行双向路由重发布, 测试称为双点双向路由重发布.
  • 双点双向路由重发布是一种经典的路由模型, 因为单点的双向路由重发布缺乏冗余性, 一旦单点的边界路由器故障, 那么两个路由域之间的通信可能会出现问题, 因此在大型网络部署中一般采用双点双向路由重发布, 实现冗余备份.
  • 双点双向路由重发布虽然增强了网络的可靠性, 但是容易引发次优路径路由环路等问题.

除了双点双向引入之外:

  1. 单点单向引入:比如一台设备左边是OSPF,右边是ISIS, 该设备只将OSPF引入到ISIS里面, 则称为单点单向引入.

    注意:单点单向引入,不需要考虑拓扑环境.
  2. 单点双向引入:比如一台设备左边是OSPF,右边是ISIS, 该设备将OSPF引入到ISIS里面, 同时在OSPF里面将ISIS引入, 则称为单点双向引入

    注意:单点双向向引入,不需要考虑拓扑环境.
  3. 双点单向引入:拓扑环境至少是OSPF和ISIS有两个边界设备, 然后在每一个边界设备上, 都只做单边的引入, 比如上图的拓扑: R2将OSPF引入至ISIS, R3将ISIS引入至OSPF, 没有其他操作, 称为双点单向引入.

4.2.5 次优路径问题

以10.1.1.0/24为例:

  • R1将直连路由10.1.1.0/24引入到OSPF中.
  • R2、R3执行双向路由重发布, R2先将10.1.1.0/24重发布到ISIS中, R3将会学习到来自R4的ISIS路由;
  • 对R3而言, ISIS路由(优先级15)优于OSPF外部路由(优先级150), 因此优选来自R4的ISIS路由. 后续R3访问10.1.1.0/24网段的路径为: R3->R4->R2->R1, 则是次优路径.

注意: 理论上R2、R3形成双点双向路由重发布时, 在去往10.1.1.0/24时都会选择ISIS路由(优先级15), 但实际情况中OSPF的算法会使R2或R3会自动根据路由计算的前后时间差

, 将后计算的路由选择为OSPF.

忘记路由协议优先级的可以看这里.

解决次优路径

  • 方案一:

    在R3的ISIS进程内, 通过filter-policy禁止来自R4的10.1.1.0/24路由加入本地路由表.

    R3:

    acl 2001
    rule 5 deny source 10.1.1.0 0
    rule 100 permit
    qu
    isis 1
    filter-policy 2001 import
    qu

    这样拒绝R3从ISIS获取来的LSP加入路由表, R3在前往10.1.1.0/24时就只能选择R1(OSPF的路径).

  • 方案二:

    R3通过ACL匹配10.1.1.0/24路由, 在Route-policy中调用该条ACL, 将匹配这条ACL的路由优先级设为14(小于ISIS的15, 大于OSPF的10). 在OSPF视图下使用preference ase命令调用route-policy修改外部路由的优先级.

    R3:

    acl 2000
    rule permit source 10.1.1.0 0
    qu route-policy fun2 permit node 10
    if-match acl 2000
    apply preference 14
    qu ospf 1
    preference ase route-policy fun2
    qu

    这样OSPF自己引入的外部路由优先级就会改变, 但ISIS引入到OSPF的路由不会改变.

当然, 上面的两个方法只能说是学以致用, 但实际在解决双点双向重发布拓扑中, 次优路径解决的方案, 不建议采用ACL匹配具体路由信息, 建议采用tag方式进行匹配修改.

tag是在路由中, 经常用于标记一类路由的信息, OSPF是LSA里携带, ISIS是TLV里携带.

R1:

ospf 1
import-route direct cost 2 tag 500
import-route bgp tag 500
qu

表示R1设备OSPF引入直连路由的时候, 开销值为2, 且tag设置为500

R4:

route-policy test permit node 10
if-match tag 500
apply perference 14
qu
ospf 1
perference ase route-policy test
qu

通过匹配tag的方式增加配置的泛用性和易拓展性.

4.2.6 环路问题

解决环路问题

方案一

在双点双向设备上配置ACL或者IP-Prefix, R2设备上将OSPF引入到ISIS的路由, 在R3设备上,不再将ISIS引入到OSPF. 比如R2将OSPF的10.1.1.0/24引入到ISIS, 之后R3就不需要将这条路由ISIS引入到OSPF.

R3:

acl 2000
rule permit source 10.1.1.0 0.0.0.255
rule deny
route-policy test deny node 10
if-match acl 2000
route-policy test permit node 100
qu ospf 1
import-route isis route-policy test
qu

同理, 如果是双点双向路由重发布:

  • R2将OSPF引入到ISIS,R3就需要拒绝这个路由引入回去OSPF;
  • R2将ISIS引入到OSPF,R3就需要拒绝这个路由引入回去ISIS;
  • R3将OSPF引入到ISIS,R2就需要拒绝这个路由引入回去OSPF;
  • R3将ISIS引入到OSPF,R2就需要拒绝这个路由引入回去ISIS.

方案二:

使用tag解决环路问题

R3:

route-policy o2i deny node 10
if-match tag 201
qu
route-policy o2i permit node 20
apply tag 100
qu route-policy i2o deny node 10
if-match tag 200
qu
route-policy i2o permit node 20
apply tag 101
qu

R4:

route-policy o2i deny node 10
if-match tag 101
qu
route-policy o2i permit node 20
apply tag 200
qu route-policy i2o deny node 10
if-match tag 100
qu
route-policy i2o permit node 20
apply tag 201
qu

效果:

R3:

  • 拒绝tag=201的路由加表, 将路由信息加上tag=100;
  • 拒绝tag=200的路由加表, 将路由信息加上tag101;

R4:

  • 拒绝tag=101的路由加表, 将路由信息加上tag=200;
  • 拒绝tag=100的路由加表, 将路由信息加上tag201.

5 策略路由

不同场景下, 有些用户的流量或业务流量需要根据特定转发路径转发数据, 这种技术就叫做策略路由.

比如学校: 大部分学生使用的网络都是三大运营商转发, 但学校内有一些专属业务流量, 比如教务系统的数据, 需要通过国内的教育网进行传输, 此时就需要给特定流量指定转发路径.

策略路由的优先级高于路由表, 优先按照策略路由转发, 若策略路由没有说明流量如何转发, 则按照路由表转发.

策略路由使得网络设备不仅能够基于报文的目的IP地址进行数据转发, 更能基于其他元素进行数据转发, 例如源IP地址、源MAC地址、目的MAC地址、源端口号、目的端口号、VLAN-ID等等.

用户还可以使用ACL匹配特定的报文, 然后针对该ACL进行策略路由部署.

若设备部署了策略路由, 则被匹配的报文优先根据策略路由进行转发.

注: 图中的PBR(Policy-Based-Routing)是泛指全体策略路由, 但是在华为体系中, PBR单指本地策略路由, 这在下面会进一步介绍.

5.1 策略路由的优点

  1. 可以根据用户的需求定制流量转发路径(增强路由选择的灵活性和可控性);
  2. 可以使用不同流量通过不同的链路转发数据, 提高链路使用率;
  3. 在满足服务质量的同时可以选择费用较低链路传输数据, 降低成本.

5.2 策略路由分类

  1. 本地策略路由

    使用工具: PBR(Policy-Based-Route)

    只能针对本机产生的报文进行策略处理, 其他设备发送过来的流量不能通过本地策略处理.

  2. 接口策略路由

    使用工具: traffic-policy

    只能针对其他设备发送过来的流量能通过接口策略处理, 本机自己产生的报文不生效.

  3. 智能策略路由

    使用工具: SPR(Smart Policy Route)

    根据不同业务, 进行智能分流.

注: 华为体系中, PBR指的是本地策略路由, 其他体系中PBR是策略路由的统称.

5.2.1 本地策略路由

  • 本地策略路由对本地始发流量生效, 如: 本地始发的ICMP报文;
  • 本地策略路由在系统视图调用.

本地策略路由-结构

  • PBR与Route-policy类似, 由多个节点组成, 每个节点由匹配条件(条件语句)和执行动作(执行语句)组成;
  • 每个节点可以包含多个条件语句;
  • 节点内的多个条件语句之间的关系为"与", 即匹配所有条件语句才会执行本节点内的动作;
  • 节点之间的关系为"或", PBR根据节点编号从小到大顺序执行, 匹配到的节点将不会继续向下匹配.

本地策略路由-配置

配置同样类似route-policy

  1. 创建PBR:

    [Huawei]policy-based-route policy-name {deny|permit} node node-id

    创建策略路由和策略点, 若策略已创建则进入本地策略路由视图.

  2. 设置IP报文匹配条件:

    [Huawei-policy-based-route-PBR-10]if-match acl acl-number
    [Huawei-policy-based-route-PBR-10]if-match packet-length min-length max-length

    缺省情况下, 策略路由中未配置匹配条件, 可以使用ACL匹配IP地址, 也可以设置匹配报文长度.

  3. 指定PBR中报文的出接口:

    [Huawei-policy-based-route-PBR-10]apply output-interface interface-type interface-number

    缺省情况下, 策略路由中未配置报文的出接口. 配置成功后, 将匹配策略点的报文总指定出接口发送出去. 报文的出接口不能是以太网等广播类型接口.

  4. 设置PBR中报文的下一跳:

    [Huawei-policy-based-route-PBR-10]apply ip-address next-hop ip-address1 [ip-address2]

    用户可以指定报文的下一跳, 当该策略点未配置出接口时, 匹配策略点的报文被发往指定的下一跳.

  5. 全局PBR调用:

    [Huawei]ip local policy-based-route policy-name
  6. 接口上PBR调用:

    [Huawei-g0/0/0]ip policy-based-route policy-name

举例:

policy-based-route test permit node 10
if-match xxx
apply xxx
qu ip local policy-based-route test
  • 该命令表示创建一个本地策略, 取名为test, 当前节点的规则时permit, 节点编号是10.

  • if-match xxx:

    不同于Route-policy, 本地策略路由中的if-match匹配条件比较少, 且if-match只能写acl或者packet-length, 本地策略路由一般使用高级ACL.

    如果ACL的规则时permit, 表示匹配到了需要执行节点的动作, 如果ACL的规则时deny, 表示匹配到的流量不需要执行策略, 直接采用路由表进行转发.

    被PBR中acl deny的节点会放弃路由策略, 选择去匹配路由表.

  • apply xxx:

    表示执行动作:

    • output-interface: 表示选择一个非广播接口转发该数据, 而且只能配置一个, 后面配置的会覆盖之前配置的;
    • ip-address next-hop: 表示选择一个下一跳转发数据, 下一跳IP不能选择本地的IP地址, 且只能选择一个;
    • ip-address backup-nexthop: 该命令有些设备不支持, 如果next-hop故障, 则可以选择该配置转发.
    • default output-interface: 表示配置缺省出接口, 基本原则和出接口一致;
    • ip-address default next-hop: 表示配置缺省下一跳;
    • ip-perfence: 表示报文优先级, 可选优先级范围是0-7.

    以上apply语句可以同时配置.

  • 在系统视图下ip local policy-based-route test配置全局调用;

  • 在接口视图下ip policy-based-route test配置接口调用.

本地路由策略-匹配顺序

5.2.2 接口策略路由

  • 接口策略路由只对转发的报文起作用, 对本地始发的报文无效;
  • 接口策略路由在接口下, 对接口的入方向报文生效, 缺省情况下, 设备按照路由表的下一跳进行报文转发, 如果配置了接口策略路由, 则设备按照接口策略路由指定的下一跳进行转发.

接口策略配置的方式称为MQC配置方式.

MQC(Modular QoS Command-Line Interface, 模块化QoS命令行)是指通过将具有某类共同特征的数据流划分为一类, 并为同一类数据流提供相同的服务, 也可以对不同类的数据流提供不同的服务.

MQC包含三个要素: 流分类(traffic classifier)流行为(traffic behavior)流策略(traffic policy), 说人话就是匹配内容执行动作结合匹配内容和执行动作.

MQC的流行为支持重定向报文, 因此可以使用MQC实现IP单播策略路由.

流分类(traffic classifier)

流分类:定义一组流量匹配规则, 以对报文进行分类. 流分类支持的匹配项如下所示.

流行为(traffic behavior)

流行为:用来定义执行的动作, 支持报文过滤、重标记优先级、重定向、流量统计等动作.

流策略(traffic policy)

流策略支持在接口的两个方向上调用.

流策略存在方向(inbound、outbound)的概念, 策略中的流行为匹配入、出方向的报文, 对匹配中的报文执行相应的流动作.

配置

  1. 创建流分类

    [Huawei]traffic classifier classifier-name [operator{and|or}]

    缺省情况下, 流分类中各规则之间的关系为"或"(or).

    如果是"与"关系(and)且存在acl匹配, 则多个if-match中一定要有一个被匹配, 如果没有acl, 则所有规则都需要同时匹配.

    如果是"或"关系(or), 在acl里的deny不再是表示不匹配, 而是会在traffic-classifier表示拒绝, 这里就不建议为acl配置rule deny xxx.

  2. 创建流行为

    [Huawei]traffic behavior behavior-name

    根据实际情况定义流行为中的动作, 只要各动作不冲突, 都可以在同一流行为中配置.

  3. 创建流策略, 并绑定流分类与流行为

    [Huawei]traffic policy policy-name
    [Huawei-trafficpolicy-policyname]classifier classifier-name behavior behavior-name

光看配置格式是没用的, 熟悉配置还得举例分析.

配置举例

需求: 内网存在两个网段: 10.1.1.0/24、10.1.2.0/24, 在RTA上通过MQC实现策略路由, 实现网段1通过ISP1访问Internet, 网段2通过ISP2访问Internet. 将MQC调用在RTA的g0/0/0接口.

要点:

  1. 接口策略一般是结合高级ACL使用;
  2. 匹配内容和执行动作是完全独立的, 只有最后再traffic policy里面才会组合在一起.

RTA:

  1. 配置ACL3000、3001分别匹配网段1和网段2访问Internet的流量

    acl 3000
    rule 5 permit ip source 10.1.1.0 0.0.0.255 destination 0.0.0.0 0
    acl 3001
    rule 5 permit ip source 10.1.2.0 0.0.0.255 destination 0.0.0.0 0
    qu
  2. 创建流分类1和2, 分别匹配acl 3000和acl 3001

    traffic classifier 1
    if-match acl 3000
    traffic classifier 2
    if-match acl 3001
    qu
  3. 创建流行为1、2分别执行将报文重定向到202.1.2.3、154.1.2.3的动作

    traffic behavior 1
    redirect ip-nexthop 202.1.2.3
    traffic behavior 2
    redirect ip-nexthop 154.1.2.3
    qu
  4. 创建流策略Redirect, 将流分类1、2与流行为1、2进行绑定

    traffic policy Redirect
    classifier 1 behavior 1
    classifier 2 behavior 2
    qu
  5. 在G0/0/0接口入方向上调用流策略Redirect

    int g0/0/0
    traffic-policy Redirect inbound

    注意:流策略我们目前只用在接口的入方向使用

5.2.3 智能策略路由

不展开, 可以先点个关注, 期待我以后的博客.

5.3 路由策略和策略路由的区别

名称 操作对象 描述
路由策略(Route-policy) 路由信息 路由策略是一套用于对路由信息的操作或控制, 来影响数据报文的转发路径.
策略路由 数据报文 策略路由直接对数据报文进行操作, 通过多种手段匹配感兴趣的报文, 然后执行丢弃或强制转发路径等操作.

5.4 流量过滤工具的区别

思考

  1. 如果ACL为空, 通过traffic-filter调用ACL, 会出现什么现象?

    如果ACL为空, 则调用该ACL无意义, 表示没有规则, ip-prefix同理.

  2. Filter-policy export在ospf和BGP中的作用分别是?

    BGP: 距离矢量路由, export控制的是发送出去的路由;

    OSPF: 链路状态路由协议, export只能在ASBR上配置, 用于阻止生成五类/七类LSA.

  3. 使用MQC方式过滤流量时, 流分类中匹配的ACL与Traffic-Filter调用ACL有何区别?

    流分类(traffic classifier)功能: 匹配工具, 针对数据流量根据一些特定进行分类匹配.

    Traffic-filter功能: 利用ACL匹配流量并实施过滤行为.

    二者调用ACL的差别: 流分类调用ACL主要是匹配, traffic-filter调用ACL是直接拿来过滤.

  4. 流策略为啥只能在入方向使用?

    因为出接口调用已经没意义了, 流策略是策略路由里面的接口策略, 是为了数据流量从其他设备转发过来的时候, 进行路由选择之前直接进行策略转发, 所以需要在入方向直接执行策略

    如果在出方向使用,设备会先进行路由表查询, 然后到出接口转发, 此时出接口配置流策略无意义, 因为路由表已经查询好了.

    但是需要注意:出方向现阶段用不到, 出方向一般是针对QoS或者是大二层环境才会使用, 对发送出去的报文进行内容修改.

HCIP-ICT实战进阶05-路由策略与策略路由的更多相关文章

  1. 路由策略和策略路由 & route-map

    今天,这个专题应用下route-map,在这个之前,有很多内容需要掌握,不是简单的制定一个路由图就可以了. -------- 本次专题理论的东西居多,但是不是复制黏贴,是加上自己的理解思想. 第一个要 ...

  2. ip route rule 路由策略 高级路由 捆绑 网桥

    http://lwfs.net/2005/11/28/10/ #!/bin/bash IP0= IP1= GW0= GW1= NET0= NET1= DEV0=eth0 DEV1=eth1 # com ...

  3. CCNP路由实验之九 路由策略

     CCNP路由实验之九 路由策略 路由器在公布与接收路由信息时,可能须要实施一些策略.以便对路由信息进行过滤,比如仅仅接收或公布满足一定条件的路由信息. 一种路由协议可能须要引入其它的路由协议发现 ...

  4. 某大型企业ospf面试题分析(含路由策略和路由过滤,及双点双向重发布)

    面试问题背景 本面试题来自国内最大通信技术公司之一,央企,有很多金融网项目. 了解行业的同学,一定知道事哪个企业. 上面试问题(取自百哥收集整理的面试总结大全,关注百哥CSDN或知乎,不定期分享名企面 ...

  5. DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)

    要实现软件设计.软件开发在一个统一的思想.统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束. 虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍 ...

  6. DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)

    从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发. 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求:产品SPU与产品SKU,产品SPU主要 ...

  7. DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)

    前一篇文章我们完成了产品上下文的领域层,我们已经有了关于产品方面的简单领域逻辑,我们接着来实现产品上下文关于仓储持久化与应用层的用例如何来协调 领域逻辑与仓储持久化. 首先大家需要明确的是,产品上下文 ...

  8. DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)

    这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...

  9. Ionic APP-Web SPA开发进阶(二)Ionic进阶之路由去哪了

    Ionic进阶之路由去哪了 项目需求 在查看药品时,从药品列表中可以通过点击药品列表获取某一药品详情.提交订单时,同样可以查看药品详情.两种情形下,从药品详情返回后,应分别返回至原来的页面.如下图所示 ...

  10. DDD实战进阶第一波(九):开发一般业务的大健康行业直销系统(实现经销商上下文仓储与领域逻辑)

    上篇文章主要讲述了经销商上下文的需求与POCO对象,这篇文章主要讲述该界限上下文的仓储与领域逻辑的实现. 关于界限上下文与EF Core数据访问上下文参考产品上下文相应的实现,这里不再累述. 因为在经 ...

随机推荐

  1. Jenkins搭建与数据迁移实践

    概述 本文主要介绍内容如下: 1.使用Docker搭建Jenkins 2.迁移原Jenkins数据到新搭建的Jenkins中 3.在Jenkins容器内部配置Maven的私服配置 4.在Jenkins ...

  2. (Crack)SQL转Linq工具的使用——Linqer

    官方下载网站:http://www.sqltolinq.com/ 这是干什么用的         就是Sql语句转Linq  给不熟悉的小白用 再用Linq 转 Lambda      (用到Linq ...

  3. 【读书笔记】JS函数式编程指南

    第一章 海鸥群可以合并和繁育 conjoin breed var result = flock_a.conjoin(flock_c).breed(flock_b).conjoin(flo ck_a.b ...

  4. 艰难的 debug 经历,vscode 无法获取远程环境 ssh 报错,windows 11 ssh

    背景介绍 要做系统结构实验,学校和华为云合作使用华为云的 aarch64 裸机,需要使用 ssh 远程开发,笔者为了追求良好的开发体验,决定使用 vscode 开发,实验环境配置过程中遇到了两个问题, ...

  5. Grafana 系列文章(十四):Helm 安装Loki

    前言 写或者翻译这么多篇 Loki 相关的文章了, 发现还没写怎么安装 现在开始介绍如何使用 Helm 安装 Loki. 前提 有 Helm, 并且添加 Grafana 的官方源: helm repo ...

  6. IoT 边缘集群基于 Kubernetes Events 的告警通知实现

    背景 边缘集群(基于 树莓派 + K3S) 需要实现基本的告警功能. 边缘集群限制 CPU/内存/存储 资源紧张,无法支撑至少需要 2GB 以上内存和大量存储的基于 Prometheus 的完整监控体 ...

  7. 郁金香逆向 2.便利怪物对象数组 纯C写法

    读取基础地址 获取节点数量 打印怪物列表 进行遍历 环环相扣

  8. Java基础语法:运算符、包机制、JavaDoc

    Java基础语法:运算符.包机制.JavaDoc 自增.自减.一元运算符:++.-- 例子:b = a++; -->先给b赋值,a再自增:b=a; a=a+1; b = ++a; -->a ...

  9. LG P5244 [USACO19FEB] Mowing Mischief P

    \(\text{Code}\) #include <bits/stdc++.h> #define IN inline #define eb emplace_back using names ...

  10. Error in created hook: "TypeError: Cannot read properties of undefined (reading 'get')"

    写Vue 的时候常遇到的错误之一就是XXXXXX未定义,然后来一个undefined这种问题一般都是创建钩子出错:无法读取未定义的 xxx 属性. 此错误一般多出现在 created() 中, Vue ...