其实很多时候旁路由掉线了是配置问题,或者代理工具问题,check-gateway 并不能解决问题。
我的做法是利用 clash fake-ip 的特性,利用 DNS 分流工具,把匹配 clash 规则的 DNS 请求向 clash 请求,从而获得 faek-ip ,至于 ros 就只需要设置目的地址路由,如果目的 ip 是 fake-ip 则回发往 openwrt 。
DNS 分流工具其实可以用 ros 自己的 dns regex ,但我还没想好如何维护那么大量的 DNS static 条目,Ros 至今还不能读取超过 4059 字节的文件。
所以目前方案还是用第三方 DNS 分流,这边有个大佬写了个基于 coredns 的插件。也可以用 smartDNS 之类的。
https://github.com/charleyzhu/coredns_wormhole_plugin而 ros 只需要判断 DNS 查询 google 的域名是否是 fake-ip 即可,如果非 fake-ip 则代表 Clash 挂了(或者查询不到也是挂了)。挂了就脚本切 ros 的上游 DNS 即可。
emmm 我还做了企业微信推送,告诉我挂了然后去查看。
这方案用了一年了,感觉还行。
https://github.com/neroxps/RouterOS-Script/blob/master/Check_nvr_traffic.rsc不过···脚本不能直接用,得添加其他脚本作依赖。