极路由ss和adbyby冲突的解决方法

2015.06.28 14:36 Sun| 1104 visits hiwifi| Text

现象:

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配置中

iptables -t nat -A $appname -d 100.100.100.100/32 -j RETURN

把$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的防火墙配置文件中):
    iptables -t nat -I PREROUTING 1 -d 100.100.100.100 -j DNAT --to 192.168.199.1
    这段代码的意思是插入一条规则到PREROUTING链的第1条(还记得上面说的顺序很重要么?我素NO.1,还有谁2333333~~)将所有的对100.100.100.100的访问转移到192.168.199.1(路由器的LAN ip上)

  2. /tmp/storage/mmcblk0p2/adbyby/doc目录下的hidecss.js复制到/wwwweb服务器根目录下(更好的办法是做一个软链接)。

  3. 重启防火墙 /etc/init.d/firewall restart

  4. 验证: 打开浏览器输入: http://100.100.100.100/hidecss.js 能打开就说明你成功了,享受无墙无广告是世界吧!


    No Wall No AD~!
    Enjoy It!~
    解决方案中的目录按自己的具体情况自行修改,欢迎留言讨论,实在惨不忍睹的白(手动斜眼)可以远程帮你搞定。