NAS上搭建DNS服务,统一屏蔽家庭网络上的所有广告

习惯把小说下载下来看,然后用小米自带的手机上的阅读器看,但是这个阅读器上竟然往本地txt里插入广告。

婶是真不能忍呀,果断换个阅读器。

同时发现家里的投影、手机上其他的软件里也有各种恶心的主动弹窗广告。

电脑端能够安装ADBlock 等插件屏蔽某些恶心人的网页广告,但是移动端以及应用里内嵌的广告,就没法处理了。

由于自建了NAS,想到恰好可以在NAS上搭建自己的DNS服务,来屏蔽广告的DNS请求。

这样只需修改路由的DNS,然后其他全部设备都能实现广告过滤。

另外由于DNS在内网,还能起到加速域名解析的作用,也能避免DNS投毒污染。

操作系统:ubuntu 20.04 LTS
DNS服务:bind 9

搭建步骤:

1.安装 bind9 服务
$ sudo apt install bind9
2. 修改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;};
};
3. 处理广告黑名单

创建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
​4. 把生成的 db.rpz.blacklist 文件复制到 /etc/bind/db.rpz.blacklist 。
5. 重新加载配置文件或重启服务
# 重新加载配置文件
$ 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,就可以实现家庭所有设备过滤广告了。

 

 

 

 

评论列表: