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

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

0 前言

什么是路由策略?

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

什么是策略路由?

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

1 路由控制的技术背景

image-20221105104133331

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

image-20221111182620293

注: 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存在的缺陷

image-20221105144718090

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

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

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

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

image-20221112082953309

类比ACL

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

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

匹配机制

image-20221112083022505

配置命令

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

配置举例

image-20221112083055412

  • 单语句匹配

    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是流量过滤工具.

image-20221114210801289

配置命令

  • 在接口上配置

    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

image-20221112090350479

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

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

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

3.2.1 距离矢量路由协议

image-20221113105339149

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

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

BGP:

image-20221113105711624

配置命令

对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 链路状态路由协议

image-20221113111129590

OSPF:

image-20221112090845723

ISIS:

image-20221112091458750

  • 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更多会称之为路由图.

image-20221113113308337

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

主要作用:

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

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

4.1.1 Route-policy组成

image-20221105162338902

一个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的匹配顺序

image-20221105163521197

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:

    image-20221113114508048

    • 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 对接收的路由做过滤

image-20221113220057229

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 对发布的路由做过滤

image-20221114094930110

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 修改路由属性

image-20221114094934762

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 双点双向引入

image-20221114100458542

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

除了双点双向引入之外:

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

4.2.5 次优路径问题

image-20221114130416594

以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.

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

解决次优路径

image-20221114130652274

  • 方案一:

    在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 环路问题

image-20221114131434871

解决环路问题

方案一
在双点双向设备上配置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

效果:

image-20221114210334169

R3:

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

R4:

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

5 策略路由

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

image-20221114210921768

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

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

image-20221114211453950

策略路由使得网络设备不仅能够基于报文的目的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 本地策略路由

image-20221114214502988

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

本地策略路由-结构

image-20221114215555375

  • 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配置接口调用.

本地路由策略-匹配顺序

image-20221114222251968

5.2.2 接口策略路由

image-20221114214518382

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

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

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

image-20221115085953273

image-20221115090126289

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

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

流分类(traffic classifier)

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

image-20221115090100838

流行为(traffic behavior)

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

image-20221115090143101

流策略(traffic policy)

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

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

image-20221115090159755

配置

  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
    

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

配置举例

image-20221115091525653

需求: 内网存在两个网段: 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 流量过滤工具的区别

image-20221115092857339

思考

  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或者是大二层环境才会使用, 对发送出去的报文进行内容修改.

posted @ 2022-11-15 19:21  Qurare  阅读(1064)  评论(0编辑  收藏  举报