上一篇写到在dnsmasq里面增加自动两个网关地址,自动进行主备切换并未生效, 所以做了一版本的优化
我这边的设备是一台刷了梅林固件的华硕路由(192.168.50.1)和一个跑在群晖VMM上面的openwrt旁路由(192.168.50.99)
原理
华硕路由(192.168.50.1)定时探活openwrt(192.168.50.99)是否在线.并作出后面的网关/DNS切换
#!/bin/sh
bypass=192.168.50.99
default_ip=192.168.50.1
network()
{
#这里比较取巧的是通过判断路由器的页面能否打开判断旁路由在不在线
local timeout=2
#call bypass server
local ret_code=`curl -I -s -m ${timeout} ${bypass} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x000" ]; then
return 1
else
return 0
fi
}
changeGateway()
{
#confirm whether default now
local resp=`grep $1 /jffs/configs/dnsmasq.d/openwrt.conf|wc -l`
if [ $resp -gt 0 ];then
/usr/bin/logger "[bypass detect] gateway don't need to change"
return 0
else
#need change gateway
/usr/bin/logger "[bypass detect] change gateway from $2 to $1"
sed -i "s/$2/$1/g" /jffs/configs/dnsmasq.d/openwrt.conf
service restart_dnsmasq
/usr/bin/logger "[bypass detect] change gateway to $1 success"
return 0
fi
}
network
if [ $? -eq 0 ];then
changeGateway $bypass $default_ip
else
changeGateway $default_ip $bypass
fi
效果
能够达到在旁路由下线后,在探活间隔(1分钟)和DHCP租约时长(5分钟)内,客户端切换网关和DNS
后记
参考别人的方案中还发现有通过VIP/Keepalive等方案能够更好的做切换.但我这边不准备实现了原因是:
主路由不希望增加太多复杂功能影响稳定性
固件中还没有这些软件
基于目前的软件和硬件下,其实还能增加旁路由在有计划停止服务的时候通过ssh执行远程命令的方式去更新网关/DNS配置. 但由于客户端更新网关/DNS只依赖DHCP租约过期,减少旁路由探活的时间并不会大幅改善旁路由掉线时客户端的体验.
虽然我这边是DHCP服务器静态分配IP,但较短的DHCP租约是否会带来其他的问题,还需要实测确认
————————————————
版权声明:本文为CSDN博主「阿江是个程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_Gbj/article/details/114004608