Route-map 技术说明:Technical Description路由映射和访问列表很类似,包含匹配确定数据包细节的准则,允许/拒绝这些数据包的操作。
但是他不同于访问列表的是,他可以向匹配准则中加入设置准则,设置准则可以按照指定访问真正的对数据包和路由信息进行修改
Technical use
- route-map 可以用于 路由重分配 和 策略路由
- 策略路由选择将数据包发送到route-map路由映射,重分配将路由发送到route-map执行规则
Policy route (策略路由) // 其实就是复杂的静态路由
- 策略路由可以基于数据包源地址包头中的其他域 向 指定的下一跳路由器转发数据包,而静态路由是基于数据包的目的地址向指定的下一跳路由器转发数据包
- 策略路由可以链接到扩展-ACL,使路由器可以基于协议类型和端口号进行路由选择,和静态路由一样,只会影响配置了PBR的路由器
举个栗子图上客户网络通过两条ISP可以路由出去,利用PBR效果可以达成如下
- 172.18.1.0/24 从ISP-1 访问 internet,如果ISP-1不可达,切换至 ISP-2
- 172.19.1.0/24 从ISP-2 访问 internet,如果ISP-2不可达,切换至 ISP-1
- R1上策略路由会根据本地策略对internet流量进行分配
- 流量分配可以基于,用户,子网,数据包大小,甚至是应用
route-map 说明:
- route-map语句对数据包和路由的匹配是按顺序进行
- 如果匹配成功,将执行所有set语句及许可或拒绝操作
- 和ACL相同,当匹配发生时,处理马上停止,指定操作将被执行,此后路由或数据包不再传递给后继语句
- 和ACL一样,如果数据包或链路没有匹配到任何一个语句,那么有一个缺省操作match所有数据包和路由deny掉
- 如果route-map中没写match语句,默认match any数据包和路由
- 每个语句可以存在多个match和多个set,多个match是 & 与的关系,必须所有match都匹配才执行set
定义一个路由映射
- Name hagar
- 规则 permit/deny
如果deny用于重分配,那么匹配了deny语句该route-map的路由将不会被重分配
如果deny用于策略路由,则不对数据包进行策略路由,但数据包会被传递给常规路由进行转发
- 序号 默认是10,匹配了一个序号的语句将不会继续向下匹配
route-map hagar permit 10 // 定义了一个路由映射 name=hagar,规则=允许,序号=10
match ip address 110 // 匹配 ACL-110
set metric 100 // 对 ACL-100匹配的条目加上100度量
Route-map hagar permit 20 // 如果第一条没匹配,会依次向下匹配
match ip address 120
set-metric 80
route-map hagar permit 15 // 如果加了一条15的语句,会自动插在10-20语句的中间,和ACL一样
xxxx
xxxx
route-map hagar //route-map和ACL一样,有一条缺省的路由映射 match any,deny any
match any
deny any
No route-map hagar permit 15 // 只删掉 route-map hagar15
No route-map hagar // 删除所有序号的hagar route-map
如果添加 route-map 语句没有指定序号的话,默认的 route-map hagar 10会被覆盖
策略路由PBR说明:
- 策略路由可以基于ip地址,用户,数据包长度,应用进行指定的策略路由选择
- 使用 IP policy route-map 在接口下调用, 定义策略路由选择
- 这条命令只能配置在流量入接口,并且只对入站数据包有影响
- 即使策略路由下一跳在路由表中不存在,但是路由数据库存在,策略路由依旧生效
- 如果需要隔离的流量类型特别多,这样会导致需要写很多ACL语句,这时候基于数据包长度进行PBR更好
- 如果策略路由需要在调用路由器自身生效,则全局下使用ip local policy route-map,因为接口下调用route-map流量必须进入这个端口才能撞上策略
举个栗子在 Linus上做策略路由,实现以下基础需求
- 172.16.6.1/24 的流量通过 lucy 到达RS背后网络
- 172.16.7.1/24 的流量通过 Pigpen 到达RS背后网络
一:定义match条件,ACL标准或者扩展
Access-list1 permit 172.16.6.0 0.0.0.255
Access-list2 permit 172.16.7.0 0.0.0.255
二:定义route-map,match条件以及set行为
route-map test permit 10
match ip address 1 // 匹配acl-1
set ip next-hop172.16.4.2 // set行为指定acl-1的源下一跳为172.16.4.2
route-maptest permit 20
match ip address 2
set ipnext-hop 172.16.4.3
三:流量在入接口调用 route-map
Interface s1/0 // 接口下调用route-map
ip add 192.168.1.2 255.255.255.252
ip policyroute-map test
四:测试现象
172.16.6.1 通过 PBR 从 lucy 通向172.16.1.1 √
172.16.7.1 通过PBR从pigpen通向172.16.1.1 √
问题-1:Linus上去往 172.16.1.0/24的路由如果distance不同并没有负载,路由表只有一条路由时 PBR怎么处理
答案:→ PBR依旧生效强制路由至172.16.4.3
PC-test
问题-2:如果直接把172.16.1.0/24 下一跳是172.16.4.3的路由删掉,会怎么样
答案: → 使用模拟器测试,没有下一跳路由会自动切换
问题-3:
如果对端地址不可达,本地是静态路由指过去的话,会怎么样?
答案:→ 不切换,PBR 发现有路由丢过去,就丢过去,不管可不可达
解决办法-1
route-map 中加上set ip next-hop-self verify-availavbility (实验没成功)
router-maptest 20
set ip next-hop-selfverify-availavbility // 通过CDP检测下一跳是否存在列表,不存在就切换回正常路由
set ip next-hop-self 172.16.4.3
match ip address 2
则Linus自动检查到下一跳不可达,切换至172.16.4.2进行路由(这个实验没成功,不知道是不是模拟器问题)
解决办法-2
- 使用track+SLA自动删除静态路由,这样没有路由会自动切换,现象就和问题-2一样了
- 我有看到route-map 里的 verify-availavbility 后可以加track,但是测试没成功
解决办法-3
网络里跑动态路由,这样路由消失了如同 问题-2一样,没有下一跳路由就自动切换
---------------------------------------------------------------------------------------------------------------------------
举个栗子-2 // 匹配源目ip进行策略路由实现目标-1: 相同源访问不同目的走不通的链路
- Host-172.16.7.1 访问 172.16.1.1 从172.16.4.3走
- 任意host访问172.16.1.2 从172.16.4.2走
配置:
Access-list101 permit Ip host 172.16.7.1 host 172.16.1.1
Access-list102 permit ip any host 172.16.1.2
route-maptest permit 10
match ip address 102
set ip next-hop 172.16.4.2
route-maptest permit 20
match ip address 101
set ip next-hop 172.16.4.3 172.16.4.2
Interfaces1/0
ip policy route-map test
Test: 172.16.7.1去 172.16.1.1 从172.16.4.3出发 ✔
Test:任意host访问172.16.1.2 从172.16.4.2出发 ✔
Test:正常情况下,由于linus上静态路由是等价负载均衡,效果应该如下 ✔
--------------------------------------------------------------------------------------------------------------------
举个栗子-3 // 根据不同端口指定PBR实现效果:
- 将172.16.1.0/24上服务器发出的telnet流量转发到pigpen
- 将172.16.1.0/24上服务器发出的ftp流量转发到 lucy
R5上入站接口配置:Access-list105 permit tcp 172.16.1.0 0.0.0.255 eq ftp any
Access-list105 permit tcp 172.16.1.0 0.0.0.255 eq ftp-data any
Access-list106 permit tcp 172.16.1.0 0.0.0.255 eq telnet any
route-maptest permit 10
match ip address 105
set ip next-hop 172.16.2.1
route-maptest permit 20
match ip address 106
set ip next-hop 172.16.3.1
Interface e0/0 // R5的流量入接口调用
ip policy route-map test
测试:debug+route-map匹配证明ACL生效--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
举个栗子-4 // 根据数据包长度进行PBR实现目标
- 数据包长度在1000-1600字节的经过lucy转发
- 数据包长度在 0- 400字节的经过pigpen转发
- 数据包长度400-100字节的正常路由
R5上配置 route-maptest-4 permit 10
match length 10001600 // 数据包长度 1000-1600
set next-hop 172.16.2.1
route-maptest-4 permit 20
match length 0 400 // 数据包长度 0-400
set next-hop 172.16.3.1
Interfacee0/0
ip policy route-maptest-4 // R5流量入接口调用
------------------------------------------------------------------------------------------------------------------------
举个栗子-5 // 策略路由对自身路由器全局生效如图所示在 R5 上做的策略路由,route-map调用是在接口上的,只有从该接口进入的流量才会匹配route-map进行策略路由
如果 R5 自己产生的数据包需要通过策略路由匹配,则需要全局下敲 ip local policy route-map
实现效果
- 假如 R5和lucy之间运行了 OSPF,OSPF 的 hello包只有44个字节,你做了基于数据包长度的策略路由
- 策略路由将会将hello 包发送给 pigpen,那ospf 邻居就宕了(因为hello包的TTL=1)
- 你需要在基于数据包的route-map前加一句话
- 由于数据包匹配了 test-4 序号5,没有进行任何set行为,则数据包不会继续向下匹配,就正常转发了
配置Access-list120 permit ip any 172.16.1.0 0.0.0.255
Access-list120 permit ospf any any
route-maptest-4 permit 5
match ip address 120
route-maptest-4 permit 10
match length 10001600 // 数据包长度 1000-1600
set next-hop 172.16.2.1
route-maptest-4 permit 20
match length 0 400 // 数据包长度 0-400
set next-hop 172.16.3.1
Interfacee0/0
ip policy route-maptest-4 // R5流量入接口调用
Ip local policy route-map // 全局下再调用,这样route-map 5才会生效
社区图片求直接复制。。。。。。。。。。。。。。。。。。。。。