SmartDNS

SmartDNS 是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。 SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果。

与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。

支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。

项目地址: https://github.com/pymumu/smartdns

使用Entware安装

Entware 包管理器里就有,直接安装就行

sudo opkg install smartdns

安装好了在 /opt/etc/smartdns/smartdns.conf 修改配置文件

我是直接把配置文件复制到 home 目录下,然后建立软链接

这样方便直接在电脑上用编辑器打开修改

mkdir /share/home/用户名/config/smartdns/
cd /opt/etc/smartdns/
cp smartdns.conf /share/home/用户名/config/smartdns/smartdns.conf
mv smartdns.conf smartdns.conf.bak
ln -s /share/home/用户名/config/smartdns/smartdns.conf smartdns.conf

使用docker安装

推荐使用 docker 方式,管理起来和自动启动都比较方便

来规矩,在 /share/Coutainer/softwares/smartdns 下创建 docker-compose.yml 文件,内容如下

version: '3.1'
services:
  smartdns:
    image: ghostry/smartdns
    container_name: smartdns
    restart: always
    volumes:
      - ./smartdns:/smartdns
    ports:
      - 53:53/udp

然后 docker-compose up -d 启动,搞定

我在第一次部署的时候提示53端口被占用,使用命令 sudo lsof -i:53 检查了一下,发现是系统自带的 dnsmasq 服务占用了

搜了很久都没找到这玩意要怎么关,好像是跟威联通默认的DHCP服务有关

这东西的配置文件在 /etc/dnsmasq.conf ,可以在里面把端口改成别的,不过众所周知,威联通的 /etc/ 目录修改了是没用的,重启就还原了

所以只好 killall -9 dnsmasq 杀掉进程。

然后再次启动 docker 版的 smartdns,搞定

启动之后会在当前目录的 smartdns 下生成配置文件,默认配置文件已经够用了,如果要添加自定义映射,再根据官网文档配置即可。

配置

简单配置一下

# 上游DNS配置
server 192.168.1.1
server 8.8.8.8
server 8.8.4.4
server 114.114.114.114
server 223.5.5.5
server 223.6.6.6
server 119.29.29.29
server-tcp 8.8.8.8
server-tls 8.8.8.8
server-https https://cloudflare-dns.com/dns-query

参考资料