我正在尝试通过 dnsmasq 创建服务器端广告拦截机制,但我只能在服务器本身上获得结果,而无法在连接到我的本地网络的计算机上获得结果。
首先,我的路由器是默认 DNS 服务器,所以我必须设置我的所有设备以使用 dnsmasq 服务器作为主 DNS。当我尝试访问我的一个自托管网站时,我可以检查它是否正常工作:如果我可以在本地访问它们,则 dnsmasq dns 可以正常工作。在这方面,一切都正常。
然后是广告拦截部分。我通过在服务器和主计算机上输入此命令来检查拦截是否有效:
# nslookup doubleclick.net
在服务器上我得到:
Server: 192.168.1.51
Address: 192.168.1.51#53
Name: doubleclick.net
Address: 192.168.1.51
因此它在那里起作用。
在我的电脑上我得到:
Server: 80.67.0.2
Address: 80.67.0.2#53
Non-authoritative answer:
Name: doubleclick.net
Address: 70.32.146.212
所以这里没有...
我的设置如下:
我设置了 dnsmasq 的配置目录:
conf-dir=/usr/local/etc/dnsmasq.d
将文件 dnsmasq.adlist.conf 放在那里,并由一个脚本填充,该脚本从站点获取广告服务器列表并将其编译为 dnsmasq 可读的条目。
简而言之,被 dnsmasq 阻止的域名在服务器内部被正确重定向,但在其他设备中却无法重定向。这就像 dnsmasq 无法广播新添加的域名列表一样。
我可以提供任何您需要的信息来帮助我解决这个问题。这也可能指向了此广告拦截实验之前的错误配置。无论如何,我希望这个问题很容易解决...
我的服务器是 FreeBSD 9.3
答案1
如果某些内容缓存了您的请求而您没有清除 DNS 缓存,则可能会发生此问题。
操作系统通常会缓存 DNS 条目,这使得 DNS 中的更改无法直接看到。
对于 Windows fe,您可以通过类似的方法清除 DNS 缓存。
ipconfig /flushdns
答案2
我已经有一段时间没有使用 nslookup 了,但是这个结果是否意味着名称解析是针对 80.67.0.2 而不是 192.168.1.51(我假设是您的路由器)执行的?
我猜测您的计算机没有使用 dnsmasq 实例进行名称解析。