——————————————————————————————————————————————————
——————————————————————————————————————————————————
通常,路由器仅根据IP报文中的目的地址查看路由表并进行转发,报文其他的信息不作为报文转发的依据。实际中,有时需要具有相同的地址的数据流被分布到不同的路径上。策略路由(Policy-based-route,PBR)是一种依据用户指定的策略进行路由选择的机制。通过合理应用策略路由技术,路由器可以根据到达报文的源地址、报文长度等信息灵活的进行路由选择。
传统路由器是根据报文的目的地址查找路由表进行报文转发,这样在目的地址相同的情况下,无法进行报文的选路控制。
——————————————————————————————————————————————————
如图:校园有两个出口:1个连接到internet SP1,一个连接到教育网Cernet。校园网既有访问Internet的需求,也有访问Cernet的需求。为了提高访问效率,需要路由器AR5对从园区内网到外网的流量进行分流。也就是访问ISP1的数据流从G0/0/1接口转发出去,所有访问ISP2的数据流从G0/0/2接口转发出去。而传统路由器在转发时无法对这两种数据流进行区分(传统路由使用缺省方式,在路由表存在两条缺省路由:一条下一跳internet,另一条的下一跳是Cernert),这时就需要使用策略路由来解决问题。
策略路由是一种依据用户制定的策略进行路由选择的机制。与单纯依照IP报文的目的地查找路由表进行转发不同,策略路由基于到达报文的源地址、目的地址、长度、协议类型等信息灵活的进行路由选择。对于满足一定条件(报文的长度或ACL规则)的报文,将执行一定的操作(设置转发报文的VPN实例,设置报文优先级,设置报文出接口和下一跳,设置报文缺省出接口和下一跳等) ,以指导报文的转发。
根据作用对象的不同,策略路由可分为本地策略路由和接口策略路由两种类型。
1、本地:对本地产生的报文(比如本地发出的Ping报文)进行策略路由,它只对本地产生的报文起作用,对转发的报文不起作用。
2、接口:对到达该接口的报文进行策略路由,它只对转发的报文起作用,对本地产生的报文不起作用。
大多数情况下使用的是接口策略路由。
一般来讲,策略路由的优先级要高于普通路由,即报文先按照策略路由进行转发,如果无法匹配到所有条件,不能按照策略路由进行转发,再按照普通路由转发。但是对于配置了缺省出接口的情况,则先进行普通路由转发,如果无法匹配,再进行策略路由转发。
——————————————————————————————————————————————————
为了实现策略路由,首先要定义将要实施策略路由的报文特征,即定义一组匹配规则。可以报文中的不同特征(如源地址、长度等)作为匹配依据进行设置,然后再将策略路由应用。使路由器根据预先指定的策略对报文进行转发。
一个策略路由可以由一组带有编号(node-number)的节点(node)构成,每个节点匹配检查的一个单元。在匹配过程中,系统按照节点编号顺序检查。值越小优先级越高。
每个节点由一组if-match和apply子句组成。if-match子句定义节点的匹配规则,对象是:源IP、目的IP、报文承载协议、端口号、报文长度等。apply子句定义通过该节点过滤后进行的动作。
节点模式:允许和拒绝。允许表示当IP报文通过该节点过滤后,将执行该节点的apply子句,而拒绝模式apply语句不会被执行。
通过一个节点所定义的策略报文不再参与其他节点策略的过滤和处理,如果报文不能通过一个PBR所有节点的过滤,则认为没有通过PBR,该报文将按照正常转发流程处理。
节点的匹配模式、if-match子句及apply子句三者关系。
报文满足此节点的所有if-match子句---------(Permit允许模式)执行此节点apply子句,不再匹配下一节点------------(Deny拒绝模式)不执行此节点apply子句,不再匹配下一节点,报文按照正常流程转发处理。
报文不满足此节点的if-match子句----------(Permit允许模式)不执行此节点apply子句,继续匹配下一节点-------(Deny拒绝模式)不执行此节点apply子句,继续匹配下一节点。
——————————————————————————————————————————————————
策略路由提供了3种if-match子句,分别为:if-match packet-length、if-match reverse-input-interface和if-match acl。
在一个节点中,同一类型if-match子句最多只能有一条。同一个节点的多if-match子句是与的关系,即必须满足该节点所有子句。
策略路由提供了7种apply子句,分别为:apply access- -instance、apply ip-precedence、apply output-interface、apply ip-address next-hop、apply default output-interface、apply ip-address default next-hop及apply ip-df zero。
1、apply ip-df zero:设置IP首部DF标志为0,该子句配置后,会首先被执行,将报文的IP首部DF标志设置0。
2、apply access- -instance:配置转发报文的VPN实例,该子句优先级低于apply ip-df zero,但高于其他子句,并且该子句被执行后,不再执行其他apply子句。
3、apply ip-precedence:配置报文的优先级,在公网转发中,即在未配置apply access- -instance的情况下,只要配置该子句,就一定会被执行。
4、apply output-interface、apply ip-address next-hop:配置策略路由出接口和下一跳。其中apply output-interface优先级高于apply ip-address next-hop。当两条命令同时配置并且都有效,系统只会执行apply output-interface。
5、apply default output-interface、apply ip-address default next-hop:配置策略路由缺省出接口和下一跳。同样前者优先级高于后者。当同时配置时,系统只会执行apply default output-interface。执行缺省出接口和下一跳命令前提是,在策略路由中报文没有配置出接口或下一跳,或者配置的出接口和下一跳无效,并且报文目的IP地址在路由表中没有查到相应的路由,这时才会使用策略路由配置的缺省下一跳或出接口。
——————————————————————————————————————————————————
dis ip policy-based-route:显示系统和接口应用的所有策略路由信息。
dis ip policy-based-route setup Interface-type interface-number。:显示系统的策略路由设置情况。
dis ip policy-based-route statistics { Interface-type interface-number。 | local}:显示策略路由的统计信息。
dis ip policy-based-route Name:显示已经配置的策略路由
reset policy-based-route statistics Nmae:重置策略路由统计信息。
——————————————————————————————————————————————————
——————————————————————————————————————————————————
如图:AR5分别和AR6/AR7直连。通过策略路由控制从AR5发出的报文,所有TCP报文均通过G0/0/2发送,其他报文仍然按照查找路由表方式发送。
AR5:
interface GigabitEthernet0/0/1
ip address 10.1.1.1 255.255.255.252
interface GigabitEthernet0/0/2
ip address 10.2.1.1 255.255.255.252
//配置ACL。
acl number 3000
rule 5 permit tcp
//配置使TCP报文被发往G0/0/2接口
policy-based-route tcp permit node 10
if-match acl 3000
apply output-interface GigabitEthernet0/0/2
//在AR5上应用本地策略路由
ip local policy-based-route tcp
AR6:
interface GigabitEthernet0/0/0
ip address 10.1.1.2 255.255.255.252
aaa
local-user huawei password cipher huawei
local-user huawei service-type telnet
user-interface vty 0 4
authentication-mode aaa
protocol inbound telnet
AR7
interface GigabitEthernet0/0/0
ip address 10.2.1.2 255.255.255.252
aaa
local-user huawei password cipher huawei
local-user huawei service-type telnet
user-interface vty 0 4
authentication-mode aaa
protocol inbound telnet
在AR5上Telnet AR7。显示成功的。
在AR5上telnet AR6,不通。。
Telnet使用TCP协议,Ping使用ICMP协议,所以AR5发出的TCP报文只从G0/0/2发送,不从G0/0/1发送,但可以发送非TCP报文。
——————————————————————————————————————————————————
在华为S系列交换机上,策略路由通过重定向实现,通过配置策略路由可以达到接口的符合流分类规则的三层报文重定向到指定的下一跳地址。
在某些需要指定特定的数据流走特定的下一跳的场景下可以使用策略路由实现,例如使不同的数据流通过不同的链路进行发送,提高链路的利用效率。将数据流引流到防火墙等安全设备,进行安全过滤;在满足业务服务质量的前提下,选择费用较低的链路传输业务数据,从而降低企业数据服务成本。
注意事项
1、如果设备上没有命中下一跳IP地址对应的ARP表项,设备会触发ARP学习,如果一直学习不到ARP,则按报文原始转发路径转发。
2、如果通过redirect ip-nexthop命令配置多个下一跳时,设备按照主备方式对报文进行重定向发送。配置前面的下一跳IP地址优先级高,当主用链路down掉后,则自动优选优先级高的下一跳作为新的主链路。
3、如果通过redirect ip-multihop命令配置多个下一跳,设备按照等价路由负载分担方式对报文进行重定向转发。
如图:公司用户通过AR1双归属到外部网络设备。其中10.1.1.1是高速链路,另外一条是低速链路。公司有两台机器,192.168.1.0/24对链路要求比较高,所以决定该网段走高速。剩余的2.0/24走低速。
SW1:
vlan batch 10 20 100
interface GigabitEthernet0/0/1
port link-type access
port default vlan 20
interface GigabitEthernet0/0/2
port link-type access
port default vlan 10
interface GigabitEthernet0/0/3
port link-type access
port default vlan 100
interface Vlanif10
ip address 192.168.1.254 255.255.255.0
interface Vlanif20
ip address 192.168.2.254 255.255.255.0
interface Vlanif100
ip address 1.1.1.1 255.255.255.252
ip route-static 0.0.0.0 0.0.0.0 1.1.1.2
AR1:
interface GigabitEthernet0/0/0
ip address 10.1.1.1 255.255.255.252
interface GigabitEthernet0/0/1
ip address 10.1.1.5 255.255.255.252
interface GigabitEthernet0/0/2
ip address 1.1.1.2 255.255.255.252
ip route-static 192.168.0.0 255.255.0.0 1.1.1.1
ip route-static 0.0.0.0 0.0.0.0 10.1.1.2
ip route-static 0.0.0.0 0.0.0.0 10.1.1.6
AR6:
interface GigabitEthernet0/0/0
ip address 10.1.1.2 255.255.255.252
AR7:
interface GigabitEthernet0/0/0
ip address 10.1.1.6 255.255.255.252
//完成上述步骤后,内网能够正常访问外网,但是不能保证192.168.1.0/24的网段用户的数据走高速链路,192.168.2.0/24数据走低速。
在AR1上配置策略路由。
AR1:
//配置ACL规则,匹配内网网段数据流。
acl number 3000
rule 5 permit ip source 192.168.1.0 0.0.0.255
acl number 3001
rule 5 permit ip source 192.168.2.0 0.0.0.255
//配置流分类。分别关联ACL。
traffic classifier disu operator or
if-match acl 3001
traffic classifier gaosu operator or
if-match acl 3000
//配置流行为。分别指定动作。
traffic behavior gaosu1
redirect ip-nexthop 10.1.1.2
traffic behavior disu1
redirect ip-nexthop 10.1.1.6
//创建流策略,将流分类和行为进行绑定。
traffic policy WAN
classifier gaosu behavior gaosu1
classifier disu behavior disu1
//应用到接口上。
interface GigabitEthernet0/0/2
traffic-policy WAN inbound
dis acl 3000/3001:查看ACL配置信息
dis traffic classifier user-defined:查看流分类配置信息
dis traffic policy user-defined WAN:查看流策略的配置信息。
还有基于优先级的策略路由,通过低优先级实现路由选路。自行研究~~
主要是在创建流分类的时候,traffic classifier ceshi1 precedence 5。 traffic classifier ceshi2 precedence 10。
5的优先级要比10高。
在创建流行为的时候,分别匹配下一跳的时候,可以指定low-precedence参数,优先级为low-precedence。比路由协议生成或静态配置的路由优先级低。
——————————————————————————————————————————————————
——————————————————————————————————————————————————
如图,内网192.168.1.0/24的流量按理说,从核心交换机直接出外部。。外部的路由直接进入内部。但是现在买了台防火墙,不能影响正常业务流转。或者增加了一台IPS入侵防御。。要求所有进入核心的流量都需要重定向到防火墙或安全设备,进行数据检测过滤或阻断。对外部进入的流量也需要经过安全设备清洗阻断。
有时候旁路也有很多优势。。比如一般的旁路设备都是配置端口镜像,复制流量到设备进行数据分析。配置简单,不影响现网。比如日志审计设备旁路的话,不影响现网,也能满足需求。。。安全设备要根据设备的特性及环境的需求,进行串联或者旁路。
端口镜像也有它的特点,复制一份流量到安全设备,然后安全设备对流量进行分析,产生告警。端口镜像的缺点:就是安全设备不能去执行阻断行为。而且流量不像串联那样,流量照样流出外部,只是复制了一份流量而已。所以当产生威胁,第一不能阻断,第二流量已经流出外部,属于事后行为。
而配置路由策略,把数据按需引流到安全设备,发现问题及时告警及阻断。就类似于串联在一起。但是缺点也有,流量进入设备又返回。配置起来也不复杂,不影响业务的生产。
有些东西也不是绝对,现实中这种需求也不是很多,所有的东西都是符合场景去实施的。旁路也有很多种方式,核心到防火墙连2根线,意义上分为上行和下行线路。之间跑OSPF动态协议。外部进入的流量走下行线路,内部出去的流量走上行线路。逻辑都是一回事。
策略路由优先于路由表。当安全设备发生故障,配合NQA联动,当防火墙故障,策略路由失效,继续由路由表进行转发。
这个实验就直接贴配置了。没有配置NQA,到时候有专门的NQA。出口路由器一般都是NAT,到时候这个目的地址ACL指定的话,需要按实际情况去配置。并不是像上图一样指定ACL范围。
AR1:
acl number 3000
rule 5 permit ip source 192.168.1.0 0.0.0.255
acl number 3100
rule 5 permit ip source 192.168.100.0 0.0.0.255
traffic classifier neibu operator or
if-match acl 3000
traffic classifier waibu operator or
if-match acl 3100
traffic behavior neibu1
redirect ip-nexthop 10.1.1.6
traffic behavior waibu1
redirect ip-nexthop 10.1.1.6
traffic policy nb
classifier neibu behavior neibu1
traffic policy wb
classifier waibu behavior waibu1
interface GigabitEthernet0/0/0
ip address 192.168.1.254 255.255.255.0
traffic-policy nb inbound
interface GigabitEthernet0/0/1
ip address 10.1.1.5 255.255.255.252
interface GigabitEthernet0/0/2
ip address 10.1.1.1 255.255.255.252
traffic-policy wb inbound
ospf 100
default-route-advertise always
area 0.0.0.0
network 10.1.1.4 0.0.0.3
network 192.168.1.0 0.0.0.255
ip route-static 0.0.0.0 0.0.0.0 10.1.1.2
FW1:
interface GigabitEthernet0/0/0
undo shutdown
ip address 192.168.0.1 255.255.255.0
alias GE0/METH
service-manage http permit
service-manage https permit
service-manage ping permit
service-manage ssh permit
service-manage snmp permit
service-manage telnet permit
interface GigabitEthernet1/0/0
undo shutdown
ip address 10.1.1.6 255.255.255.252
service-manage http permit
service-manage https permit
service-manage ping permit
service-manage ssh permit
service-manage snmp permit
service-manage telnet permit
firewall zone trust
set priority 85
add interface GigabitEthernet1/0/0
ospf 100
area 0.0.0.0
network 10.1.1.4 0.0.0.3
ip route-static 192.168.1.0 255.255.255.0 10.1.1.5
ip route-static 192.168.100.0 255.255.255.0 10.1.1.5
AR2:
interface GigabitEthernet0/0/0
ip address 10.1.1.2 255.255.255.252
interface GigabitEthernet0/0/1
ip address 10.1.1.9 255.255.255.252
ip route-static 10.1.1.4 255.255.255.252 10.1.1.1
ip route-static 192.168.1.0 255.255.255.0 10.1.1.1
ip route-static 192.168.100.0 255.255.255.0 10.1.1.10
AR4:
interface GigabitEthernet0/0/0
ip address 10.1.1.10 255.255.255.252
interface GigabitEthernet0/0/1
ip address 192.168.100.254 255.255.255.0
ip route-static 10.1.1.4 255.255.255.252 10.1.1.9
ip route-static 192.168.1.0 255.255.255.0 10.1.1.9
——————————————————————————————————————————————————
10.1.1.19模拟下公网的一个地址。
在AR3上有两条等价的默认路由。
配置策略路由进行区分用户,192.168.1.0用户从10.1.1.4出去。192.168.2.0用户从10.1.1.8段出去。
AR3的配置。
vlan batch 10 20
acl number 3000
rule 5 permit ip source 192.168.1.0 0.0.0.255
acl number 3100
rule 5 permit ip source 192.168.2.0 0.0.0.255
traffic classifier liantong operator or
if-match acl 3100
traffic classifier dianxin operator or
if-match acl 3000
traffic behavior liantong1
redirect ip-nexthop 10.1.1.9 //定义下一跳,除了支持NQA检测链路进行切换,还有手册上说的主备下一跳。但是在ENSP的路由器上不支持。在交换机上支持 ,但是没试验过。
traffic behavior dianxin1
redirect ip-nexthop 10.1.1.5
traffic policy ISPliantong
traffic policy ISPdianxin
traffic policy PRB
classifier dianxin behavior dianxin1
classifier liantong behavior liantong1
interface Vlanif10
ip address 192.168.1.254 255.255.255.0
interface Vlanif20
ip address 192.168.2.254 255.255.255.0
interface GigabitEthernet0/0/0
ip address 192.168.100.254 255.255.255.0
interface GigabitEthernet0/0/1
ip address 10.1.1.6 255.255.255.252
traffic-policy ISPdianxin outbound
interface GigabitEthernet0/0/2
ip address 10.1.1.10 255.255.255.252
interface GigabitEthernet6/0/0
port link-type trunk
port trunk allow-pass vlan 10 20
traffic-policy PRB inbound
ip route-static 0.0.0.0 0.0.0.0 10.1.1.5
ip route-static 0.0.0.0 0.0.0.0 10.1.1.9
验证下:PC2从10.1.1.5出去的。PC3从10.1.1.9出去。
另外还有个需求。就是内部用户还需要访问Ser1,策略路由是在G6/0/0口的入方向生效。
流量进入G6/0/0,直接生效策略路由,把流量通过上行接口送出去。会导致内部用户无法访问Ser1。
通过Tracert服务器,发现直接从外部网络绕了一圈回来了。在实际的应用中,出口会做NAT转换的。这样送出去的流量会直接不通的。因为目的是私网IP。是无法在公网上进行路由的。实验中,没有配置NAT。所以从外部绕了一圈。。。。。
所以这也是应用策略路由后,会导致一些问题的点。。。
————————————————————————————————————————————
我们需求就是区分流量进行策略路由选路的同时,还能访问内部服务器。
acl number 3500
rule 5 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.100.0 0.0.0.255
rule 10 permit ip source 192.168.2.0 0.0.0.255 destination 192.168.100.0 0.0.0.255
traffic classifier Ser operator or
if-match acl 3500
traffic behavior Ser1 //默认不配置的行为,就是permit。匹配ACL流分类,然后行为是允许。放行的意思。
statistic enable //开启流量统计
traffic policy PRB //绑定在原来创建的PRB上。
classifier Ser behavior Ser1
interface GigabitEthernet6/0/0 //应用在接口上。
traffic-policy PRB inbound
验证下:没生效~~。还是从外部转了一圈。。
查询下:dis traffic policy statistics interface g6/0/0 inbound verbose rule-base
策略的状态是生效的。但是没流量。。
看下规则:最后一条规则需要放在第一位,和ACL的原理其实一样。逐条匹配的。
对于192.168.100.0目的段的,只有第三条是精细的。。。dianxin1和liantong1,目的都是any。包含了。所以第三条直接不生效。。源也给包含了。。所以把精细的放在第一位。
在验证下:PC3去10.1.1.19走的路由策略的liantong。
PC3去往192.168.100.1,走的核心,通过直连到服务器。
————————————————————————————————————————————————————
我们还有个需求就是。运营商AR2路由器硬件或者链路故障的时候,我们要能自动切换。。。AR2故障,所有就走AR1了,反之。。。。
这里的故障指的是:AR2路由器的故障,导致AR3的G0/0/1接口shutdown了,策略路由才会失效。。。。。如果因为AR2的G0/0/0接口shutdown,或者AR2因为其他原因导致的故障。。策略路由还会生效。直接从G0/0/1接口转发。结果到AR2后,导致转发不了等等原因。导致网络不能在出现故障时,自动切换。。总之一句话,只要AR3的G0/0/1是UP的其他故障,都不能进行自动切换。所以还需要配置NQA联动。
NQA
策略路由能够让用户在传统路由转发的基础上根据自己定义的策略进行报文选路和转发,但是传统的策略路由没有检测机制,当重定向下一跳对应的链路发生故障的时候,需要等待重定向下一跳的ARP表项老化以后策略路由才会失效。这就无法保证及时进行链路切换,可能造成较长时间的业务中断。
通过配置策略路由与NQA联动可以为策略路由提供检测机制,配置完以后,当重定向下一跳对应的链路发生故障的时候,重定向下一跳会因为NQA检测失败而立即失效,而不需要等待ARP表项老化。这样就可以达到缩短通信中断时间,提高服务质量的目的。
NQA也不止在策略路由里应用,应用的还比较广泛(VRRP,静态路由,路由策略,策略路由等等)。
nqa test-instance admin dianxin
test-type icmp //配置测试例类型为ICMP
destination-address ipv4 10.1.1.19 //配置NQA测试例的目的地址
frequency 6 //(可选)配置NQA测试例的自动执行测试间隔。缺省情况下,没有配置自动测试间隔,即只进行一次测试。
probe-count 2 //配置NQA测试例一次测试的探针数目。缺省情况下,测试探针数目是3。
start now //立即启动测试例
nqa test-instance admin liantong
test-type icmp
destination-address ipv4 10.1.1.9
frequency 6
probe-count 2
start now
traffic behavior liantong1
redirect ip-nexthop 10.1.1.9 track nqa admin liantong //和策略路由联动
traffic behavior dianxin1
redirect ip-nexthop 10.1.1.5 track nqa admin dianxin
//还可以和静态/默认路由进行联动
ip route-static 0.0.0.0 0.0.0.0 10.1.1.5 track nqa admin dianxin
ip route-static 0.0.0.0 0.0.0.0 10.1.1.9 track nqa admin liantong
按之前说的,如果把G0/0/0shutdown,那么策略路由指定的AR3把PC2的流量从G0/0/1口转发出去就一直不通了。。。现在shutdown试试。