前2天有人问我个问题,具体描述大家看图吧,我这里借用一下。路由跳数探测实现智能路由切换_第1张图片
这个问题很有意思,虽然通过人工调整路由优先级,或者策略路由能实现,但是如果能智能切换不是很可以去显摆一下。
这个问题猛的一看,用到了BGP,太高大上了,BGP有那么多属性,看看有没有合适的可以用上,结果我是没找到,不知道是不是还有真大神能找到。
我的考虑是BGP这个路由协议,强大的地方在控制,而不是去感知路径的变化它他不会自己学习到任何路由,它传播的路由都是别人告诉它的。所以不能从这个角度入手。
那么换个角度,OSPF可以感知到路径的变化,体现到COST值上,但这里,从自家路由器出去,外面就不在你掌控了,别人是不会配合你的,也不行。
那最后的办法就是在自家路由器上能感知到外部路径的变化,目前专业的负载均衡设备是可以做到的,探测多出口哪个更优,但是让负载均衡设备来跑BGP,实在是更不放心。
最后的办法那就只能考虑让路由器自己来做探测,那么我们常用的探测方法是NQA这类技术,发个PING过去,但这只能探测到可达性,无法判断跳数,翻阅手册,发现在参数里可以设置ttl值,这下问题解决了,我们可以把ttl设置为较优路劲的值,这样走次优路径的探测包由于ttl值不够,是到不了目标的,也就会触发探测失败。
这里实在要吐槽一下,我把这个方案告诉给那小伙,居然收到的答复是不可行,也没任何说明,算了,既然如此我自己来动手吧。![]
拓扑很简单,主要就是模拟出ttl值是否能影响探测结果进而影响路由。
路由跳数探测实现智能路由切换_第2张图片
最下面的交换机和路由器1 2三者之间跑OSPF,交换机上模拟业务地址1.1.1.1,剩下网上路由器之间都是静态路由,模拟出无法感知到实际路由跳数,在路由器4上业务地址3.3.3.3。
路由器1和2上都有去往3.3.3.3的静态路由,并将静态路由引入OSPF,那么在交换机上就会看到两条等价路由。
路由跳数探测实现智能路由切换_第3张图片
接下来在两台路由器1 2上都进行探测,ttl设置为1,可以看到,2到4就1跳,而1到4经过了3,是2跳。
下面在路由器1 2都进行探测。
路由跳数探测实现智能路由切换_第4张图片
可以看到开始探测后,路由变为了一条。我们再到路由器1上看一下路由表。
路由跳数探测实现智能路由切换_第5张图片
静态路由是配置里存在的,但是探测失败导致路由也失败了。
以上的实验,在实际中适合用于外部路由稳定的环境,如果是互联网,ttl是无法掌控的,极端情况导致两台路由器都探测失败就得不偿失了。