极路由ss和adbyby冲突的解决方法
现象:
ss和adbyby会有冲突,现象为打开网页会很慢,加载几十秒甚至更长,显示正在等待100.100.100.100。
原因:
经过分析得知adbyby用到了地址http://100.100.100.100/hidecss.js,adbyby会劫持这个地址返回软件doc目录下的hidecss.js给客户端,以便更好过滤广告,但是不巧的是100.100.100.100是国外的ip,当ss插件抢先处理这个地址时,将这个请求真正的发给100.100.100.100就造成了一直得不到响应的现象。一般情况使用iptables时都使用-A(追加到最后)来添加规则,所以ss比adbyby先启动,请求先被ss的iptables规则处理那么就会冲突。
解决的思路:
分析了这么多,如果你看懂了,那解决的思路也就水到渠成了,不让ss处理对100.100.100.100的请求,就不会有问题了。
解决的方法1:
在ss的iptables chain里将100.100.100.100
地址return掉,但是ss插件千差万别,这里只给一个范例可能和你的插件区别很大,放在ss插件的iptables配置中
把$appname换成你的ss插件的iptables chain的名字(可不是ss插件的名字撒)。
解决的方法2:
OK下面就介绍较为通用的方法,思路是将100.100.100.100
的地址DNAT到路由器的ip上,然后将hidecss.js拷贝到web服务器根目录下,等于手动的完成了adbyby应该做的工作,好的开搞,分三步:
1. 在ss的防火墙配置/etc/firewall.d/10-shadowsocks
中加上(或者adbyby的防火墙配置文件中):
这段代码的意思是插入一条规则到PREROUTING链的第1条(还记得上面说的顺序很重要么?我素NO.1,还有谁2333333~~)将所有的对100.100.100.100
的访问转移到192.168.199.1
(路由器的LAN ip上)
- 把
/tmp/storage/mmcblk0p2/adbyby/doc
目录下的hidecss.js
复制到/www
web服务器根目录下(更好的办法是做一个软链接)。 - 重启防火墙
/etc/init.d/firewall restart
- 验证: 打开浏览器输入: http://100.100.100.100/hidecss.js 能打开就说明你成功了,享受无墙无广告是世界吧!
No Wall No AD~!
Enjoy It!~
解决方案中的目录按自己的具体情况自行修改,欢迎留言讨论,实在惨不忍睹的白(手动斜眼)可以远程帮你搞定。
附录:
ss安装教程
评论框君很顽皮,需要科学上网才能看到哦!~
关注微信公众号(MarIxs)也能联系到我哦!