20 分钟跑起 SmartDNS:把最快 IP 交到你手里的本地 DNS 服务器
【免费下载链接】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 加密解析。适合想让手机、游戏本少绕远路、还想顺手屏蔽广告的用户。跟着本文走完,你手里会有一份能直接用的配置和一条验证命令。
先看到效果:网站打开快多少
装好之前,先说你会得到什么。
假设你打开一个新闻站,它在上游 DNS 里挂着 3 个 IP。传统做法是把这 3 个 IP 都给你,让你的设备自己挨个试,运气不好就慢。SmartDNS 的做法是:它自己先 ping、先建 TCP 连接,把这 3 个 IP 挨个测一遍,只把最快的 1 个回给你。
官方 README 里有一组实测:同一个站点,直接查上游拿到的 IP ping 值 24ms,走 SmartDNS 挑出来的 IP 只要 6ms 左右,快了 4 倍。你的体感就是"网页秒开、游戏选服不再超时"。
做完本节,你明确了收益预期:解析结果从"设备自己碰运气"变成"服务器帮你测过"。
SmartDNS 是干什么的,4 行命令装好
一句话说透:SmartDNS 站在你的设备和上游 DNS 之间收查询、做缓存、挑最快 IP,顺便能按域名指定 IP 或拦截广告。
编译前确认系统装了 OpenSSL 开发库和 pkg-config(Makefile 依赖这两样)。然后:
git clone https://gitcode.com/GitHub_Trending/smar/smartdns cd smartdns make sudo make install安装后配置文件落在/etc/smartdns/smartdns.conf,默认已写好bind [::]:53(监听 53 端口)和log-level info。二进制装到/usr/sbin/smartdns,并附带 systemd 服务单元,systemctl enable --now smartdns即可开机自启。
上游 DNS → SmartDNS 测速 → 客户端,完整链路如上图。做完本节,你手里有一个正在监听 53 端口的解析服务。
多上游加速怎么配:最小可用配置
挑最高频的诉求做深:家里同时有国内和国外上游,希望国内域名走国内、国外走加密通道,且结果能缓存。打开/etc/smartdns/smartdns.conf,把这几行打开或加上:
bind [::]:53 server 223.5.5.5 server-tls 8.8.8.8 server-https https://dns.google/dns-query speed-check-mode ping,tcp:443 cache-size 32768剩下几个关键参数用这张表补齐:
| 参数 | 作用 | 建议值 |
|---|---|---|
| server / server-tls / server-https | 分别配 UDP、DoT(853 端口)、DoH 上游,配 2~3 个互为兜底 | 至少一明一密 |
| speed-check-mode | 测速方式:ping 快但部分站点不通,tcp:443 更准 | ping,tcp:443 |
| cache-size | 缓存条目数,决定内存占用 | 家用 32768 足够 |
| serve-expired | 上游挂掉时先返回过期缓存,避免网站打不开 | yes |
| address | 给指定域名固定 IP 或直接拦截,广告过滤就靠它 | address /ads.example.com/# |
上游按域名分流不用逐个写死:nameserver /xxx.com/组名可以让某域名只走某个上游组。改完配置执行sudo systemctl restart smartdns生效。做完本节,你的链路是"三上游冗余 + 本地缓存 + 测速优选",单点故障和慢 IP 都被挡在前面。
一行命令验证:解析结果怎么查
dig @127.0.0.1 www.baidu.com +short返回一串 IP 说明服务在正常干活。想确认"挑最快"真的生效,对返回的 IP 执行ping -c 2,再看一眼日志(journalctl -u smartdns),能看到它对各 IP 的测速记录。没有 dig 就用nslookup www.baidu.com 127.0.0.1代替。
做完本节,你有了随时复核解析结果的命令,配置改没改对一目了然。
最容易踩的 3 个坑
- 53 端口被占:Linux 上 systemd-resolved 或 dnsmasq 常占着 53。先
sudo systemctl stop systemd-resolved,或把配置改成bind :5333,验证时改用dig @127.0.0.1 -p 5333。 - 改完配置不生效:SmartDNS 不会自己读新文件,必须重启服务(
sudo systemctl restart smartdns),光改文件没用。 - server-tls 一直超时:多半是机器没有直连公网出口或 853/443 被防火墙拦了。留一条明文
server保底,其余加密上游当增强,别全押在加密通道上。
配完之后去哪看
到这里,"多上游 + 测速 + 缓存"三件套已经完整落地,日常不用再动它。想继续深入:
- 全部参数带注释的参考配置:etc/smartdns/smartdns.conf,每个参数都写了用法示例;
- 上游协议(DoT/DoH/DoQ)实现代码:src/dns_client/;
- 想上 Web 面板的话,
make WITH_UI=1会额外编译smartdns_ui.so插件,效果如下:
配好面板后,解析统计和缓存状态可以直接在浏览器里看。
【免费下载链接】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),仅供参考