Cisco中策略路由是在接口上通过配置route-map
对入方向
的数据包进行筛选,将符合规则的数据包转发到特定的下一跳地址。从而实现灵活的路径选择,通常在特殊场景中使用;与本地路由表相比,策略路由更优先,如果策略路由匹配失败,则再查找本地路由,如果本地路由未匹配,则丢弃报文;
策略路由对数据包的匹配可以基于源IP
、源和目的IP
或端口号
的自由组合。要掌握策略路由,需要记住以下几点:
route-map
只对入方向流量生效;access-list
来匹配数据报文(标准ACL和扩展ACL均可)permit
表示符合规则的数据报文在当前route-map的语句中进行转发;Deny
表示符合规则的数据报文跳出当前route-map语句,从下一条route-map语句开始逐条匹配直到匹配成功,若整个route-map均未匹配,则跳出route-map由本地路由转发;set语句
,默认动作跳出route-map,执行本地转发拓扑详见下图,需求如下:
网络寻址如上图所示, R2、R3、R4、R5路由配置如下:用于给主机回包。
ip route 192.168.1.0 255.255.255.0 12.1.1.1 //R2路由配置
ip route 192.168.1.0 255.255.255.0 13.1.1.1 //R3路由配置
ip route 192.168.1.0 255.255.255.0 14.1.1.1 //R4路由配置
ip route 192.168.1.0 255.255.255.0 15.1.1.1 //R5路由配置
R1 PBR配置:
#只允许192.168.1.1到3.3.3.3
access-list 2003 deny ip host 192.168.1.2 host 3.3.3.3
access-list 2003 permit ip host 192.168.1.1 host 3.3.3.3
#只允许192.168.1.2到4.4.4.4
access-list 2004 deny ip host 192.168.1.1 host 4.4.4.4
access-list 2004 permit ip host 192.168.1.2 host 4.4.4.4
#允许192.168.1.1和192.168.1.2 到5.5.5.5
access-list 2006 permit ip host 192.168.1.1 host 5.5.5.5
access-list 2006 permit ip host 192.168.1.2 host 5.5.5.5
!
route-map pbr permit 32
match ip address 2003
set ip next-hop 13.1.1.2
!
route-map pbr permit 42
match ip address 2004
set ip next-hop 14.1.1.2
!
route-map pbr permit 52
match ip address 2006
set ip next-hop 15.1.1.2
!
route-map pbr permit 65535
set ip default next-hop 12.1.1.2
在上面的配置中 我们新增一条语句route-map pbr permit 35
:完整代码如下:
route-map pbr permit 32
match ip address 2003
set ip next-hop 13.1.1.2
!
route-map pbr permit 35
!
route-map pbr permit 42
match ip address 2004
set ip next-hop 14.1.1.2
!
route-map pbr permit 52
match ip address 2006
set ip next-hop 15.1.1.2
!
route-map pbr permit 65535
set ip default next-hop 12.1.1.2
此时测试结果如下:
主机 | 2.2.2.2 | 3.3.3.3 | 4.4.4.4 | 5.5.5.5 |
---|---|---|---|---|
192.168.1.1 | 不通 | 通 | 不通 | 不通 |
192.168.1.2 | 不通 | 不通 | 不通 | 不通 |
为什么到2.2.2.2都不通了?
因为到2.2.2.2之前是因为匹配了route-map pbr permit 65535才通的。下载在编号为35的空语句将所有数据拦截跳出route-map转发进行本地转发了,故35之后的语句都不执行,所以不通了。如果在本地路由加去往2.2.2.2的路由,则能通
此例想说明route-map permit空语句默认匹配all,默认行为跳出route-map
将route-map pbr permit 35
修改为route-map pbr deny 35
,测试结果为
主机 | 2.2.2.2 | 3.3.3.3 | 4.4.4.4 | 5.5.5.5 |
---|---|---|---|---|
192.168.1.1 | 不通 | 通 | 不通 | 不通 |
192.168.1.2 | 不通 | 不通 | 不通 | 不通 |
此时在R1上加一条默认路由到12.1.1.2,如下:
R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
在添加路由后发现192.168.1.1 能ping 通2.2.2.2,通过这个例子想说明 route-map deny 语句将数据弹出route-map,转为本地路由表转发,故只要本地有路由即能通信
在route-map pbr permit 35
下匹配acl2005,ACL为deny,配置如下:
access-list 2005 deny ip 192.168.0.0 0.0.255.255 any
route-map pbr permit 32
match ip address 2003
!
route-map pbr permit 35
match ip address 2005
!
route-map pbr permit 42
match ip address 2004
set ip next-hop 14.1.1.2
!
route-map pbr permit 52
match ip address 2006
set ip next-hop 15.1.1.2
!
route-map pbr permit 65535
set ip default next-hop 12.1.1.2,
ping测试结果与第二部分案例研究一致,通过该例子想表示当ACL为deny时,将跳出当前route-map语句,即route-map pbr permit 35语句不能执行,执行其他route-map语句检测
在route-map pbr permit 35
下匹配acl2005,ACL为permit,配置如下:
access-list 2005 permit ip 192.168.0.0 0.0.255.255 any
route-map pbr permit 32
match ip address 2003
set ip next-hop 13.1.1.2
!
route-map pbr permit 35
match ip address 2005
set ip next-hop 13.1.1.2
!
route-map pbr permit 42
match ip address 2004
set ip next-hop 14.1.1.2
!
route-map pbr permit 52
match ip address 2006
set ip next-hop 15.1.1.2
!
route-map pbr permit 65535
set ip default next-hop 12.1.1.2,
192.168.1.1 ping 2.2.2.2 不通,被送到13.1.1.2;如果将set ip next-hop 13.1.1.2拿掉(即没有set语句有match语句,)则数据跳出route-map进行本地转发
将route-map
35 修改为deny,ALC为deny:
access-list 2005 deny ip 192.168.0.0 0.0.255.255 any
!
route-map pbr permit 32
match ip address 2003
set ip next-hop 13.1.1.2
!
route-map pbr deny 35
match ip address 2005
!
route-map pbr permit 42
match ip address 2004
set ip next-hop 14.1.1.2
!
route-map pbr permit 52
match ip address 2006
set ip next-hop 15.1.1.2
!
route-map pbr permit 65535
set ip default next-hop 12.1.1.2
ping测试结果与第二部分案例研究一致,通过该例子想表示当ACL为deny时,将跳出当前route-map语句(故route-map deny语句执行前就被跳出了),执行其他route-map语句检测
设置route-map deny 35 , ACL 为permit:
access-list 2005 permit ip 192.168.0.0 0.0.255.255 any
!
route-map pbr permit 32
match ip address 2003
set ip next-hop 13.1.1.2
!
route-map pbr deny 35
match ip address 2005
!
route-map pbr permit 42
match ip address 2004
set ip next-hop 14.1.1.2
!
route-map pbr permit 52
match ip address 2006
set ip next-hop 15.1.1.2
!
route-map pbr permit 65535
set ip default next-hop 12.1.1.2
主机 | 2.2.2.2 | 3.3.3.3 | 4.4.4.4 | 5.5.5.5 |
---|---|---|---|---|
192.168.1.1 | 不通 | 通 | 不通 | 不通 |
192.168.1.2 | 不通 | 不通 | 不通 | 不通 |
通过该例子想表明 当遇到route-map deny 的语句是,将跳出整个route-map,进行本地路由转发