三网出口优化篇-迫真家庭网切换检测-Bash脚本(含架构图)

微信扫一扫,分享到朋友圈

三网出口优化篇-迫真家庭网切换检测-Bash脚本(含架构图)
0

前文

原理

如架构图·,咱都是在一个机器里面的虚拟化,里面的机器互相起了bfd,那么当家宽灵车的时候,就用脚本把连接到聚合Merge的接口给down掉,那边bfd检测到便会进行切换。

完美的避开了BFD快速检测的特性x。(还是因为不好检测是否断网了,然后还是忘记缴费欠费了)

能跑就行的YF

脚本

把脚本扔到一个文件夹,然后丢进crontab执行即可(第一次可能要touch个log文件)

当三次curl不到target和ping不通一个地址后,将会把一个接口down掉(内网接口)

#!/bin/bash

down="eth1"
time=`date +%Y-%m-%d" "%H:%M:%S`
ping="223.5.5.5"
target="www.baidu.com"

function network()
{
#超时时间
local timeout=3
#获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ]; then
#网络畅通
return 1
else
#网络不畅通
return 0
fi
return 0
}

network

if [ $? -eq 0 ];then
# 写一个失败次数 (读取原本的)
if [ -e ./fail ];then
num=`cat ./fail`
else
num=0
fi

new=`expr $num + 1`
echo $new > ./fail

if [ $num -gt 2 ]; then
# 如果甚至还ping不通(也有可能是测试站挂了x)
# Todo 这里也触发一次远程提醒
ping -c 3 $ping > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo 1 > ./down
echo "Interface down ${down} - ${time}"
ifdown $down
else
echo "Ping ok ${ping} - ${time}"
fi
fi

echo "Curl fail: ${num} - ${time}"
exit -1
else
if [ -e ./fail ];then
rm ./fail
fi

# 如果存在把接口禁用了就重新启用接口
if [ -e ./down ]; then
echo "Interface up ${down} - ${time}"
ifup $down
rm ./down
fi
fi

# 清理Log
line=`wc -l < ./log`

if [ $line -gt 5 ];then
tail -3 ./log > ./log.temp
mv ./log.temp ./log
echo "Clear log - ${time}" >> ./log
fi


echo "Script finished! - ${time}"
exit 0

如何指定出口

那当然是使用frr的pbr啦x

interface ens22
pbr-policy VM
exit

pbr-map VM seq 100
match src-ip 192.168.20.10/32
set nexthop 192.168.10.102
exit

你也可以用mac或者其他判断方式

咱很菜的,是个智障。 人设非常容易崩。

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

排行榜

    抱歉,30天内未发布文章!
返回顶部