PBR
拓扑图
实验目的
使用PBR调整路由选路,在缺省情况下PC1、PC2在OSPF的路由计算下前往8.8.8.8的路径都是从AR2走。这样就导致上半段线路压力大,而下半段链路空闲。现在需要强制让PC2访问8.8.8.8,选择从AR3走,而其他路由还是通过路由表进行选路。那么我们需要怎样配置接口PBR策略路由来实现呢?
实验步骤
1.实现全网路由互通
S1:
vlan batch 10 20 30
#
interface Vlanif10
ip address 192.168.1.2 255.255.255.0
#
interface Vlanif20
ip address 192.168.2.2 255.255.255.0
#
interface Vlanif30
ip address 192.168.3.1 255.255.255.0
#
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
#
interface GigabitEthernet0/0/3
port link-type access
port default vlan 30
#
ospf 1
area 0.0.0.0
network 0.0.0.0 255.255.255.255
R1:
interface GigabitEthernet0/0/0
ip address 192.168.3.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.0.12.1 255.255.255.0
#
interface GigabitEthernet0/0/2
ip address 10.0.13.1 255.255.255.0
ospf cost 1000
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 0.0.0.0 255.255.255.255
R2:
interface GigabitEthernet0/0/0
ip address 10.0.12.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.0.24.2 255.255.255.0
#
interface NULL0
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 0.0.0.0 255.255.255.255
R3:
interface GigabitEthernet0/0/0
ip address 10.0.13.3 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.0.34.3 255.255.255.0
#
interface GigabitEthernet0/0/2
#
interface NULL0
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 0.0.0.0 255.255.255.255
R4:
interface GigabitEthernet0/0/0
ip address 10.0.24.4 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.0.34.4 255.255.255.0
#
interface GigabitEthernet0/0/2
#
interface NULL0
#
interface LoopBack0
ip address 8.8.8.8 255.255.255.255
#
ospf 1 router-id 4.4.4.4
area 0.0.0.0
network 0.0.0.0 255.255.255.255
2.将R1到R3的OSPF链路COST修改为1000,从而影响路由选路
interface GigabitEthernet0/0/2
ospf cost 1000
3.配置PBR,使得PC2去往8.8.8.8的路由从R3转发
ACL
acl number 3000
rule 5 permit ip source 192.168.2.0 0.0.0.255
注意:这里ACL 3000匹配的是源ip为192.168.2.0的路由,所以不管PC2访问8.8.8.8还是其他网段,在PBR影响下都会强制从R3过。
这样是有问题的,所以可以将ACL 3000改为
acl number 3000
rule permit ip source 192.168.2.0 0.0.0.255 destination 8.8.8.8 0.0.0.0
流分类PC2
traffic classifier PC2 operator or #华为设备缺省情况下为or,可以改为and
if-match acl 3000
流行为R3
traffic behavior AR3
redirect ip-nexthop 10.0.13.3
流策略PBR
traffic policy PBR
classifier PC2 behavior AR3
接口调用PBR
interface GigabitEthernet0/0/0
traffic-policy PBR inbound
#未来当流量进入G0/0/0后,会执行PBR匹配,若匹配上了就按照流行为去执行,若匹配不上,则该PBR对该流量报文无效,报文将继续执行路由表转发规则。
4.PC2上tracert 8.8.8.8,可以看见PC2发往8.8.8.8的报文是从R3转发出去的。
现在让我们思考一下,PC2发往8.8.8.8后,8.8.8.8会选择从那条路径给PC2回包呢?
在R4上tracertPC2看看,可以看到还是从R3回包的。
实验拓展
在现实中路由器和路由器之间一般不会直接相连,中间会有像交换机、光猫等设备相连。那么我们来模拟一下实际情况。在R1和R3间加上一台交换机。
1.shutdown掉R3的G0/0/0接口
[R3-GigabitEthernet0/0/0]shutdown
2.可以看见虽然交换机和R3之间的链路断了,但R1和交换机的链路还是正常的。
现在PC2上tracert8.8.8.8看看。
发现PC2访问8.8.8.8还是走的R3,那么现在就出现了路由黑洞。
有什么解决方法呢?
先让我们分析一下,现在R3与交换机之间的链路已经断开了,但是PC2依旧还是通过PBR规则向R3转发流量。我们需要的就是在PC2执行PBR规则时能够检测链路的连通性。
解决方法:在流行为上挂载NQA链路检测,检测链路到达R3的10.0.13.3连通性。
1.NQA配置
R1:
[R1]nqa test-instance test icmp #创建一个叫test基于ICMP的NQA检测
[R1-nqa-test-icmp]test-type icmp #检测类型icmp
[R1-nqa-test-icmp]destination-address ipv4 10.0.13.3 #检测目的ipv4地址
[R1-nqa-test-icmp]frequency 3 #检测间隔3s
[R1-nqa-test-icmp]start now
2.在PBR流行为上挂载NQA
[R1-behavior-R3]traffic behavior AR3
[R1-behavior-AR3]redirect ip-nexthop 10.0.13.3 track nqa test icmp
3.现在tracert,可以看见PC2已经从R2走了。
本地始发PBR
上面的实验我们配的是一个接口PBR,是在R1的g0/0/0口是上配置的。
现在我们尝试配置一个本地始发的PBR
1.ACL2000,匹配R1上的环回地址1.1.1.1
[R1]acl 2000
[R1-acl-basic-2000]rule permit source 1.1.1.1 0.0.0.0 #匹配R1上的1.1.1.1为源IP
2.在R1上配置PBR
[R1]policy-based-route PBR-2 permit node 10
[R1-policy-based-route-PBR-2-10]if-match acl 2000 #匹配ACL2000
[R1-policy-based-route-PBR-2-10]apply ip-address next-hop 10.0.13.3 #强制下一条ip为10.0.13.3
3.在R1上挂载本地始发的PBR
[R1]ip local policy-based-route PBR-2
4.现在本地始发的PBR-2就实现了,我们在R1上尝试tracert -a 1.1.1.1 8.8.8.8,可以看见走的是10.0.13.3。
5.但是当我们把PBR-2删除后,1.1.1.1到8.8.8.8的选路就会变成从R2走。因为R2的cost小。