如何在DD-WRT上使用Pixelserv删除广告

有很多方法可以阻止浏览器中的广告,但是如果您可以在路由器上阻止它们会怎样呢?下面介绍如何使用DD-WRT固件和故意的“DNS毒化”来拦截您网络中每台设备的广告。

概述 / 综述

更新:指南已更新,以反映评论者提供的反馈,并使用较新的像素服务器可执行文件和ChangeLog更新了反广告包。

现在每个人脑海中的第一个问题是“为什么不直接使用广告拦截呢?”

对于很多人来说,这根本没有理由,特别是考虑到Chrome的新功能可以将您使用的扩展复制到您运行Chrome的每台计算机上。

答案介于不必向网络上的所有用户传授广告拦截(我指的是您的妈妈、姐姐、奶奶和办公室秘书)所带来的开销减少和在您设置的每台计算机上不受其困扰所带来的便利之间。这是假设您的网络上有一些您不打算在其上配置个人环境的计算机(例如“核心服务器”或VM)。

注:尽管我在家里的路由器上使用了下面的方法,但我发现ad-block是一个非常好的补充,我确实建议将这两种方法结合使用。另外,如果你没有DD-WRT路由器,使用广告块就足够了。事实上,我非常喜欢这个程序,我已经把钱捐给了它的开发者,我应该鼓励每个人都这样做,以保持它的发展。

它怎麽工作?

本质上,这是通过故意毒化我们的DNS来返回未批准列表中的域的特定IP来实现的。这份未经批准的名单将包含专门负责提供广告内容的网站的域名,所以我们不会太怀念它们。

我们将在路由器上设置辅助HTTP服务器,以提供透明的单像素图像,作为对任何URL请求的答复。结合DNS“错误”解析,这将导致网络客户端从我们的内部像素服务器请求内容,并得到一个空白图像作为响应。

要生成未经批准的列表,我们将创建一个个人列表和两个动态下载的列表。动态列表是MVP主机文件和Yoyo域列表,它们一起保存非常广泛的广告站点列表。通过利用这些列表,我们只需负责在我们的个人列表中添加尚未在其中一个列表中的站点的增量。

我们还将为不想因为任何原因被屏蔽的域名设置“白名单”。

前提条件和假设

耐心点,年轻人,这是一本很长的书。 此过程是在DD-WRT(v24pre-sp2 10/12/10 mini r15437)上创建和测试的,因此您应该已经在路由器上安装了此版本或更高版本才能使用它。更多信息请访问DD-WRT网站。 为便于解释,假设路由器已恢复为其“出厂默认设置”,或者自那时以来所使用的设置与其“开箱即用”预设没有任何变化。 客户端计算机将路由器用作DNS服务器(这是默认设置)。 JFFS的空间(如果有疑问,我建议使用迷你版的DD-WRT)。 假设您的网络*已经设置好,并且它是C类(子网为255.255.255.0),作为将分配给像素服务器程序的C类网络(x.y.z.254)上的最后一个IP。 愿意安装WinSCP。

*脚本在第一次运行后将无法调整阻止列表,直到下一个刷新周期(3天)。

学分

更新:特别感谢“mstombs”为伟大的C代码片段,如果没有他的工作,所有这一切都是不可能的,“Oki”为编译Atheros兼容版本并引用;-)和“Nate”为帮助QA-ing。

虽然我做了很多工作来完善这个过程,但它的灵感是由DD-WRT论坛上的人激发的,本指南的一些基础可以在“使用DD-WRT重新访问的广告阻止(简单)”、“没有Perl的Pixelserv,没有任何JFFS/CIFS/USB自由”和“DNSmasq上的Flexion.Org Wiki”以及其他内容中找到。

让我们开始行动吧

为SCP访问启用SSH

通过启用SSH,我们反过来使自己能够使用SCP协议连接到路由器。启用该功能后,我们就可以使用WinSCP程序直观地导航路由器的文件夹结构(我们稍后会看到)。

要做到这一点,使用WebGUI,转到“服务”选项卡。找到“secure shell”部分,然后单击sshd设置的“Enable”单选按钮。

一旦完成,WebGUI应该如下所示,您可以点击“保存”(暂不应用)。

启用JFFS

为了以一种稳定、可重现的方式进行设置,并且*成为一个“好的互联网公民”,我们将使用JFFS来存储尽可能多的配置。如果由于篇幅限制不能启用JFFS,还有其他方法可以在不启用JFFS的情况下实现这一点,但是这里没有介绍这些方法。

*其他方法让您的路由器在每次运行脚本时下载像素服务器可执行文件和动态列表。因为这会给保存列表和可执行文件的服务器带来压力,而且这会花费一些人的钱,所以此方法会尽可能避免这种情况。

如果您还不知道什么是JFFS,下面的解释(取自DD-WRT的关于JFFS的wiki条目)应该会弄清楚:

要在路由器上启用JFFS,请转到“Administration”选项卡并找到JFFS部分。下图显示了您可以在“管理”选项卡中找到此部分的位置。

在JFFS2支持部分中,单击“JFFS2”和“Clean JFFS2”设置(当出现时)的“Enable”单选按钮。选择后,单击“保存”。

保存设置后,仍在“管理”选项卡上,使用“重新启动路由器”按钮重新启动路由器。这将应用设置并执行JFFS“分区”所需的“格式化”。

当WebGUI从重启返回到“管理”选项卡时,再等待半分钟,然后刷新页面。

如果成功,您应该看到JFFS挂载有一些空闲空间,如图所示。

像素服务器设置

下载并解压dd-wrt zip压缩文件的反广告包,其中包含像素服务器可执行文件(我们没有获得荣誉,只是避免了“热链接”)、广告拦截脚本(真正由您编写)和由“Mithridate VII Eupator”和I创建的个人域名列表。

现在是将文件放入路由器上的JFFS挂载的时候了。为此,请安装WinSCP(它是“Next->Next->Finish”类型的安装程序)并打开它。

在主窗口中,填写如下信息:

主机名:您路由器的IP(默认值为192.168.1.1)

端口号:保留22不变

用户名:root(即使您更改了WebGUI的用户名,SSH用户也始终是*root*)

私钥文件:保留为空(仅当您创建基于密钥对的身份验证(我们尚未创建)时才需要)

文件协议:SCP

我们还需要禁用“Lookup user group”,如下所示(感谢mstombs指出这一点),因为WinSCP期望在另一边有一个成熟的Linux,而DD-WRT的开发人员,尽管有所有出色的工作,也无法提供(主要是因为没有足够的空间)。如果将此选项保留为选中状态,则在连接和保存编辑的文件时将会遇到可怕的邮件消息。

选择高级,然后取消选中“查找用户组”。

虽然它是可选的,但您可以选择现在保存设置以供以后使用。如果您确实选择保存推荐的设置,也建议您保存密码(尽管“安全偏执”精神病院直截了当地说我们是在亵渎SSH的存在)。

然后,您的主窗口将如图所示,您只需双击该条目即可连接到路由器。

由于这是您第一次连接到路由器,WinSCP将询问您是否愿意信任另一端的指纹。单击“是”继续。

DD-WRT的开发人员已经实现了一个横幅欢迎消息,其中包含有关您安装的固件的一些信息。一旦出现红色,请单击“永不再显示此横幅”复选框,然后单击“继续”。

连接后,导航到顶层文件夹(又称根“/”),然后返回到“/jffs”,因为这是路由器文件系统上唯一永久可写的位置(“/tmp”无法重新启动,其余为只读)。

通过按F7或右键单击空白点来创建一个新文件夹,将鼠标悬停在“新建”上,然后单击“目录”。

将新目录命名为“DNS”。我们创建这个目录是为了将JFFS目录中的内容组织起来以备将来使用,并且因为我们主要改变了DNS服务的工作方式。

从Anti-ads-pack-for-dd-wrt zip存档中复制“Pixelserv”和“Disable-adds.sh”文件,方法是选择它们(使用“Insert”键),按“F5”,然后按“Copy”。

注:如果您的路由器基于Atheros(您可以在DD-WRT维基上查看),您将需要使用Oki提供并包含在包中的Pixelserv_AR71xx,并将其重命名为“Pixelserv”,然后才能继续。

一旦文件放到路由器上,我们需要通过选择它们(再次使用“插入”)右键单击然后单击“属性”来使它们成为可执行文件。

在“属性”窗口中,单击“Owner”行的“X”。这将授予文件执行权限。

路由器设置

在“Commands”文本框中,将脚本的位置写为“/jffs/dns/disable_adds.sh”,如图所示,然后单击“Save Startup”。

如果成功,您应该会看到该脚本已成为路由器启动的一部分,如上图所示。

设置个人阻止域列表(可选)

如果您发现两个动态列表没有捕获某些内容,则此列表使您可以将域添加到未批准的列表中。 要做到这一点,有两个选项,它们协同工作,因此您可以根据对您更方便的方式使用这两个选项。

注意:语法很重要,因为我们实际上正在创建DNSMasq守护进程(负责DNS-Name到IP转换的进程)将直接使用的配置指令。因此,此处不正确的语法将导致服务崩溃,并使路由器无法解析域名的IP地址(您已被警告)。

为了找到要屏蔽的违规域名,您可能需要使用我们的“在网站标题中查找秘密消息”指南作为入门读物。查找通告域名的步骤实际上是相同的,只是在本例中您查找的是地址而不是消息。

第一种也是公认的更容易访问的方法是将列表放入wegGUI中的“DNSMasq”配置框中。这是因为要添加到此列表中,您可以简单地访问WebGUI,而不必“在幕后”进行更改。

转到“Services”选项卡,找到“DNSMasq”部分,然后找到“Additional DNSMasq Options”文本框。

在此文本框中输入要使用语法“address=/domain-name-to-block/pixel-server-ip”阻止的域列表,如下图所示:

在本例中,“192.168.1.254”是根据LAN的“网络地址”为像素服务器生成的IP。如果您的网络地址不是192.168.1.x,则必须相应地调整像素服务器的地址。

完成后,单击页面底部的“保存”(暂不应用)。

第二种选择是将您想要阻止的域名列表复合到“Personal-ads-list.conf”文件中,该文件是我和“MitredatesVII Eupator”组装的。该文件是您之前下载的zip存档的一部分,对于这两种方法来说都是一个很好的开始。

为了使用它,如有必要,使用您最喜欢的文本编辑器来调整像素服务器的IP(与上面的约束条件相同)。然后,只需将其复制到“/jffs/dns”目录即可,因为您有其他文件。一旦它进入其中,您就可以使用WinSCP对其进行编辑并添加域。

设置白名单

这是将从动态“主机”和“域”列表中省略的域列表。

这是必要的,因为简单地阻止某些域会导致使用它们的站点出现故障。最值得注意的例子是“google-analytics.com”。

如果我们屏蔽它的域,它不会改变使用它的站点让您的浏览器下载在离开页面等事件上运行的JavaScript的事实。这意味着对于这样的站点,您的浏览器将试图通过联系google域来“呼叫总部”,无法理解回复,您将不得不等到脚本超时才能继续下一页。这并不是一种愉快的冲浪体验,这就是为什么任何包含“Google分析”和“googLead服务”的域名*都被硬编码免除过滤。

当脚本第一次运行时,将在“/jffs/dns”目录下使用上面提到的域为您创建此列表。

要使用白名单,请使用WinSCP打开文件并**将您要排除的域添加到列表中,同时注意不要留下任何空行(留下空行将删除所有列表中的所有域)。

*虽然脚本在第一次运行时使用其中的域创建白名单,但它不会坚持在以后的运行中显示它们。因此,如果你觉得谷歌应该被屏蔽,尽管有上述问题,你可以从白名单中删除这些域名。

**您必须在列表的开头输入所需的新域。这是因为bash解释新行…的方式有一个错误。对不起,我还没有解决这个问题的办法。

实施 / 执行 / 完成 / 死刑

就是这样,终于到了调用脚本的时候了,只需重新启动路由器即可查看结果。

要从WebGUI执行此操作,请在“管理”选项卡下返回“管理”,在页面底部单击“重新启动路由器”,然后等待路由器重新启动。

脚本第一次执行其职责可能需要几分钟时间。

在WRT54Gx类型的路由器上,您将知道脚本何时执行完毕,因为它会闪烁路由器前面的Cisco橙色LED(其它路由器应该有类似的“Tell Tail”标志)。

更新:在发现此部件是非硬件不可知功能后*已将其删除。

当我们试图看到网络元素的缺失时,我建议您简单地浏览几个网站,看看效果如何。

但是,如果您希望确保过程成功,则故障排除部分中的第一个调试步骤是一个很好的起点。

*它实际上已被注释掉,因此如果您确定它不会对您的设置造成问题,您可以将其恢复。

好好享受吧!

分析解决问题 / 调停纠纷 / 检修故障

如果您遇到问题,您可以做几件事来检查哪里出了问题。

测试通告域是否解析为Pixelserv IP。 您可以通过对“违规”域发出nslookup命令来完成此操作。例如,“ad-emea.dubleclick.com”是个人列表中被阻止的主机的一部分。通过在命令提示符下发出“nslookup ad-emea.dubleclick.com”,结果应该如下所示: 其中,正常的解锁答案应如下所示: 重来一遍。 要确保路由器的设置没有与广告阻止配置冲突,请将路由器恢复为“出厂默认设置”,然后重试。“成功后,请添加您的自定义更改,希望它们不会再次冲突。” 确保您的客户端使用路由器作为DNS。 特别是在使用VPN或比正常的路由器到计算机设置更复杂的网络时,您的客户端计算机可能根本没有使用路由器作为其DNS。在上面的命令中很容易看到客户端使用的是什么DNS服务器,如果IP与路由器不同,您就发现了问题。 清除您的个人计算机DNS缓存。 这是因为,否则您可能仍会看到测试站点的广告,原因很简单,因为您的计算机已经知道如何在不咨询DNS的情况下自行获取广告内容。在Windows上,这将是“ipconfig/flushdns”。 关闭浏览器。 有时浏览器保存缓存的信息,因此如上所示清除DNS缓存无济于事。 如果有疑问,请重新启动。 有时缓存可以持续存在,清除它们的最好方法是重新启动。从路由器开始,如果问题仍然存在,则从客户端计算机开始。 使用系统日志。 您可以激活路由器的syslog守护进程,然后通过检查其消息来查看消息,以查看脚本是否遇到任何问题。此外,该脚本还添加了一些命令别名,以简化调试。 为此,请转到“服务”选项卡并启用syslog守护程序,如下图所示: 注意:当您在另一台机器上有监听syslog服务器时使用“远程服务器”(如使用kiwi),如果您没有监听syslog服务器,只需将其留空即可。 启用后,您可以通过查看终端中的/var/logs/message文件来查看调试消息。 *要查看启动时的所有消息,您可以使用“more/var/log/messages”。 *要在日志中仅查看脚本中的消息,请使用“clog”别名。 *要实时查看传入的消息,请使用“ail-f/var/log/messages”或其别名“tlog”。 理解剧本。 尽管我为这本指南和剧本的旧版本制作了这段YouTube视频,但它仍然包含了许多适用于新的和改进的版本如何工作的真相和解释。

希望路由器之神对你有利

相关文章