站点图标 Linux-技术共享

使用smartdns作为你的内网dns服务器

banner_pic

简介

我使用过很多dns软件,但是唯独没有使用过bind,这个真的很有意思,今天要说的是smartdns,一个十分优秀的dns服务器

为什么要使用它

为了对抗dns污染,大家都知道一点的是dns污染最大的原因是dns使用了udp协议,所以理论上如果你的dns查询请求发出之后,如果dns劫持设备的发出的响应比真正dns服务器的响应包快的话,你永远会获取不到真正的域名ip,就比如我家的宽带请求某些域名得到的响应ip永远是127.0.0.1,这个就很有意思了,所以为了解决这个问题内网的dns服务器是要支持doh(DNS Queries over HTTPS和dot(DNS over TLS ),正好smartdns是支持使用dot或者doh方式去获取dns解析结果的。

当然除了解决dns污染,还有一个好处就是smartdns支持定义多个上游dns服务器,并且同时对上游的服务器进行查询,支持返回最快的ip地址,也支持域名分流,支持添加自定义解析,支持缓存查询结果,最关键的是支持持久化缓存的查询结果,不会因为dns服务器重启导致缓存丢失,跨平台,不仅x86平台可以使用,树莓派也是可以的

安装
首先clone项目
git clone https://github.com/pymumu/smartdns.git
之后编译
cd smartdns
make
当然可能需要安装openssl依赖,如果你没有的话
dnf install openssl-devel
make install
之后就是启动了
systemctl restart smartdns.service
如果一切正常,那么应该就可以解析域名了,之后我们自定义配置一下
定义一下缓存的记录
cache-size 409600
缓存持久化
cache-persist yes
持久化缓存文件的路径
cache-file /home/smartdns.cache
定义一下日志相关的东西
log-level info # 日志级别
log-file /home/smartdns.log # 日志文件路径
log-size 12800k # 日志文件大小
log-num 10 # 保留的日志文件数量

定义几个上游的dns服务器
server 114.114.114.114
server 223.5.5.5
server 119.29.29.29
server 8.8.8.8
server 8.8.4.4
server 208.67.222.222
server 119.29.29.29
server 1.2.4.8

-group的意思是
定义几个tls dns服务器
server-tls 1.0.0.1:853
##RedFish
server-tls 118.89.110.78:853
server-tls 47.96.179.163:853
##GeekDNS
server-tls 119.29.107.85:853
server-tls 47.101.136.37:853
定义几个https dns服务器
server-https https://dns.google/dns-query
server-https https://cloudflare-dns.com/dns-query
server-https https://dns.rubyfish.cn/dns-query
server-https https://sdns.233py.com/dns-query
多定义几个没事,因为就算dns服务器访问不了,只要有一个dns服务器可以查询那么就可以返回正确的结果
定义自定义域名
address /redis.bboysoul.cn/10.10.100.121
详细的参数可以看
https://pymumu.github.io/smartdns/
最后说几句
这几天使用下来的感受还可以,功能上比dnsmasq强很多,之后慢慢观察吧,内网的速度也快了很多

退出移动版