找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 1709|回复: 1

旁路由故障无感切换

[复制链接]
发表于 2023-1-27 22:42 | 显示全部楼层 |阅读模式
本帖最后由 wxhwz 于 2023-1-27 23:25 编辑

需求原因:因为路由器性能不足,电脑用hyper-v虚拟个op跑科学,但是电脑偶尔需要关机,这时候需要手动切换网关dns,很麻烦
原理:uci、ip route命令
网络结构:

上网的设备网关、dns都设为192.168.5.1
如果旁路由在线,网络流量 ap->旁路由->主路由

如果旁路由离线,网络流量 ap->主路由
脚本代码,自己按自己情况修改,需要除主路由、旁路由外的第三个路由(opnewrt系统),丢到第三个路由里开机运行
  1. #!/bin/bash

  2. #主路由ip
  3. main_router=192.168.5.3
  4. #旁路由ip
  5. side_router=192.168.5.2
  6. #运营商dns
  7. default_dns=223.5.5.5

  8. function check()
  9. {
  10.         local i=0
  11.         ping -c 2 -W 1 $side_router |grep -q 'ttl='
  12.         if [ $? -eq 0 ];then
  13.                 echo "旁路由正常"
  14.                 uci show dhcp.@dnsmasq[0].server | grep -q "$side_router"
  15.                 if [ $? -gt 0 ];then
  16.                     i=$((${i}+1))
  17.                 fi
  18.                 ip route list main | grep -q $side_router
  19.                 if [ $? -gt 0 ];then
  20.                     i=$((${i}+2))
  21.                 fi
  22.         else
  23.                 echo "旁路由故障"
  24.                 uci show dhcp.@dnsmasq[0].server | grep -q "$default_dns"
  25.                 if [ $? -gt 0 ];then
  26.                     i=$((${i}+4))
  27.                 fi
  28.                 ip route list main | grep -q $main_router
  29.                 if [ $? -gt 0 ];then
  30.                     i=$((${i}+5))
  31.                 fi
  32.         fi
  33.         return $i
  34. }

  35. uci delete dhcp.@dnsmasq[0].server
  36. uci set dhcp.@dnsmasq[0].noresolv="1"
  37. uci commit
  38. while :
  39. do
  40.         check
  41.         case $? in
  42.                 1)
  43.                         echo "需要重置为旁路由dns"
  44.                         uci delete dhcp.@dnsmasq[0].server
  45.                         uci add_list dhcp.@dnsmasq[0].server="$side_router"
  46.                         uci set dhcp.@dnsmasq[0].cachesize="0"
  47.                         uci commit dhcp
  48.                         /etc/init.d/dnsmasq restart
  49.                 ;;
  50.                 2)
  51.                         echo "gateway需要重置为旁路由"
  52.                         ip route change default via $side_router dev br-lan
  53.                 ;;
  54.                 3)
  55.                         echo "二者都"
  56.                         uci delete dhcp.@dnsmasq[0].server
  57.                         uci add_list dhcp.@dnsmasq[0].server="$side_router"
  58.                         uci set dhcp.@dnsmasq[0].cachesize="0"
  59.                         uci commit dhcp
  60.                         ip route change default via $side_router dev br-lan
  61.                         /etc/init.d/dnsmasq restart
  62.                 ;;
  63.                 4)
  64.                         echo "需要重置为主路由dns"
  65.                         uci delete dhcp.@dnsmasq[0].server
  66.                         uci add_list dhcp.@dnsmasq[0].server="$default_dns"
  67.                         uci set dhcp.@dnsmasq[0].cachesize="10000"
  68.                         uci commit dhcp
  69.                         /etc/init.d/dnsmasq restart
  70.                 ;;
  71.                 5)
  72.                         echo "gateway需要重置为主路由"
  73.                         ip route change default via $main_router dev br-lan
  74.                 ;;
  75.                 9)
  76.                         echo "二者都"
  77.                         uci delete dhcp.@dnsmasq[0].server
  78.                         uci add_list dhcp.@dnsmasq[0].server="$default_dns"
  79.                         uci set dhcp.@dnsmasq[0].cachesize="10000"
  80.                         uci commit dhcp
  81.                         ip route change default via $main_router dev br-lan
  82.                         /etc/init.d/dnsmasq restart
  83.                 ;;
  84.         esac
  85.         sleep 3s
  86. done
  87. exit 0
复制代码


只有一个主路由、一个旁路由的话理论上也能实现,思路大致是主路由(openwrt)上单独为旁路由添加一个ip rule add from 旁路由ip,让旁路由的流量下一跳走运营商的默认网关,其余的来自局域网ip的流量下一跳走旁路由,最后把上网设备的网关、dns设置为主路由即可。
因为比较复杂,没去尝试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
发表于 2023-1-28 10:13 | 显示全部楼层
感兴趣,关注一下
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 06:58

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表