为了管控孩子上网,装了个openwrt来控制。之前使用iptables设置规则禁止上网一直没问题,突然不记得什么时候开始就不行了,使用上网管控插件也时灵时不灵。
最近逛谷歌帖子发现有人也遇到类似问题,以为OC猫捣鬼,一查真的是在装了OC猫后就不好使了,今天有空彻查了下这个问题。发现问题核心是这样:
OC猫启动时,会在系统里插入几条新的规则,把流量导入到tun。即使在openwrt里启动项里设置了启动脚本(一般介绍拦截上网都是这样),也因为启动脚本比OC猫脚本要先运行,导致OC猫的设置在拦截之上,当然也就无效了。
难道用了OC猫就不能好好使用上网管控啦?也是有办法的,只要让拦截脚本延迟执行在openclash初始之后,这个问题就解决了。例如拦截指定MAC手机,上午和下午不准上网,晚上写完作业可以活动一下。启动项启动脚本如下:
nohup sleep 60 && iptables -I FORWARD -m mac --mac-source 00:EA:88:00:44:4B -m time --timestart 02:00 --timestop 12:00 --kerneltz -j DROP && iptables -I FORWARD -m mac --mac-source 00:EA:88:00:44:4B -m time --timestart 13:00 --timestop 21:30 --kerneltz -j DROP &
系统重启之后,看到规则设置到了chain第一条,此时能够正常工作,如下图
sleep 60 秒可以根据实际性能和插件多少调整,以保证运行在OC猫初始化之后,规则被插入第一条。