HCIP-ICT实战进阶05-路由策略与策略路由
HCIP-ICT实战进阶05-路由策略与策略路由
0 前言
什么是路由策略?
- 基于报文的目的IP地址进行路由表查找, 之后转发数据;
- 针对控制平面, 为路由协议和路由表服务, 针对路由信息进行过滤或者是路由属性更改;
- 一般需要结合路由协议一起完成策略.
什么是策略路由?
- 基于策略转发, 如果策略失败, 在查找路由表, 之后转发数据;
- 针对转发平面, 直接为数据服务, 针对需要转发的数据, 直接控制转发;
- 一般需要手动在设备上逐台配置, 或者是在部分设备上调整转发路径.
1 路由控制的技术背景
正常情况下, 是通过路由特征定义, 然后结合路由策略工具进行路由信息更改.
注: filter-policy既是调用工具又是策略工具, 它拥有两个领域的功能.
路由策略会用到的工具:
-
条件工具: 用于将需要的路由筛选出来(就是匹配部分路由的工具);
通用的条件工具:
-
ACL(访问控制列表)
-
IP-Prefix(IP地址前缀列表)
BGP专用工具:
- AS-Path
- community filter
- ext-community filter
- RD Filter
-
-
策略工具: 用于将筛选出来的路由进行某个动作的执行(比如修改路由属性, 过滤路由等动作), 策略工具严格来说不能直接应用, 只是一个动作, 而不是执行;
通用策略工具: route-policy(有且只有一个)
-
调用工具: 将路由策略具体应用到某个路由协议中, 使其生效.
通用的调用工具:
- Filter-policy
- import-route
BGP专用:
- dampening
- network
- 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
配置举例
-
单语句匹配
-
路由10.1.1.0/24被permit, 其他都被deny
ip ip-prefix aa index 10 permit 10.1.1.0 24
-
路由全被deny
ip ip-prefix bb index 10 deny 10.1.1.0 24
-
-
多语句匹配
-
路由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
-
路由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
-
-
通配地址匹配
-
所有掩码长度在8-32的路由被permit
ip ip-prefix aa index 10 permit 10.0.0.0 8 le 32
-
路由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防止其生成.
配置命令:
-
调用ACL(isis在进程视图下, ospf在进程区域视图下):
filter-policy acl-number {import | export}
-
调用IP-Prefix(isis在进程视图下, ospf在进程区域视图下):
filter-policy ip-prefix-name {import | export}
4 策略工具
4.1 Route-policy(路由策略/路由图)
中文名称其实叫做路由策略, 一般为了区分route-policy和路由策略概念, route-policy更多会称之为路由图.
route-policy需要在创建之后,被其他调用工具调用.
主要作用:
- 对路由进行过滤;
- 对路由属性进行修改.
一个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为与关系.
配置命令
-
配置route-policy命令
[Huawei]route-policy route-policy-name {permit|deny} node node
创建路由策略并进入到route-policy视图.
-
配置if-match子句
[Huawei-route-policy]if-match ? acl 匹配基本acl cost 匹配路由信息的cost interface 匹配路由信息的出接口 ip-prefix 匹配前缀列表 ...
-
配置apply子句
[Huawei-route-policy]apply ? cost 设置路由的cost cost-type{type-1|type-2} 设置ospf的开销类型 ip-address next-hop 设置ipv4路由信息的下一跳地址 preference 设置路由协议的优先级 tag 设置路由信息的标记域 ...
-
配置允许所有:
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 双点双向引入
- 在边界路由器上把两个路由域的路由相互引入, 称为双向路由重发布.
- 两个路由域存在两个边界路由器, 并且都执行双向路由重发布, 测试称为双点双向路由重发布.
- 双点双向路由重发布是一种经典的路由模型, 因为单点的双向路由重发布缺乏冗余性, 一旦单点的边界路由器故障, 那么两个路由域之间的通信可能会出现问题, 因此在大型网络部署中一般采用双点双向路由重发布, 实现冗余备份.
- 双点双向路由重发布虽然增强了网络的可靠性, 但是容易引发次优路径、路由环路等问题.
除了双点双向引入之外:
- 单点单向引入:比如一台设备左边是OSPF,右边是ISIS, 该设备只将OSPF引入到ISIS里面, 则称为单点单向引入.
注意:单点单向引入,不需要考虑拓扑环境. - 单点双向引入:比如一台设备左边是OSPF,右边是ISIS, 该设备将OSPF引入到ISIS里面, 同时在OSPF里面将ISIS引入, 则称为单点双向引入
注意:单点双向向引入,不需要考虑拓扑环境. - 双点单向引入:拓扑环境至少是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 策略路由的优点
- 可以根据用户的需求定制流量转发路径(增强路由选择的灵活性和可控性);
- 可以使用不同流量通过不同的链路转发数据, 提高链路使用率;
- 在满足服务质量的同时可以选择费用较低链路传输数据, 降低成本.
5.2 策略路由分类
-
本地策略路由
使用工具: PBR(Policy-Based-Route)
只能针对本机产生的报文进行策略处理, 其他设备发送过来的流量不能通过本地策略处理.
-
接口策略路由
使用工具: traffic-policy
只能针对其他设备发送过来的流量能通过接口策略处理, 本机自己产生的报文不生效.
-
智能策略路由
使用工具: SPR(Smart Policy Route)
根据不同业务, 进行智能分流.
注: 华为体系中, PBR指的是本地策略路由, 其他体系中PBR是策略路由的统称.
5.2.1 本地策略路由
- 本地策略路由对本地始发流量生效, 如: 本地始发的ICMP报文;
- 本地策略路由在系统视图调用.
本地策略路由-结构
- PBR与Route-policy类似, 由多个节点组成, 每个节点由匹配条件(条件语句)和执行动作(执行语句)组成;
- 每个节点可以包含多个条件语句;
- 节点内的多个条件语句之间的关系为"与", 即匹配所有条件语句才会执行本节点内的动作;
- 节点之间的关系为"或", PBR根据节点编号从小到大顺序执行, 匹配到的节点将不会继续向下匹配.
本地策略路由-配置
配置同样类似route-policy
-
创建PBR:
[Huawei]policy-based-route policy-name {deny|permit} node node-id
创建策略路由和策略点, 若策略已创建则进入本地策略路由视图.
-
设置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地址, 也可以设置匹配报文长度.
-
指定PBR中报文的出接口:
[Huawei-policy-based-route-PBR-10]apply output-interface interface-type interface-number
缺省情况下, 策略路由中未配置报文的出接口. 配置成功后, 将匹配策略点的报文总指定出接口发送出去. 报文的出接口不能是以太网等广播类型接口.
-
设置PBR中报文的下一跳:
[Huawei-policy-based-route-PBR-10]apply ip-address next-hop ip-address1 [ip-address2]
用户可以指定报文的下一跳, 当该策略点未配置出接口时, 匹配策略点的报文被发往指定的下一跳.
-
全局PBR调用:
[Huawei]ip local policy-based-route policy-name
-
接口上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)的概念, 策略中的流行为匹配入、出方向的报文, 对匹配中的报文执行相应的流动作.
配置
-
创建流分类
[Huawei]traffic classifier classifier-name [operator{and|or}]
缺省情况下, 流分类中各规则之间的关系为"或"(or).
如果是"与"关系(and)且存在acl匹配, 则多个if-match中一定要有一个被匹配, 如果没有acl, 则所有规则都需要同时匹配.
如果是"或"关系(or), 在acl里的deny不再是表示不匹配, 而是会在traffic-classifier表示拒绝, 这里就不建议为acl配置rule deny xxx. -
创建流行为
[Huawei]traffic behavior behavior-name
根据实际情况定义流行为中的动作, 只要各动作不冲突, 都可以在同一流行为中配置.
-
创建流策略, 并绑定流分类与流行为
[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接口.
要点:
- 接口策略一般是结合高级ACL使用;
- 匹配内容和执行动作是完全独立的, 只有最后再traffic policy里面才会组合在一起.
RTA:
-
配置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
-
创建流分类1和2, 分别匹配acl 3000和acl 3001
traffic classifier 1 if-match acl 3000 traffic classifier 2 if-match acl 3001 qu
-
创建流行为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
-
创建流策略Redirect, 将流分类1、2与流行为1、2进行绑定
traffic policy Redirect classifier 1 behavior 1 classifier 2 behavior 2 qu
-
在G0/0/0接口入方向上调用流策略Redirect
int g0/0/0 traffic-policy Redirect inbound
注意:流策略我们目前只用在接口的入方向使用
5.2.3 智能策略路由
不展开, 可以先点个关注, 期待我以后的博客.
5.3 路由策略和策略路由的区别
名称 | 操作对象 | 描述 |
---|---|---|
路由策略(Route-policy) | 路由信息 | 路由策略是一套用于对路由信息的操作或控制, 来影响数据报文的转发路径. |
策略路由 | 数据报文 | 策略路由直接对数据报文进行操作, 通过多种手段匹配感兴趣的报文, 然后执行丢弃或强制转发路径等操作. |
5.4 流量过滤工具的区别
思考
-
如果ACL为空, 通过traffic-filter调用ACL, 会出现什么现象?
如果ACL为空, 则调用该ACL无意义, 表示没有规则, ip-prefix同理.
-
Filter-policy export在ospf和BGP中的作用分别是?
BGP: 距离矢量路由, export控制的是发送出去的路由;
OSPF: 链路状态路由协议, export只能在ASBR上配置, 用于阻止生成五类/七类LSA.
-
使用MQC方式过滤流量时, 流分类中匹配的ACL与Traffic-Filter调用ACL有何区别?
流分类(traffic classifier)功能: 匹配工具, 针对数据流量根据一些特定进行分类匹配.
Traffic-filter功能: 利用ACL匹配流量并实施过滤行为.
二者调用ACL的差别: 流分类调用ACL主要是匹配, traffic-filter调用ACL是直接拿来过滤.
-
流策略为啥只能在入方向使用?
因为出接口调用已经没意义了, 流策略是策略路由里面的接口策略, 是为了数据流量从其他设备转发过来的时候, 进行路由选择之前直接进行策略转发, 所以需要在入方向直接执行策略
如果在出方向使用,设备会先进行路由表查询, 然后到出接口转发, 此时出接口配置流策略无意义, 因为路由表已经查询好了.但是需要注意:出方向现阶段用不到, 出方向一般是针对QoS或者是大二层环境才会使用, 对发送出去的报文进行内容修改.
本文来自博客园,作者:Qurare,严禁转载至CSDN平台, 其他转载请注明原文链接:https://www.cnblogs.com/konjac-wjh/p/16893591.html