如何简单粗暴地屏蔽百度联盟广告(包括启用了 cname 的反屏蔽模式)

无穷无尽的广告屏蔽与反屏蔽斗争

不得不说,广告是人类历史上的一个伟大发明,自此开启了“羊毛出在羊身上的”时代,广告主将自己的广告投放到网站/媒体,后者向大众提供免费的服务同时,展示广告主的广告。用户获得了免费的服务,广告主推广了自己的产品,而服务提供方则获得了广告收入,可以说是三赢的做法。

我觉得,所有提供广告屏蔽的博文都应该首先说明一下:对很多网站/服务提供商而言,是一件不得不做的事情,内容创作、服务提供、硬件成本都需要耗费不少的成本和精力。为了能继续提供廉价甚至免费的服务,就需要有足够的收入项来抵消相关的支出,毕竟大家也不全是来做公益的。展示广告就是获得收入的一个好方法,这是一个良性循环,如果所有人都屏蔽了广告,那么免费且优质的内容将越来越少。

国区 Kindle 提供了关闭广告的选项,但是大多数人都选择了开启,因为 kindle 上的广告质量还是挺不错的,不影响阅读,尤其是屏保广告,看上去还挺好看的。

那么为什么要屏蔽广告呢?理由可以说出很多:塞满了整个屏幕的广告、不忍直视的广告图片、隐私保护、节省流量、网站加载速度。。。大概作为崇尚开源的极客们有一种发自内心的认为所有东西都能白嫖的执念吧,不喜欢被广告打扰,开发了各种广告屏蔽插件。

百度广告联盟的反屏蔽措施

面对泛滥的广告屏蔽插件,最大的广告公司Google选择了向屏蔽插件们缴纳巨额的保护费以换来对自己的广告网开一面。与Google不同,百度拒绝这么做,吃人血馒头的人怎么会低三下四的求别人放过自己呢。跟 Google 老老实实的只用一个域名不同,百度启用了一大堆的子域名来投放广告,防不胜防,不过好在也不多,网友们一个一个加进去也挺快。

再后来,百度广告联盟的团队想出一个奇招,允许网站主使用自己的域名,然后cname到百度的广告域名,这样原本基于域名匹配的广告屏蔽规则就懵逼了,而且大大小小的网站主那么多,域名根本加不完。

某一天,我想到,既然是通过cname的模式来投放广告,不管怎么样都逃不过ip这一块,只要直接把百度联盟的 ip 屏蔽,任你换再多的域名也不好使。

一点挫折

想的还挺美的,以“百度广告联盟 cname 反屏蔽”为关键词,找到一个开启了反屏蔽模式的网站,再定位到广告域名,域名反查,发现cname的域名是 xxx.cnamexxxx.jsl-cdn.com,一查这个域名,懵逼了,这是百度加速乐的域名。这意味着如果要屏蔽ip的话,需要屏蔽整个cdn的ip段,势必造成一定的误杀。

不过仔细想想,作为程序员的我,百度整个域名都屏蔽了,再屏蔽这些使用百度cdn的小网站,也没啥大不了的嘛,毕竟技术人用百度的可真不太多。

说干就干,搜一下“百度云加速 IP段”,找到了一篇给出了最新IP段的文章,接下来就很简单了,把这些IP段全部屏蔽就可以了。

V2Ray

不太喜欢用 iptables,所以使用了其他方案。正好最近在向 V2Ray 迁移,发现这工具还挺好用的,路由规则也很好用,就打算把广告屏蔽这个加进去。V2Ray是一个流量转发的工具,对,是一个流量转发工具,它的设计思路是不区分服务器端和客户端,将它们看成是同等地位的节点,每个节点之间通过一些协议转发流量,节点间通信支持加密或混淆。关于工具的使用,这里不过多涉及,只重点介绍路由规则。

V2Ray 的广告屏蔽路由规则

首先在 outbounds 里加入这么一条

1
2
3
4
5
{
"protocol": "blackhole",
"tag": "blocked",
"settings": {}
}

routing 模块中的 settings -> domainStrategy 设为 IPOnDemand
然后在 routing -> settings -> rules 列表中添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
{
"type": "field",
"ip": [
"115.231.186.0/24",
"115.231.187.0/24",
"117.148.160.0/24",
"117.148.161.0/24",
"183.61.177.0/24",
"183.61.190.0/24",
"122.190.2.0/24",
"122.190.3.0/24",
"112.25.90.0/24",
"112.25.91.0/24",
"58.211.2.0/24",
"58.211.137.0/24",
"182.150.0.0/24",
"182.150.1.0/24",
"183.232.51.0/24",
"183.232.53.0/24",
"157.255.25.0/24",
"157.255.26.0/24",
"101.71.55.0/24",
"101.71.56.0/24",
"61.54.46.0/24",
"61.54.47.0/24",
"124.95.168.0/24",
"124.95.188.0/24",
"183.61.236.0/24",
"14.17.71.0/24",
"59.51.81.0/24",
"220.170.185.0/24",
"220.170.186.0/24",
"117.27.149.0/24",
"119.167.246.0/24",
"150.138.149.0/24",
"150.138.150.0/24",
"150.138.151.0/24",
"42.236.93.0/24",
"42.236.94.0/24",
"117.34.13.0/24",
"117.34.14.0/24",
"183.60.235.0/24",
"116.31.126.0/24",
"116.31.127.0/24",
"222.216.190.0/24",
"219.159.84.0/24",
"61.182.137.0/24",
"61.182.136.0/24",
"120.52.29.0/24",
"120.52.113.0/24",
"61.155.149.0/24",
"61.156.149.0/24",
"61.155.165.0/24",
"119.188.97.0/24",
"119.188.9.0/24",
"180.163.188.0/24",
"180.163.189.0/24",
"163.53.89.0/24",
"101.227.206.0/24",
"101.227.207.0/24",
"119.84.92.0/24",
"119.84.93.0/24",
"113.207.100.0/24",
"113.207.101.0/24",
"113.207.102.0/24",
"112.65.73.0/24",
"112.65.74.0/24",
"112.65.75.0/24",
"111.32.135.0/24",
"111.32.136.0/24",
"125.39.174.0/24",
"125.39.239.0/24"
],
"outboundTag": "blocked"
}

这个在自己的节点或是在远程服务器上添加都可以,建议在放在本地,能减少一些流量开销(但是会造成dns泄漏)。

然后,重启 V2Ray,完毕!