俗话说,温故而知新。上次在配置OSPF的路由引入时(OSPF路由引入的陷阱:为何Ubuntu上静态路由神秘消失?深挖FRR路由分类机制),我发现了一个超出我认证的功能:Guard路由。
倒不是因为这个功能有多新,单纯是因为之前根本没有注意到过。查了一下官网手册,发现配置方式跟静态路由类似,命令为ip route-guard,这不就是每次写静态路由时,默认补全却一直被我忽略的命令吗?
那这个Guard路由究竟是何方神圣?又有什么用呢?
按照官网说法,Guard路由的主要作用是:当去往某一目的地的流量中包含引起网络异常的流量时,Guard路由将去往该目的地的所有流量牵引到Guard设备上,由Guard设备对流量进行过滤和清洗。Guard路由既可以由管理员手工配置,也可以根据收到的信息触发Guard设备上的脚本自动配置。
按照这张图来看,Device B需要先配置流量镜像,将所有流量镜像给Detector设备,由Detector设备流量进行检测。当Detector设备检测到异常流量时,通知Guard设备自动创建Guard路由,并通过动态路由协议该路由发布给Device B。
这样,所有异常流量都将被牵引到Guard设备上,而Guard路由具有出接口为Null0的特点,这样,就能实现丢弃异常流量的效果,减轻对业务网络的影响。这,不就是黑洞路由吗?
由此可见,Guard路由是一种网络层的粗粒度过滤手段。它身手敏捷(配置简单,生效快),但行事鲁莽(无法区分具体应用),误伤风险较高,因此在使用IPS等应用层设备进行精细化流量管控的今天,可能已英雄无用武之地。
然而,官方手册的配置示例再次掉链子,描述复杂且存疑。纸上得来终觉浅,绝知此事要躬行,下面,就由我来演示一个正确的Guard路由简单配置案例吧。
首先,我们没有流量检测设备,那就直接使用手工配置Guard路由就行了。按照上图所示,使用OSPF完成全局设备互联配置。
RT1
#
interface LoopBack0
ip address 10.1.1.1 255.255.255.255
#
interface GigabitEthernet0/0
ip address 10.12.1.1 255.255.255.0
#
ospf 1 router-id 10.1.1.1
area 0.0.0.0
network 10.12.1.0 0.0.0.255
RT2
#
interface LoopBack0
ip address 10.2.2.2 255.255.255.0
#
interface GigabitEthernet0/0
ip address 10.12.1.2 255.255.255.0
#
interface GigabitEthernet0/1
ip address 10.23.1.2 255.255.255.0
#
interface GigabitEthernet0/2
ip address 10.24.1.2 255.255.255.0
#
interface GigabitEthernet5/0
ip address 10.25.1.2 255.255.255.0
#
interface GigabitEthernet5/1
ip address 10.26.1.2 255.255.255.0
#
ospf 1 router-id 10.2.2.2
area 0.0.0.0
network 10.12.1.0 0.0.0.255
network 10.23.1.0 0.0.0.255
network 10.24.1.0 0.0.0.255
network 10.25.1.0 0.0.0.255
network 10.26.1.0 0.0.0.255
Guard
#
interface LoopBack0
ip address 10.3.3.3 255.255.255.255
#
interface GigabitEthernet0/0
ip address 10.23.1.3 255.255.255.0
#
ospf 1 router-id 10.3.3.3
area 0.0.0.0
network 10.23.1.0 0.0.0.255
RT4
#
interface LoopBack0
ip address 10.4.4.4 255.255.255.255
#
interface GigabitEthernet0/0
ip address 10.24.1.4 255.255.255.0
#
ospf 1 router-id 10.4.4.4
area 0.0.0.0
network 10.24.1.0 0.0.0.255
RT5
#
interface LoopBack0
ip address 10.5.5.5 255.255.255.255
#
interface GigabitEthernet0/0
ip address 10.25.1.5 255.255.255.0
#
ospf 1 router-id 10.5.5.5
area 0.0.0.0
network 10.25.1.0 0.0.0.255
RT6
#
interface LoopBack0
ip address 10.6.6.6 255.255.255.255
#
interface GigabitEthernet0/0
ip address 10.26.1.6 255.255.255.0
#
ospf 1 router-id 10.6.6.6
area 0.0.0.0
network 10.26.1.0 0.0.0.255
这样一来,通过全局OSPF动态学习,我们从RT1上就可以访问到所有设备了。
按照实验设定,RT4、RT5和RT6分别是三台内网服务器,正常情况下RT1可以访问这三台设备。
而Guard设备作为Guard路由的配置点,需要在OSPF进程中引入Guard路由。
当检测业务异常时,直接配置Guard路由并通过动态路由协议推送到全网,影响路由转发。
那么问题来了,对于RT2而言,所有的路由都是直连路由,优先级是最高的,怎么影响转发呢?
对了,就是写一个32位的主机路由,命中路由的最长匹配原则,实现影响转发的效果。
ip route-guard 10.24.1.4 32
可以看到,配置了Guard路由之后,该路由条目的接口为NULL0,下一条为0.0.0.0,也就是直接丢弃的意思了。
再到其他设备进行查看,可以看到,全网都学到了这个32位的主机路由。除了所有设备都不能访问RT4之外,RT4也不能访问其他设备了。
如果回过头来看,这个Guard路由倒也不必使用专门的Guard设备来配置,在RT2上配置,效果应该也是一样的。
#
ospf 1 router-id 10.2.2.2
import-route guard
#
ip route-guard 10.25.1.5 32
查看RT设备的路由表。
可以看到,效果都是一样的。既然如此,实际应用中完全可以省掉这台Guard设备。当然,使用专门的Guard设备搭配检测设备来使用,能降低直接操作核心设备的误操作流量风险。
最后,一个重要的坑点需要注意!Guard路由不会写入到配置文件中,这意味着设备重启后,这些临时禁令会自动消失。排查问题时若只看配置,极易漏网,务必查看当前路由表!
通过这次探索,我们不仅弄懂了一个生僻命令,更加深了对路由控制能力的理解。Guard路由像一把锋利的手术刀,在特定应急场景下能发挥奇效。但在应用识别、微隔离技术日益成熟的今天,它更像是一个复古的备选方案。
你在网络运维中,是否遇到过适合使用这种粗暴但有效方案的场景?欢迎在评论区分享你的见解!
声明:来自铁军哥,仅代表创作者观点。链接:http://eyangzhen.com/4841.html