旁路由方案的痛点
旁路由在出问题的时候,会影响网关配置为旁路由的设备使用。所以需要自动检测旁路由。
首先 主路由要有完整权限的系统,就是有ssh权限的! 爱快请使用分流方案 到二级路由以及环回等方式实现。
旁路由的自动切换方案是很多的人的刚性需求。
用软路由做主路由,主要问题两点,折腾过程中的失误一些不确定东西,容易断网。还有x86软路由 不少人遇到突然断电导致的无法启动后全家断网
自动切换旁路由方案,更加稳定一些。
本文撰写于2019年,后期虽有修改补充,但是部分内容已经落后
有能力有时间的朋友,建议还是上x86 方案,不需要旁路由。 或者使用爱快分流方案。 https://dev.leiyanhui.com/route/ikuai-bypass-gfw/
个人经验 爱快分流方案更为稳健,但是需要另外开一个op 以及docker来处理分流规则。 对设备内存要求较高(x32爱快不支持kvm docker可用镜像有限,爱快x64 需要4G内存安装 2G内存运行)。 如果内存紧张最好还是选择openwrt one only
实现目标
主路由为硬路由负责上网和dhcp 顺带wifi,硬交换负责nas和机顶盒 台式机之间通讯。
去掉 x86 软路由
nas或者aio主机 或者 N1 或者闲置手机作为旁路由/旁网关(后面统称旁路由)
重点目标:
- 旁路由离线后,所有设备自动切换到主路由网关
- 双旁路由A和B A正常运行的时候B删除不存在在需要调整的时候,复制一个独立的旁路由出来,自己手动修改主机电脑的网关到旁路由B测试没问题后替换A
- 可控制部分设备科学,部分设备不科学
- ksm ipsec 科学 广告过滤 alist ddns nas 等,全部由旁路由或者aio/nas处理。
实现原理
旁路由用pve 或者 unraid 或者docker运行,关闭dhcp服务,静态ip(10.0.0.50),网关指定为主路由。也就是旁路由只是主路由下面的一个普通设备而已。
双DHCP 存在抢dhcp的情况,所以dhcp本身占不了太多资源,还是主路由统一管理。 主路由10.1.1.1 开启dhcp dhcp的网关改为程序脚本控制 dhcp的租期尽可能短一些(120秒) 主路由 dhcp的ip段为 10.1.1.200-245 重点设备 静态绑定到 10.1.1.200以内的ip段。
逻辑如下
主路由每隔一定时间 30秒或者1分钟,检查一次旁路由是否在线,
如果在线那么 dhcp服务的网关改为旁路由(10.0.0.50)
如果旁路由不在线 那么dhcp服务的网关改为主路由(10.0.0.1)
如果旁路由状态发生了变化,那么重启一次dnsmasq(或者再重启wifi 或者重启整个系统)
科学部分,由openclash 实现分流,就是部分设备不走科学还有部分设备强制全局科学等等。 这个可以看我以前的文章 https://dev.leiyanhui.com/openwrt/openclash/
具体实现
我主路由依旧用10多年前的 古董级k2p刷Padavan 固件,因为他的2.4G信号一直很好,Padavan 可以跑满1000M,5G的话也能跑到500M,另外一个5G路由器因为2.4G信号一般所以只能做ap用。 万兆由下级一个交换机处理,千兆以内众生平等 适合自己的才是最好的。
Padavan 也是开源linux 和openwrt使用起来在系统层面差距不是很大 ,只要有ssh权限,所有固件都大同小异。
旁路由 用 pve 跑的自己编译的openwrt,直接挂的vm跑的,因为我这边,8核心,64G内存 所以没用lxc和docker。
脚本测试
padvan默认是关闭ssh的,系统管理 - 服务 找到ssh 打开,客户端登录ssh
检查旁路由是否在线
|
|
这是openwrt的登录页面 他会自动301跳转,查看返回http代码 -m 3
是3秒
|
|
应该会自动返回一个301代码, http://10.1.1.50/cgi-bin/luci/ 的话应该是返回403,这个先不管 如果是不存在的地址,那么应该是返回 000
找dnsmasql的配置文件地址
|
|
返回 结果 逐个检查后发现Padavan和openwrt一样 都是/etc/dnsmasq.conf
这个文件,同时已经分配的列表也是/tmp/dnsmasq.leases
这个文件。
在主路由中 设置dhcp的网关为 旁路由地址10.1.1.50 ,然后执行 cat /etc/dnsmasq.conf
应该有一行dhcp-option=tag:lan,3,10.1.1.50
测试配置文件的查找和替换
记住上面的那段 dhcp-option=tag:lan,3,10.1.1.50
用grep搜索试试
|
|
替换
|
|
如果padavan的话不用这么麻烦 用nvram set dhcp_gateway_x=10.1.1.1
重启 dnsmasq
openwrt 下面这两个命令 都一样的效果
|
|
Padavan 下可执行文件是 /usr/sbin/dnsmasq
通过查询网上资料得知 Padavan把服务脚本放在/sbin 直接执行/sbin/restart_dhcpd
即可
编写脚本
|
|
最后
将脚本置于 /etc/storage/change_gatway.sh
设置脚本运行权限:chmod +x /etc/storage/change_gatway.sh
保存脚本,防止重启丢失:/sbin/mtd_storage.sh save
自动定时运行脚本(每一分钟检测一次):
系统管理 - 服务
调度任务 (Crontab) 加入 */1 * * * * /etc/storage/change_gatway.sh
以上内容抄 自:恩山,xuezou
最后存在的问题
经过测试 无论是wifi接入还是网线加入的设备 都可以在短暂掉线后 自动切换成功