Padavan(老毛子)自动切换网关和 DNS 服务器脚本

2023-12-03
0评论
/
382阅读
爱搜啊

基本情况

  • 联通宽带(光猫改桥接,主路由拨号)

  • 主路由红米AC2100(RM2100) 老毛子系统(Padavan  3.4.3.9-099_20200619)IP:10.0.0.1

  • NAS 蜗牛星际A款单口  群晖 7.0.1-42218   IP:10.0.0.2

  • 旁路由 群晖自带虚拟机 分配1C1G   iStoreOS (OpenWrt 21.02.1 2022042919) IP:10.0.0.21

需求

1、NAS每晚 11:30 自动关机,此时旁路由也会关机,因为主路由的网关和DNS都是旁路由地址,旁路由关机后,其他家人使用 WiFi 无法上网。

2、平常旁路由出现突发状况掉线,WiFi 也无法上网。

解决在主路由中创建自定义脚本,通过 Crontab 监测旁路由是否在线。

场景1:晚上 NAS 关机,旁路由关机后,主路由监测到旁路由不存在,随即将主路由的网关和 DNS 切换到自身,早上 NAS 开机后,主路由监测到旁路由上线,此时将主路由网关和 DNS 切换为旁路由地址。

场景2:主路由中实时监测旁路由是否在线,不在线时立即将主路由的网关和 DNS 切换到主路由本身,旁路由恢复在线时,随即切换回去。

Padavan(老毛子)自动切换网关和 DNS 服务器脚本

详细设置

如何使用Padavan自定义脚本实现旁路由自动切换和网络恢复,以解决NAS关机导致主路由无法上网的问题。同时,通过实时监测旁路由状态,及时切换网关和DNS,以应对旁路由故障引起的网络中断。

在您的网络配置中,主要存在两个问题:首先,当NAS关机时,旁路由也会关机,导致主路由无法连接到旁路由的网关和DNS地址,从而影响其他设备的上网;其次,旁路由出现故障时,WiFi无法正常使用。

为了解决这些问题,您可以使用Padavan自定义脚本来监测旁路由的在线状态,并根据情况切换主路由的网关和DNS设置。

Padavan自定义脚本

#!/bin/bash
 
default_gateway='10.0.0.1'  #主路由 IP
auxiliary_gateway='10.0.0.21'  #旁路由 IP (需设置的主路由网关 地址)
up_gateway='10.0.0.21'   #旁路由 IP (需设置的主路由 DNS 地址)
 
check_ip_available(){  #使用 ping 命令检测旁路由是否在线
    ping -c 3 $1 | grep packets | awk '{print $4}'
}
 
change_gateway_dns(){  #网关 DNS 切换
   nvram set dhcp_gateway_x=$1  #设置网关
   nvram set dhcp_dns1_x=$1
   nvram set dhcp_dns2_x=""  #设置 DNS
   nvram commit  #提交修改
   rc rc_service restart_net_and_phy  #重启主路由 网络服务
   restart_dns    #重启主路由 DNS
   restart_dhcpd  #重启主路由 DHCP
radio2_restart #重启无线
   radio5_restart
   sleep 5
   ifconfig eth2 down
   sleep 2
   ifconfig eth2 up
   #reboot  #自动修改后存在网络故障,可能需要直接重启路由器,可取消注释,等待时间较长
}
 
# If the gateway of the up close, the network is completely unusable
 
res=`check_ip_available $up_gateway`  #检测旁路由是否存在
current_gateway=`nvram get dhcp_gateway_x`  #获取主路由当前网关
 
if [ $(($res)) -eq 0 ]; #检测结果等于 0,即旁路由不存在,应设置网关和 DNS 为主路由地址
then
    if [ "$current_gateway" != "$default_gateway" ]; then  #如果当前网关地址不是主路由地址
        echo "up_gateway to default"
        `change_gateway_dns $default_gateway`  #将网关和DNS切换为主路由地址
    fi
    echo "use default gateway , nothing changed"
    exit 1
fi
if [ $(($res)) -ne 0 ]; #检测结果不等于 0,即旁路由存在,应设置网关和 DNS 为旁路由地址
then
    if [ "$current_gateway" != "$up_gateway" ]; then #如果当前网关地址不是主路由地址
        echo "up_gateway to  auxiliary_gateway" 
        `change_gateway_dns $up_gateway` #将网关和DNS切换为旁路由地址
    fi
    echo "use auxiliary_gateway , nothing changed"
    exit 1
fi

首先,将提供的脚本命名为change_gateway.sh,并将其放置在主路由的/etc/storage/目录下。然后,为脚本设置可执行权限,使用以下命令:chmod +x /etc/storage/change_gateway.sh

接下来,为了实现定时运行脚本,您可以使用Padavan的Crontab功能。打开Padavan的Web管理界面,在“系统管理”中找到“定时任务”或“计划任务”选项,并编辑Crontab配置文件。

在Crontab配置文件中,添加以下一行命令,以每分钟执行一次脚本:

*/1 * * * * /etc/storage/change_gateway.sh

保存配置文件并应用更改。

现在,让我们详细解释一下脚本的工作原理和关键部分。

脚本首先定义了三个变量:default_gateway代表主路由的IP地址,auxiliary_gateway代表旁路由的IP地址(即需要设置为主路由网关的地址),up_gateway代表旁路由的IP地址(即需要设置为主路由DNS的地址)。

接下来,脚本定义了两个函数:check_ip_available用于通过ping命令检测旁路由是否在线,change_gateway_dns用于切换主路由的网关和DNS设置。

脚本的主要逻辑是通过调用这两个函数来实现自动切换和恢复网络的操作。

首先,脚本使用check_ip_available函数检测旁路由是否在线,如果检测结果为0,则表示旁路由不存在,此时脚本会判断当前网关地址是否为主路由地址,如果不是,则调用change_gateway_dns函数将网关和DNS切换为主路由地址。

如果检测结果不为0,则表示旁路由存在,脚本同样会判断当前网关地址是否为旁路由地址,如果不是,则调用change_gateway_dns函数将网关和DNS切换为旁路由地址。

这样,脚本在每次执行时,会根据旁路由的在线状态自动切换主路由的网关和DNS设置,以实现网络的自动切换和恢复。

需要注意的是,自动切换后,上网设备可能需要重新连接WiFi才能使用网络。这是因为切换网关和DNS会导致网络连接中断,设备需要重新获取IP地址和配置信息才能正常上网。

总结起来,通过使用Padavan自定义脚本,您可以实现NAS关机时旁路由自动切换和网络恢复的功能,并通过定时任务实时监测旁路由的在线状态,保障网络的稳定性和连通性。


本站附件分享,如果附件失效,可以去找找看

诚通网盘附件百度网盘附件


于2023-12-03发布