SmartDNS 并行解析 DNS 并返回最快 IP:家庭与小型团队的落地笔记
【免费下载链接】smartdnsA local DNS server to obtain the fastest website IP for the best Internet experience, support DoT, DoH, DoQ. 一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验,支持DoH,DoT,DoQ。项目地址: https://gitcode.com/GitHub_Trending/smar/smartdns
SmartDNS 是一个本地 DNS 服务器:它监听局域网,对同一个域名并行查询多个上游 DNS,测速后把最快的网站 IP 返回给设备,支持 DoT、DoH、DoQ 等加密协议。下面覆盖最小可用配置、三个场景配方和常见坑。
它到底做了什么
SmartDNS 部署在设备和上游 DNS 之间,局域网里的设备把 DNS 指向它(改网关或 DHCP 下发即可)。收到查询后,它先查缓存,命中直接返回;未命中就同时向同组的所有上游发出 UDP、TCP、DoT、DoH 等请求,并对候选 IP 做 ping 或 TCP 连接测速。本质就是拿"实测最快"替代传统 DNS 的"谁先回包算谁":回复里同时考虑上游响应速度和 IP 质量,IPv4/IPv6 双栈时再做一次双栈优选。
5 分钟跑起来:最小可用配置
SmartDNS 是一个 C 程序,clone 下来编译安装即可:
git clone https://gitcode.com/GitHub_Trending/smar/smartdns cd smartdns && make && make install下面这份配置让 SmartDNS 监听 53 端口,配一个 UDP 上游加一个 DoT 上游:
bind [::]:53 # 监听局域网 53(UDP) bind-tcp [::]:53 # TCP 也监听,供长连接客户端 server 223.5.5.5 -b # UDP 上游,-b 标记为启动引导 DNS server 119.29.29.29 # 冗余上游 server-tls 8.8.8.8 # DoT,默认 853 端口 log-level info存为/etc/smartdns/smartdns.conf并启动后,用dig @127.0.0.1 example.com +short验证:返回真实 IP 即最小配置就绪。
按场景选配方
Web UI 是插件,配置里加plugin smartdns_ui.so和smartdns-ui.ip http://0.0.0.0:6080两行即可。Dashboard 上的平均查询时间、缓存命中率这两个指标,基本能判断配方有没有生效。
给流媒体域名降低首查延迟
看视频首帧慢、后续都快,通常是测速耗时加缓存刚好过期的问题。
prefetch-domain yes # TTL 到期前后台预取 domain-rules /bilibili.com/ -speed-check-mode none # 跳过测速直接返回配完后观察 Dashboard 的 Average Query Time,这些域名的首次查询应降到毫秒级。
让内网域名走指定上游
公司或实验室的内网域名只有内网 DNS 能解析时,把这批后缀划给专用组,别走公网上游。
server 192.168.1.10 -group office -exclude-default-group # 内网 DNS 只进 office 组 nameserver /intranet.example.com/office # 内网后缀路由到 office 组配完后dig @127.0.0.1 某主机.intranet.example.com应返回内网网段 IP,其他域名不受影响。
游戏场景关闭双栈探测
家里没有 IPv6 出口时,返回的 AAAA 会让客户端先等一轮 v6 连接超时,游戏首包延迟明显偏高。
domain-rules /steam.com/ -dualstack-ip-selection no # 该域名不做双栈优选配完后访问该域名的首包延迟应下降,不再出现 v6 超时回退的停顿。
容易踩的几个坑
53 端口冲突怎么查
现象:服务起不来,报 bind 失败,或dig @127.0.0.1无响应。原因:dnsmasq 或系统自带 DNS 已占用 53 端口。修复:先查占用者,协商不动就让 SmartDNS 换端口:
ss -lnup | grep :53 # 看谁在听 53 bind :6053 # 让 SmartDNS 改听 6053DoT 上游连不通
现象:日志里 DoT 服务器超时,查询全落到明文上游。原因:853 端口被拦,或证书校验、SPKI pin 不匹配。修复:先换走 443 的 DoH 验证连通性,或临时加-no-check-certificate定位是不是 pin 问题:
server-https https://1.1.1.1/dns-query # 改用 DoH,走 443IPv6 不通导致访问卡顿
现象:个别网站打开慢,延迟集中在第一次请求。原因:上游回了 AAAA,但家里没有 IPv6 出口,客户端 v6 连接超时后才回退 v4。修复:强制 AAAA 查询返回 SOA,相当于告诉客户端本地没有 IPv6:
force-AAAA-SOA yes # AAAA 查询返回 SOA,客户端直接走 IPv4接下来去哪儿
- etc/smartdns/smartdns.conf:带完整注释的配置模板,上面各参数都能在这里查到用法。
- src/dns_client/:上游客户端与服务器组实现,想了解并行查询和测速如何调度从这里看。
- test/cases/:覆盖缓存、规则、双栈等主要行为,改动配置后跑一遍心里有底。
项目仍在持续更新,功能与修复节奏以仓库的提交记录为准。
【免费下载链接】smartdnsA local DNS server to obtain the fastest website IP for the best Internet experience, support DoT, DoH, DoQ. 一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验,支持DoH,DoT,DoQ。项目地址: https://gitcode.com/GitHub_Trending/smar/smartdns
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考