习惯把小说下载下来看,然后用小米自带的手机上的阅读器看,但是这个阅读器上竟然往本地txt里插入广告。
婶是真不能忍呀,果断换个阅读器。
同时发现家里的投影、手机上其他的软件里也有各种恶心的主动弹窗广告。
电脑端能够安装ADBlock 等插件屏蔽某些恶心人的网页广告,但是移动端以及应用里内嵌的广告,就没法处理了。
由于自建了NAS,想到恰好可以在NAS上搭建自己的DNS服务,来屏蔽广告的DNS请求。
这样只需修改路由的DNS,然后其他全部设备都能实现广告过滤。
另外由于DNS在内网,还能起到加速域名解析的作用,也能避免DNS投毒污染。
操作系统:ubuntu 20.04 LTS
DNS服务:bind 9
搭建步骤:
$ sudo apt install bind9
修改 /etc/bind/named.conf.options 配置文件,增加或修改 forwarders 服务器地址,当本地没有记录时,向下一级服务器转发请求。
可参考我的配置文件:
options {
directory "/var/cache/bind";
version "nicai?"; # nmap 扫描是返回个乱填的版本号,防止探测到版本号
forwarders {
# 我的网络需要IPv6,所以配置了IPv6的DNS服务器地址,不需要的删除即可
# 然后替换为性能好的、或者绿色的,总之能让你开心的DNS服务商地址
2001:4860:4860::8888;
2001:4860:4860::8844;
8.8.8.8;
8.8.4.4;
2400:3200::1;
223.6.6.6;
2409:803c:2000:1::26;
211.137.191.26;
};
listen-on { any; };
listen-on-v6 { any; };
dnssec-validation no; # 是否开启验证
recursion yes;
response-policy{zone "rpz";}; # 增加响应策略
allow-query { any;};
};
修改 /etc/bind/named.conf.default-zones 文件,增加黑名单zone
zone "rpz"{
type master;
file "/etc/bind/db.rpz.blacklist";
allow-update{none;};
allow-transfer{none;};
allow-query{none;};
};
创建mkADdomains.sh 文件,该脚本实现从anti-ad.net上自动下载广告的黑名单列表,然后生成bind使用的格式。脚本内容如下:
#!/bin/bash
curl https://anti-ad.net/domains.txt > domains.txt
title=`head -n 1 domains.txt`
if [ "$title" = "#TITLE=anti-AD" ]; then
tail -n +5 domains.txt > d.txt
rm domains.txt
sed -i "s/$/& IN CNAME @/g" d.txt
sed -i "s/^\.//g" d.txt
tail -n -13 /etc/bind/db.rpz.blacklist >> d.txt
sort -u d.txt
head -n 13 /etc/bind/db.rpz.blacklist > db.rpz.blacklist
cat d.txt >> db.rpz.blacklist
rm d.txt
echo "Create block domains done !"
else
echo "Invalid data!"
fi
# 重新加载配置文件
$ sudo rndc reload
server reload successful
# 重启服务,如有必要
sudo systemctl restart bind9
测试:
查询某个广告域名,如果显示如下类似的结果【server can't find xxxx 】则表明过滤成功。
$ nslookup zzhc.vnet.cn
Server: 192.168.1.53
Address: 192.168.1.53#53
** server can't find zzhc.vnet.cn: SERVFAIL
最后把光猫上的主DNS设置为这台电脑的IP,就可以实现家庭所有设备过滤广告了。