树莓派自建DNS服务器


前几天发现家里的DNS被劫持,电脑、手机收到了一大堆广告推送很是心烦。突然想起为何不自己搭个DNS服务器给自己的设备做解析。事不宜迟说干就干。

首先安装dnsmasq,顺带安装dnsutils,dnsutils安装后可以简单测试DNS是否配置有效,执行命令如下:

apt install -y dnsmasq dnsutils

修改dnsmasq配置文件,修改前先备份一下,养成一个良好的习惯。

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
nano /etc/dnsmasq.conf

dnsmasq配置文件里面有好多内容,主要修改如下几个条目:

resolv-file=/etc/resolv.dns.conf
strict-order
listen-address=127.0.0.1,192.168.10.100
address=/test.red/127.0.0.1
cache-size=10000

其中resolv-file表示从哪里获取上游DNS服务器,默认是/etc/resolv.conf,但是这个配置文件在每次重启后会被重置,所以我自己弄一个。

strict-order表示严格按照resolv-file的顺序从上往下进行DNS解析。

listen-address表示服务监听的地址,其中192.168.10.100就是我树莓派在局域网中的地址,其他DNS客户端设备配置DNS服务器时就填这个地址。

address表示自定义解析A记录,这里主要用来测试DNS是否配置且启用。实际这个参数用处很多,这里就不多说了,需要了解的自行百度。

cache-size表示缓存条目数量。

这样dnsmasq配置文件修改完成,现在需要新建之前我说的那个resolv-file。

cp /etc/resolv.conf /etc/resolv.dns.conf
nano /etc/resolv.dns.conf

修改内容。

nameserver 127.0.0.1
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 180.76.76.76

223开头的两条为阿里云公共DNS,180开头的为百度公共DNS,建议不要添加运营商的DNS,很多广告行为实际都是运营商干的。其他的公共DNS可以根据自己的需求添加。 至此基本配置已经完成,将dnsmasq添加到自启动并启动服务。

systemctl enable dnsmasq --now

查看dnsmasq状态

systemctl status dnsmasq

一般得到如下图信息即代表服务正在运行。

然后可以执行一下dig test.red简单的测试DNS解析是否已经配置正确。

从图中信息中可以看出test.red的解析地址是127.0.0.1,这和我之前配置的自定义解析A记录相同,说明DNS解析已经配置成功。

至此树莓派自建DNS服务器完成。