A local DNS server to obtain the fastest website IP for the best Internet experience, support DoT, DoH. 一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验,支持DoH,DoT。
SmartDNS 是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。 SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果; 支持DOT(DNS over TLS)和DOH(DNS over HTTPS),更好的保护隐私。
与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。
支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。
使用指导
SmartDNS官网:https://pymumu.github.io/smartdns
软件效果展示
阿里 DNS
使用阿里 DNS 查询百度IP,并检测结果。
$ nslookup www.baidu.com 223.5.5.5
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 180.97.33.108
Name: www.a.shifen.com
Address: 180.97.33.107
$ ping 180.97.33.107 -c 2
PING 180.97.33.107 (180.97.33.107) 56(84) bytes of data.
64 bytes from 180.97.33.107: icmp_seq=1 ttl=55 time=24.3 ms
64 bytes from 180.97.33.107: icmp_seq=2 ttl=55 time=24.2 ms
--- 180.97.33.107 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 24.275/24.327/24.380/0.164 ms
pi@raspberrypi:~/code/smartdns_build $ ping 180.97.33.108 -c 2
PING 180.97.33.108 (180.97.33.108) 56(84) bytes of data.
64 bytes from 180.97.33.108: icmp_seq=1 ttl=55 time=31.1 ms
64 bytes from 180.97.33.108: icmp_seq=2 ttl=55 time=31.0 ms
--- 180.97.33.108 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 31.014/31.094/31.175/0.193 ms
SmartDNS
使用 SmartDNS 查询百度 IP,并检测结果。
$ nslookup www.baidu.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 14.215.177.39
$ ping 14.215.177.39 -c 2
PING 14.215.177.39 (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39: icmp_seq=1 ttl=56 time=6.31 ms
64 bytes from 14.215.177.39: icmp_seq=2 ttl=56 time=5.95 ms
--- 14.215.177.39 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 5.954/6.133/6.313/0.195 ms
从对比看出,SmartDNS 找到了访问 www.baidu.com 最快的 IP 地址,比阿里 DNS 速度快了 5 倍。
特性
-
多 DNS 上游服务器
支持配置多个上游 DNS 服务器,并同时进行查询,即使其中有 DNS 服务器异常,也不会影响查询。 -
返回最快 IP 地址
支持从域名所属 IP 地址列表中查找到访问速度最快的 IP 地址,并返回给客户端,提高网络访问速度。 -
支持多种查询协议
支持 UDP、TCP、DOT 和 DOH 查询及服务,以及非 53 端口查询;支持通过socks5,HTTP代理查询; -
特定域名 IP 地址指定
支持指定域名的 IP 地址,达到广告过滤效果、避免恶意网站的效果。 -
域名高性能后缀匹配
支持域名后缀匹配模式,简化过滤配置,过滤 20 万条记录时间 < 1ms。 -
域名分流
支持域名分流,不同类型的域名向不同的 DNS 服务器查询,支持iptable和nftable更好的分流;支持测速失败的情况下设置域名结果到对应ipset和nftset集合。 -
Windows / Linux 多平台支持
支持标准 Linux 系统(树莓派)、OpenWrt 系统各种固件和华硕路由器原生固件。同时还支持 WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)。 -
支持 IPv4、IPv6 双栈
支持 IPv4 和 IPV 6网络,支持查询 A 和 AAAA 记录,支持双栈 IP 速度优化,并支持完全禁用 IPv6 AAAA 解析。 -
支持DNS64
支持DNS64转换。 -
高性能、占用资源少
多线程异步 IO 模式,cache 缓存查询结果。 -
主流系统官方支持
主流路由系统官方软件源安装smartdns。
架构
- SmartDNS 接收本地网络设备的DNS 查询请求,如 PC、手机的查询请求;
- 然后将查询请求发送到多个上游 DNS 服务器,可支持 UDP 标准端口或非标准端口查询,以及 TCP 查询;
- 上游 DNS 服务器返回域名对应的服务器 IP 地址列表,SmartDNS 则会检测从本地网络访问速度最快的服务器 IP;
- 最后将访问速度最快的服务器 IP 返回给本地客户端。
编译
-
代码编译:
SmartDNS 提供了编译软件包的脚本(
package/build-pkg.sh
),支持编译 LuCI、Debian、OpenWrt 和 Optware 安装包。 -
文档编译:
文档分支为
doc
,安装mkdocs
工具后,执行mkdocs build
编译。from https://github.com/pymumu/smartdns
------------------------------------------------------
Linux安装
- 下载配套安装包,并上传到 Linux 系统中, 标准 Linux 系统(X86 / X86_64)请执行如下命令安装:
tar zxf smartdns.1.yyyy.MM.dd-REL.x86_64-linux-all.tar.gz cd smartdns chmod +x ./install ./install -i
- 树莓派或其他 Debian 系系统(ARM / ARM64)请执行如下命令安装:
dpkg -i smartdns.1.yyyy.MM.dd-REL.arm-debian-all.deb
注意
- ubuntu系统下,
systemd-resolved
会占用TCP53和UDP53端口, 你需要手动解决端口占用问题或者修改smartdns监听端口。 - 日志文件在
/var/log/smartdns/smartdns.log
修改配置
安装完成后,可配置 SmartDNS 的上游服务器信息,一般情况下,只需要增加
server
[IP
]:port
和server-tcp
[IP
]:port
配置项,请尽可能配置多个上游 DNS 服务器,包括国内外的服务器。具体配置参数请参考配置文件
说明- 配置文件
vi /etc/smartdns/smartdns.conf
/etc/smartdns/smartdns.conf
配置包含如下基本内容:# 指定监听的端口号 bind []:53 # 指定上游服务器 server 1.1.1.1 server-tls 8.8.8.8 # 指定域名规则 address /example.com/1.2.3.4 domain-rules /example.com/ -address 1.2.3.4
启动服务
systemctl enable smartdns systemctl start smartdns
将 DNS 请求转发到 SmartDNS 解析
修改本地路由器的 DNS 服务器,将 DNS 服务器配置为 SmartDNS。
- 登录到本地网络的路由器中,配置树莓派,分配其静态 IP 地址。
-
修改 WAN 口或者 DHCP DNS 为树莓派 IP 地址。
注意:
1. 每款路由器配置方法不尽相同,请在网络上搜索对应配置方法。 1. 华为等路由器可能不支持配置 DNS 为本地 IP,可修改电脑端或手机端的 DNS 服务器为树莓派 IP。
检测服务是否配置成功
- 执行
nslookup -querytype=ptr smartdns
- 查看命令结果中的
name
是否为smartdns
或你的主机名,如果是则表示生效
$ nslookup -querytype=ptr smartdns Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: smartdns name = smartdns.
from https://pymumu.github.io/smartdns/install/linux/
No comments:
Post a Comment