PBR(基于策略的路由)概述
基于策略的路由(PBR)是一种灵活的数据包路由转发机制。通过在路由器上应用策略路由,使路由器根据路由映射(route-map)决定经过路由器的数据包如何处理。路由映射决定了一个数据包的下一跳转发路由器。
在路由器上应用策略路由,必须要指定策略路由使用的路由映射(route-map),并且要创建路由映射。一个路由映射由很多条策略组成,每个策略都定义了1个或多个匹配规则和对应操作。一个接口应用策略路由后,将对该接口收到的所有包进行检查,不符合路由映射中所定义的数据包将会被按照正常路由转发进行处理,符合路由映射中的策略的数据包,就按照策略中定义的操作进行处理。
策略路由主要应用在企业路由表复杂或者需要对路由进行控制的情况下,特别是当企业网络出口有两条,需要对不同服务和应用或者不同客户端的路由进行控制时,当然企业内部运行两个网络或者更多的网络时也经常要用到路由策略;另外,策略路由除了应用在非正常的路由选路之外,它还可以用来防止病毒或***的***,使用条件语句将病毒或***的特征码匹配出来,然后再指定一个安全策略(如使用黑洞路由)将***阻断.
黑洞路由是对动态路由选择协议的一个补充。黑洞路由可以将不想要的流量转发到一个称为null0的接口中去。我们可以建立一条或一些静态路由,将精确匹配这些路由的流量丢弃。和ACL不同的是,Cisco IOS的所有交换过程,包括CEF,都能处理黑洞路由,而不降低性能。需要注意的是,PBR技术不支持配置了PBR的路由器始发流量和到达该路由器的流量。
PBR(基于策略的路由)实例解析
下面我们就以一个试验来描述策略路由的阻断流量的功能。路由器的E0/0口作为内部网络的网关,地址为200.1.1.1,内部网络有一个WWW服务器,地址为200.1.1.100,和WWW同一网段内有普通用户PC一台,在外部网络有一个远程的用户,IP地址为199.1.1.100,允许远程用户能够访问WWW服务器,同时不允许访问内部用户的PC机,使用PBR完成需求。
在路由器上配置相关的地址,并测试与200.1.1.100,200.1.1.10和199.1.1.100的连通性。配置一个路由映射(route-map),匹配从远程用户到内部用户的流量,并牵引到null0接口中去,并在null0接口下配置不返回不可达信息。其他不匹配路由映射的流量正常转发。
路由器的初始配置如下:
- Router(config)#interface Ethernet0/0
- Router(config-if)#ip address 200.1.1.1 255.255.255.0
- Router(config-if)#exit
- Router(config)#interface Ethernet0/1
- Router(config-if)#ip address 199.1.1.1 255.255.255.0
- Router(config-if)#exit
测试连通性:
- Router#ping 200.1.1.100
- Type escape sequence to abort.
- Sending 5, 100-byte ICMP Echos to 200.1.1.100, timeout is 2 seconds:
- !!!!!
- Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms
- Router #ping 200.1.1.10
- Type escape sequence to abort.
- Sending 5, 100-byte ICMP Echos to 200.1.1.10, timeout is 2 seconds:
- !!!!!
- Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
- Router #ping 199.1.1.100
- Type escape sequence to abort.
- Sending 5, 100-byte ICMP Echos to 199.1.1.100, timeout is 2 seconds:
- !!!!!
- Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms
配置匹配敏感流量的ACL:
- Router(config)#access-list 100 permit ip host 199.1.1.1 host 200.1.1.10
配置null0接口:
- Router(config)#interface null 0
- Router(config-if)#no ip unreachables
建立路由映射:
- Router(config)#route-map pbr
- Router(config- route-map)#match ip address 100
- Router(config- route-map)#set interface null 0
在出口路由器的E0/1接口上打开NETFLOW交换功能,方便我们对结果进行查看,并在该接口上调用PBR:
- Router(config)#interface Ethernet0/1
- Router(config-if)#ip route-cache flow
- Router(config-if)# ip policy route-map pbr
- Router(config-if)#exit
- 在远程主机上对内网的设备再次进行连通性测试:
- C:\>ping 200.1.1.100
- Pinging 200.1.1.100 with 32 bytes of data:
- Reply from 200.1.1.100: bytes=32 time<1ms TTL=128
- Reply from 200.1.1.100: bytes=32 time<1ms TTL=128
- Reply from 200.1.1.100: bytes=32 time<1ms TTL=128
- Reply from 200.1.1.100: bytes=32 time<1ms TTL=128
- Ping statistics for 200.1.1.100:
- Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
- Approximate round trip times in milli-seconds:
- Minimum = 0ms, Maximum = 0ms, Average = 0ms
- C:\>ping 200.1.1.10
- Pinging 200.1.1.10 with 32 bytes of data:
- Request timed out.
- Request timed out.
- Request timed out.
- Request timed out.
- Ping statistics for 200.1.1.10:
- Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
这时,会发现外部网络的远程用户已经无法ping通内部的用户了,但是还是可以ping通WWW服务器。查看边界路由器的状态:
- Router#show access-lists
- Extended IP access list 100
- 10 permit ip host 199.1.1.100 host 200.1.1.10 (18 matches)
- Router#show ip cache flow
- IP packet size distribution (18 total packets):
- 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480
- .000 .000 .000 1.00 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
- 512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
- .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
- IP Flow Switching Cache, 278544 bytes
- 1 active, 4095 inactive, 3 added
- 66 ager polls, 0 flow alloc failures
- Active flows timeout in 30 minutes
- Inactive flows timeout in 15 seconds
- last clearing of statistics never
- Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)
- -------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow
- ICMP 2 0.0 5 100 0.0 4.0 15.3
- Total: 2 0.0 5 100 0.0 4.0 15.3
- SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
- Et0/1 199.1.1.100 Null 200.1.1.10 01 0000 0800 18
通过效果图我们发现,有18个数据包匹配了ACL,并被PBR牵引到null0接口后丢弃了。