|
本帖最后由 wxhwz 于 2023-1-27 23:25 编辑
需求原因:因为路由器性能不足,电脑用hyper-v虚拟个op跑科学,但是电脑偶尔需要关机,这时候需要手动切换网关dns,很麻烦
原理:uci、ip route命令
网络结构:
上网的设备网关、dns都设为192.168.5.1
如果旁路由在线,网络流量 ap->旁路由->主路由
如果旁路由离线,网络流量 ap->主路由
脚本代码,自己按自己情况修改,需要除主路由、旁路由外的第三个路由(opnewrt系统),丢到第三个路由里开机运行
- #!/bin/bash
- #主路由ip
- main_router=192.168.5.3
- #旁路由ip
- side_router=192.168.5.2
- #运营商dns
- default_dns=223.5.5.5
- function check()
- {
- local i=0
- ping -c 2 -W 1 $side_router |grep -q 'ttl='
- if [ $? -eq 0 ];then
- echo "旁路由正常"
- uci show dhcp.@dnsmasq[0].server | grep -q "$side_router"
- if [ $? -gt 0 ];then
- i=$((${i}+1))
- fi
- ip route list main | grep -q $side_router
- if [ $? -gt 0 ];then
- i=$((${i}+2))
- fi
- else
- echo "旁路由故障"
- uci show dhcp.@dnsmasq[0].server | grep -q "$default_dns"
- if [ $? -gt 0 ];then
- i=$((${i}+4))
- fi
- ip route list main | grep -q $main_router
- if [ $? -gt 0 ];then
- i=$((${i}+5))
- fi
- fi
- return $i
- }
- uci delete dhcp.@dnsmasq[0].server
- uci set dhcp.@dnsmasq[0].noresolv="1"
- uci commit
- while :
- do
- check
- case $? in
- 1)
- echo "需要重置为旁路由dns"
- uci delete dhcp.@dnsmasq[0].server
- uci add_list dhcp.@dnsmasq[0].server="$side_router"
- uci set dhcp.@dnsmasq[0].cachesize="0"
- uci commit dhcp
- /etc/init.d/dnsmasq restart
- ;;
- 2)
- echo "gateway需要重置为旁路由"
- ip route change default via $side_router dev br-lan
- ;;
- 3)
- echo "二者都"
- uci delete dhcp.@dnsmasq[0].server
- uci add_list dhcp.@dnsmasq[0].server="$side_router"
- uci set dhcp.@dnsmasq[0].cachesize="0"
- uci commit dhcp
- ip route change default via $side_router dev br-lan
- /etc/init.d/dnsmasq restart
- ;;
- 4)
- echo "需要重置为主路由dns"
- uci delete dhcp.@dnsmasq[0].server
- uci add_list dhcp.@dnsmasq[0].server="$default_dns"
- uci set dhcp.@dnsmasq[0].cachesize="10000"
- uci commit dhcp
- /etc/init.d/dnsmasq restart
- ;;
- 5)
- echo "gateway需要重置为主路由"
- ip route change default via $main_router dev br-lan
- ;;
- 9)
- echo "二者都"
- uci delete dhcp.@dnsmasq[0].server
- uci add_list dhcp.@dnsmasq[0].server="$default_dns"
- uci set dhcp.@dnsmasq[0].cachesize="10000"
- uci commit dhcp
- ip route change default via $main_router dev br-lan
- /etc/init.d/dnsmasq restart
- ;;
- esac
- sleep 3s
- done
- exit 0
复制代码
只有一个主路由、一个旁路由的话理论上也能实现,思路大致是主路由(openwrt)上单独为旁路由添加一个ip rule add from 旁路由ip,让旁路由的流量下一跳走运营商的默认网关,其余的来自局域网ip的流量下一跳走旁路由,最后把上网设备的网关、dns设置为主路由即可。
因为比较复杂,没去尝试
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|