morytyann / OpenWrt-mihomo

Transparent Proxy with Mihomo on OpenWrt.
MIT License
1.42k stars 152 forks source link

[Feature Request]修改重启/关闭行为以优化订阅文件远程获取 #320

Open refined-fish opened 2 hours ago

refined-fish commented 2 hours ago

确认

功能描述

目前插件依靠定时重启执行重启时,远程优先策略控制重新获取远端配置文件,实现配置文件定时更新 但如果配置文件订阅连接本身需要在代理情况下才能访问,就会更新失败回退到本地文件启动,永远无法获得更新

希望能够修改重启/关闭逻辑,检查用户是否设置订阅为远程优先。如果是则核心先获取一次更新,再重启/关闭;否则正常重启/关闭

如何实现

OpenClash的订阅文件更新机制是先内核代理更新,如果更新失败则绕过内核直连更新,直到成功获取配置文件才会进入重启流程(或者获取失败不会重启,保证服务不中断)

可供参考,但我也不太清楚如何实现比较方便可维护

附加信息

No response

refined-fish commented 2 hours ago

目前插件的订阅更新不是独立功能,可以理解是为了插件简洁,但是确实会为维护和使用带来一定的难度。

如果能够调整,就能实现订阅更新走代理(我的连接就期望走代理,目前处于除非手动替换文件否则很难更新的状态😂)

如果能够分离,则还能实现对比配置文件,无变化时不重启内核,减少服务中断等功能

morytyann commented 1 hour ago

目前处于除非手动替换文件否则很难更新的状态

或许你需要更新一下订阅链接,一般来说机场不会说只提供走代理才能更新的订阅链接,否则第一次使用时会产生先有鸡还是先有蛋的问题。

OpenClash的订阅文件更新机制是先内核代理更新,如果更新失败则绕过内核直连更新

首先这取决于分流规则,如果进核心但分流到直连,那还是一样,再就是有些机场有限制,不允许用户通过代理更新订阅,如果说做的话这里,也需要一个选项来配置走不走核心。

直到成功获取配置文件才会进入重启流程(或者获取失败不会重启,保证服务不中断)

我的评价是不如proxy-provider,直接在核心里更新,无论成功还是失败都不中断任何东西(防火墙规则、进程、连接),可以指定走策略组,灵活选择走代理还是走直连更新。如果不会搓配置文件,官方文档里有快捷配置,填上订阅链接就可以了。

morytyann commented 1 hour ago

其实你是想解决直连无法更新订阅的问题,倒是可以添加个通过代理更新订阅,不过我打算优先通过直连更新(毕竟大概率机场提供的链接都是可以直连的),失败且核心运行中则再走核心更新。

refined-fish commented 50 minutes ago

目前处于除非手动替换文件否则很难更新的状态

或许你需要更新一下订阅链接,一般来说机场不会说只提供走代理才能更新的订阅链接,否则第一次使用时会产生先有鸡还是先有蛋的问题。

OpenClash的订阅文件更新机制是先内核代理更新,如果更新失败则绕过内核直连更新

首先这取决于分流规则,如果进核心但分流到直连,那还是一样,再就是有些机场有限制,不允许用户通过代理更新订阅,如果说做的话这里,也需要一个选项来配置走不走核心。

直到成功获取配置文件才会进入重启流程(或者获取失败不会重启,保证服务不中断)

我的评价是不如proxy-provider,直接在核心里更新,无论成功还是失败都不中断任何东西(防火墙规则、进程、连接),可以指定走策略组,灵活选择走代理还是走直连更新。如果不会搓配置文件,官方文档里有快捷配置,填上订阅链接就可以了。

搞笑的是,如您所说确实存在鸡蛋问题,为了解决鸡蛋问题我不得不在编译时就嵌入一份配置文件。至于链接是因为我借用CF的worker做了一个中转,目的在于真正传入给订阅转换服务器的配置文件没有真正的密钥来防止泄露(其实有点强迫症的味道在里面哈哈哈),关于proxy-provider我需要去了解一下,稍后给您答复

refined-fish commented 48 minutes ago

其实你是想解决直连无法更新订阅的问题,倒是可以添加个通过代理更新订阅,不过我打算优先通过直连更新(毕竟大概率机场提供的链接都是可以直连的),失败且核心运行中则再走核心更新。

这又是一个很emm的情况,因为我正通过一个代理服务器来代理这个cf worker链接,但是我的代理服务器同样也需要更新,所以我才会说在核心未关闭时更新,这样我的代理服务器才能获取到订阅并重启自身再给其他人提供代理

morytyann commented 42 minutes ago

目的在于真正传入给订阅转换服务器的配置文件没有真正的密钥来防止泄露

自建个后端咯。