DD-WRT 路由器拦截广告教程

71
1 Star2 Stars3 Stars4 Stars5 Stars(快来投票)
Loading...

在这个秋风送爽手脚冰凉的夜里我又不出意外地失眠了,拿 Pad 下棋。因 iPhone 不在身边,狂输不止。期间底部广告频弹,不时误点,跳到浏览器还要再切回。往复如是,心生厌念,磨刀霍霍向广告。臭棋篓子多少都是这样,拉不出屎怪茅坑歪。说到茅坑,有一次一只熊在坑上蹲着,旁边一只兔子。熊问你掉毛么兔子骄傲地说不掉熊说我没带纸就拿兔子擦了屁屁。过了几天熊又来蹲坑,旁边一只棕色松鼠,熊又没带纸感叹到最近没看见兔子啊。松鼠听见了说尼玛我就是前几天那只兔子!

a

天是越来越冷了,秋裤得穿啊。听说,不穿秋裤的,冬天能冻出尾巴来。到时候还要到医院去剪掉;疼不说,还要在不知多大岁数的女护士面前脱裤子,多难为情。这都是题外话,咱们书归正传,剪掉以后在伤口上贴个创可贴比较好,不然容易冻疮。

好了,来看农村魔幻现实主义的可以回栏了,下面是技术内容了。

那为什么要用路由器挡广告呢?别的不行么?

一说挡广告,有那么一小撮人,最先想到“Adblock Plus”这类浏览器扩展。方便,装上不用管。清静,装上不用管。且不提还有装不上这扩展的 I 什么啊 O 什么啊,除了浏览器那可还有好几车软件连着网呢。那下载的、聊天的、输入的、卫士的,没十几个广告那么大用户界面上放什么?放少了都没面子。丢人。连图片儿,带链接,那一定得用广告,把窗口给填满了。这些,多牛掰的浏览器扩展都歇菜。

稍微有点儿钱,再买个手机,别管苹果鸭梨的,反正能上网。装几个免费的 App,广告就跟贞子一样一个劲儿从屏幕里头往外拱,一不小心就钻出来了。

再有点儿闲钱,买个平板,别管苹果鸭梨的,反正能上网。要不挡挡广告,就跟把电梯间那块儿大屏幕从墙上掰下来,挂身上,差不多。

所以,把广告拦截在路由器上,对各种设备上各种程序各种 App 的广告统统管用,客观上也减少流量增快网速。

手头儿是价值一百二十块钱的 Buffalo g300nv2,小,破,丑,旧。这路由器就一好处,刷不死。当然如果有人愿意拿 Linksys E4200 跟我把 g300nv2 换去练手,我大概也会完全同意吧。

这个牛叉闪闪的闪光点有一个辛酸的来源,它其实是一个致命的安全缺陷。此路由在开机后几秒会毫不抵抗地接受任何数据,于是碰上行家,刚通电的时候,随便灌点数据进去,就能让它彻底瘫痪丢失所有配置,还要找正确的 firmware 再灌回来。自然和大多数领域一样,不懂行的更让人恐惧。只要不懂行的高跟鞋踩上一脚,或者浇上半杯可乐,灌什么也救不回来了。

于是给它灌了 DD-WRT,下面就以 DD-WRT 为例,讲讲如何用路由拦截广告。

原理自然很简单,就是把送广告的域名都指向 127.0.0.1,然后定期自动更新广告域名列表。你可能想到 hosts 文件,原理是一样的,这里用到路由器上广泛存在的 dnsmasq 服务。SpeedTao

首要问题是,广告域名列表从哪里来。国外确有一些更新频繁的广告域名列表,可我们连自己的广告都看不完,哪有时间看他们的。好在我们有 chinalist,尤其是 chinalist lazy,可从里面把纯域名的摘出来,中文为主英文兼顾还定期更新,理想列表。做成启动脚本定期更新就好了。

下面就是具体实现了,全网络界面操作,不沾命令行,逃不过会稍微解释一下:

1. 进入 DD-WRT 网页管理界面,Services(服务) -> Services(服务),DNSMasq 和 Local DNS(本地 DNS) 均设置成 Enable (启用)。滚到页面底部保存。SpeedTao
step1

2. 进入 DD-WRT 网页管理界面,Administration -> Commands,贴入如下脚本后,Save Startup:

#!/bin/sh
logger WAN up script executing
if test -s /tmp/dnsmasq.ads
then
rm /tmp/dnsmasq.ads
fi

logger Downloading China Lazy List
wget -O - http://adblock-chinalist.googlecode.com/svn/trunk/adblock-lazy.txt |
grep ^\|\|[^\*]*\^$ |
sed -e 's:||:address\=\/:' -e 's:\^:/127\.0\.0\.1:' > /tmp/dnsmasq.ads
grep conf-file /tmp/dnsmasq.conf ||
echo -e "\nconf-file=/tmp/dnsmasq.ads" >> /tmp/dnsmasq.conf
logger Restarting dnsmasq
killall dnsmasq
dnsmasq --conf-file=/tmp/dnsmasq.conf

step2

3. 上面其实是做了一个启动脚本,在路由器每次启动时运行。意思是,下载 China List Lazy,转换生成 dnsmasq 配置文件,再告知 dnsmasq 调用。SpeedTao 最高.

4.进入 DD-WRT 网页管理界面,Administration -> Management, 找到 cron,enable, 然后在下面”Additional Cron Jobs”贴入

* 1 * * * root /tmp/.rc_startup

页面滚到底,保存,重启路由器。成功。可清空浏览器缓存后访问几个大网站看看,虽然效果没有 Adblock Plus 彻底,但也相当明显的。何况,可以打开 Adblock Plus 拦截漏网之鱼么。
step4

via Truth Telling

已有 71 条评论, 我要留言

  1. jhpx说道:

    这个很牛逼啊……不错……回去试试

  2. ROM说道:

    沙发没了,蹲板凳慢慢看。顺带也介绍下硬件嘛

  3. 萝卜L说道:

    很强大,这个‘灌DD-WRT’是不是先要刷路由的固件啊..
    太强大,只能依葫芦画瓢,但没教程也不敢瞎折腾..求指导!

  4. 老N说道:

    牛逼啊,晚上学着试试看

  5. inns说道:

    求教 OpenWrt如何让防广告

  6. scavin说道:

    我是来看农村魔幻现实主义的

  7. kevi说道:

    关于这个,我一开始也是这么做的,还自己写了个定时更新翻墙hosts的脚本,但是很多浮动的元素没有过滤掉,后来干脆在路由器上装了和squid,用正则表达式过滤广告

    • Thruth说道:

      @kevi, 额如果要精密了做有很多做法。包括 pixelserv 什么的,但是小破路由器跑 squid 会死的。

    • VeleSila说道:

      @kevi, 浮动元素一半是广告联盟,一半是广告的某个JS导致..如果是后者,你找到具体地址就可以拦截了.

  8. cyr1l说道:

    @Thruth 喂喂。。。 Speedtao的广告不要到处贴~ 第三步最后面的“ speedtao最高” 是恶意卖萌吗?

  9. 我很长很长很长很长说道:

    第一次看见这么小众这么长的文

    • bone说道:

      +65535,在GR里看到这么长,下意识的滚上去看看到底是不是小众的文章==

  10. Conan说道:

    Apple的Time Capsule可以这么玩么?

  11. 天依蓝说道:

    卖萌呐。。。SpeedTao还得反选才能看见,还是在rss里不小心看到的

  12. named说道:

    对内容修改了下…
    结果PC不能DHCP获取IP了,路由是941 V3@DD15778,最后是貌似基本拦截不到广告…

    #!/bin/sh
    logger WAN up script executing
    if test -s /tmp/dnsmasq.ads
    then
    rm /tmp/dnsmasq.ads
    fi

    logger Downloading China Lazy List
    wget -O – https://adblock-chinalist.googlecode.com/svn/trunk/adblock.txt |
    wget -O – https://easylist-downloads.adblockplus.org/easylist.txt |
    grep ^\|\|[^\*]*\^$ |
    sed -e ‘s:||:address\=\/:’ -e ‘s:\^:/127\.0\.0\.1:’ > /tmp/dnsmasq.ads
    grep conf-file /tmp/dnsmasq.conf ||
    echo -e “\nconf-file=/tmp/dnsmasq.ads” >> /tmp/dnsmasq.conf
    logger Restarting dnsmasq
    killall dnsmasq
    dnsmasq –conf-file=/tmp/dnsmasq.con

    • Thruth说道:

      别乱改啊亲,China lazy list应该已经包含easylist了。另外不同版本 DDWRT sed 命令版本和行为也不一样。telnet/ssh 到路由器上看看发生了神马吧。

      • named说道:

        @Thruth, 严格安装教材操作了,配置也确认了几次,dnsmasq.conf 里有conf-file=/tmp/dnsmasq.ads 这一行
        dnsmasq.ads大小0。。。。
        我也知道这个脚本不影响DHCP,可问题就是我手机和PC都不能获取IP了,要手动指定。。。无解,只能认为是路由器固件的BUG。。

    • named说道:

      @named, 补充,用上面的配置,依旧不行,不能DHCP获取IP,广告更多了。。看来我上面的规则是有效的,不过我用WINSCP进路由看dnsmasq.ads大小是0,很奇怪。。。

      • Thruth说道:

        @named, 此脚本和 DHCP 完全无涉,不过你开启 Local DNS 了么?看 dnsmasq.conf 里面有没有 conf-file=/tmp/dnsmasq.ads 这一行,另外你最上面给出的脚本最后少了一个 f. 是 conf 不是 con.

        有一个问题是,如果路由器启动连不上网,那必然 .ads 文件生成不了,那就只能等以后 cron 定期处理了。

    • Thruth说道:

      @named, 可 ssh/telnet 进去逐行运行看看问题出在哪里。 🙂

    • mmmmmmmmmmm说道:

      @named, 後面一句也是
      前面加個sleep等待完全啟動

  13. H说道:

    好方法!

    不过鉴于我很懒,还是直接用adblock算了。以前用某o时,是用adblock++什么的。现在偶尔用某i时,看到满屏防测漏的广告条就有一种身为ff用户的优越感。

  14. H说道:

    原来是truthtelling的文章。
    在小众圈待久了,觉得几个面孔都是熟的。比如xbeta什么的。无论是g+还是小众还是善用上面……反正就是这么个圈子里。

  15. 注册失败说道:

    话说如何检测是否成功了呢?搞了不知道成功没有…

  16. czd说道:

    用路由来过滤广告是个不错的思路,但是这种方法有一定的局限性。
    比如路由必须要支持DD,其次是只能在有管理权限的路由上操作。
    所以直接在PC端、手机等移动终端过滤最好。

  17. Shadows.X说道:

    好东西,我就是烦手机上的广告,无奈死了……

  18. eesa说道:

    我喜欢这个小编 ^_^
    可以多来点路由器应用的文章,正好可以学习下
    下一讲来讲用路由器实现无人值守bt下载的吧

  19. wzyboy说道:

    本地跑了 Apache 的表示重定向到 127.0.0.0/8 里会在 /var/log/http/ 里留下大量 404 错误。所以建议还是指向 10.0.0.0/8 或者 172.16.0.0/16 之类的段吧。

    (其实一直想不通为啥广告拦截都喜欢指向 loopback 而不是其他的保留段?)

    • wzyboy说道:

      @wzyboy, 自己回复自己一下。发现小众的 /out/ 不支持 https:// 开头的 URI。这条用 http:// 试试……

  20. root说道:

    偶的G300N V2在家里用着原厂固件呢。。。刷了OpenWRT之后DNS经常出问题,不熟悉DD,没再折腾。。现在HG255D刷着OpenWRT做脱机,PT爽歪歪。。
    另外,过滤规则偶还是喜欢稻米鼠博客里绵羊大神的。。。。

  21. petcon说道:

    进来就看到右下角的大闸蟹swf广告,应该是被武汉电信推送的,真恶心啊

  22. 九江说道:

    看到效果了
    solidot.org/的rss文章跳转到da.feedsportal.com被阻挡了,变得太麻烦了

  23. 门软说道:

    前面都是浮云,后面才是重点。

  24. lentrody说道:

    hostx无压力

  25. magic说道:

    貌似不错,只是担心把路由器刷坏了。。。

  26. cv说道:

    这个东西真心不错啊。在下着实喜欢

  27. xwdon说道:

    这作者活在哪个平行世界线上,opera早就能装扩展了
    而且opera不装扩展一样能过滤广告,FF Chrome还要纠结adblock更新不及时,youku之类要么有广告,要么就是黑屏30s。opera自带urlfilter完全没有压力

  28. bbis说道:

    这个不错,公司和家里的路由器都刷了系统,看看怎么弄。

  29. swthchen说道:

    求屏蔽运营商桌面广告教程

  30. weiya1989说道:

    请问Tomoto的路由应该怎么设置啊? 第四、第五步没有啊?

  31. skystar说道:

    基本上我常用软件都是vip,木有广告的,而且hosts就可以,还折腾到路由器是吃饱了撑着

  32. skystarsb说道:

    蠢死了。等你家里有5台电脑,2个平板3个手机的时候,hosts累不死你。

  33. yiyang说道:

    我也用的这款路由器,挺薄的,就是没有流量控制,DDWRT的吸引力也就在这里了? 刷了之后没什么变化吧?

  34. qiao说道:

    v24 mini 可以用这个脚本 去广告吗

  35. omygod说道:

    有整理好的广告域名放出来啊,修改那个chinalist累死了

  36. 小善说道:

    额,,不知道TP-LINK的路由器怎么设置的说???

  37. Rocco说道:

    不懂,就算看懂了也不敢拿自家那个路由器刷去~~~无奈

  38. vincent说道:

    认真按上面说的一步一步来了,没作用。失望。

  39. fuwu1245说道:

    OpenWrt没有类似的设置么 期待OpenWrt的版本。。。
    刚买了个 841 V3

  40. 路各滴说道:

    不错不错

  41. leid77说道:

    在841v7上面试了下,。有点效果。网页打开却是变慢了。哈哈。谷歌浏览器adblock屏蔽的广告,IE上存在。

  42. xxx说道:

    广告还是挺多的,要是能把android上的广告也拦截就好了。

  43. 文龙说道:

    挖坟中。。。。图挂了,呼叫站长

  44. maxhaws说道:

    小编,现在chinalist已经不能使用了。有什么好的list啊?

  45. 水电费说道:

    表示弄了以后感觉有影响,打开网页明显速度变慢了

有不同想法?说说看