news 2026/9/15 16:23:40

SmartDNS 本地DNS落地实践:按家庭角色拆分上游

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SmartDNS 本地DNS落地实践:按家庭角色拆分上游

SmartDNS 本地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本身没坏,但三种用法差别很大,同一套上游服务不了所有人。SmartDNS 架在局域网里,接管所有设备的查询,同时问多台上游服务器,测出哪个返回的 IP 访问最快就把哪个交回给设备;还可以按人指定“用哪套上游”。

把 SmartDNS 跑起来

4行命令装好 SmartDNS

仓库自带 Makefile,编译和安装一步到位,安装过程会同时放好二进制、示例配置和 systemd 单元文件。

git clone https://gitcode.com/GitHub_Trending/smar/smartdns cd smartdns make sudo make install

装完配置文件在/etc/smartdns/smartdns.conf,服务名就是 smartdns,用 systemctl 管理即可。示例配置有两百行注释,大多是进阶选项,起步只需要几行。

最小配置长这样

在配置文件里只启用这几行,其余保持注释:

bind [::]:53 cache-size 32768 log-level info log-file /var/log/smartdns.log server 223.5.5.5 server-tls 1.1.1.1 server-https https://dns.google/dns-query
  • bind [::]:53:双栈监听,家里 IPv4 和 IPv6 设备都能用,53 是 DNS 默认端口,客户端不用改端口。
  • cache-size 32768:缓存三万条左右,全家最常访问的站点第二次起不再走上游。
  • log-levellog-file:把常规日志落到磁盘,没有它,后面排错无据可查。
  • 三行server是重点:一条境内明文、一条 DoT 加密、一条 DoH 加密,三条不同品质的上游。上游DNS可以理解为解析的“批发商”,备得越多越保险,SmartDNS 每次查询都会挑最快的那条返回。

怎么确认 SmartDNS 在工作

启动服务后,把查询直接指到本机:

dig www.example.com @127.0.0.1

看到 SERVER 一行是 127.0.0.1#53,ANSWER 里给出正常 IP,就说明 SmartDNS 已经在响应了。再把路由器的局域网 DNS 指向这台机器的地址,全家就切过来了。

按家庭角色拆分上游DNS

不按“什么设备”分组,按“家里谁用”分组。设备只是载体,体验差别来自用的人。

先给谁配

优先配两组:写代码的和带娃的。前者最需要境外线路,后者最需要拦截,效果最明显。

每个角色怎么分

把一家人的规则集中放在配置末尾:

client-rules 192.168.1.10 -group coder client-rules 192.168.1.20 -group kids client-rules 192.168.1.30 -group gamer client-rules 192.168.1.50 -group tv group-begin coder server-tls 1.1.1.1 server-https https://dns.google/dns-query group-end group-begin kids address /bad-site.com/# group-end
  • 写代码的(192.168.1.10):常访问境外仓库和文档,也不想让查询记录被中间环节看到,DoT 加 DoH 两条加密上游互为备份。
  • 带娃的(192.168.1.20):看的多是动画和课件,境内上游速度就够,重点是某些站点绝不能解析出来,address那行直接拦掉。
  • 打游戏的(192.168.1.30)和客厅电视(192.168.1.50)写法相同:gamer 组组内只放server 119.29.29.29,图低延迟;tv 组组内只放server 223.5.5.5,图省心。
角色上游策略一句话理由
写代码的DoT + DoH 双加密常访问境外站点,查询内容不该被中间环节看到
带娃的境内上游 + 站点拦截动画速度够用,拦得住比滤得准更重要
打游戏的单条境内低延迟线路团战体验靠响应时间说话
客厅电视境内明文上游看剧没有花活需求,可靠就行

匹配顺序怎么理解

规则是“先精确后模糊”:请求进来,先查源 IP 或 MAC 有没有命中 client-rules,命中就用那个组的策略;没命中,落到全局默认。上面四行写的都是固定 IP,设备换了新地址规则就会悄悄失效,这是最容易被忽略的点;改成写 MAC 就不会过期。

按需加料:四种家庭场景的条件菜单 🎛️

这部分是菜单,不是教程。每一条都是“如果你的家是这样的 → 可以这样配”,照单取用:

# 老设备 IPv6 支持差,强制降级回 IPv4 client-rules aa:bb:cc:dd:ee:ff -force-aaaa-soa # 加密上游,查询内容不再裸奔 server-tls 8.8.8.8 server-quic 223.5.5.5 # 双 WAN:两个网卡各接一套 bind :53@eth0 bind :53@eth1 # 按域名拦截特定站点 address /bad-site.com/#

双栈环境怎么接:家里开了 IPv6,总有老设备“解析出 IPv6 但连不上”时,第一行让指定设备的 AAAA 查询固定返回空结果,等于强制它只走 IPv4,其他设备不受影响。

加密DNS上游怎么开:运营商劫持过广告页,或者你不想让人看见“你在问哪些站点”,用第二、三行。DNS 查询默认是明文,运营商和中间节点都能看到全部访问过的域名;加上之后查询被 TLS 包起来,知道内容的只剩上游。

两条宽带怎么分流:家里拉了两条宽带时,第四、五行把两个网卡各接一套 DNS,各网卡的设备只查各自线路的 DNS,再配两套上游,一条线断了不影响另一条。

怎么按域名拦站点:要拦特定网站(家长控制、广告源),第七行即可,该域名查询直接得到空记录,设备端表现为解析失败。

不想碰配置文件的话,编译时加make WITH_UI=1会带上 Web 仪表盘,默认监听 6080 端口,实时查询量、缓存命中、上游健康状态都能直接看到。

出了问题怎么办:三种最常见的情况

  1. 配置改了没反应。前台跑sudo smartdns -f -c /etc/smartdns/smartdns.conf看屏幕输出:立刻退出并报语法错误,就是配置写错了,按提示改完systemctl restart smartdns;能持续运行说明配置没问题,去查服务是否真的重启过。
  2. 解析变慢或时好时坏。用dig www.example.com @127.0.0.1 +time=2试探:超时没回包时,再翻日志里最近的报错——上游查询超时是公网或上游的问题,端口绑定失败则是别的程序占了 53。
  3. 某台设备体验就是不如别人。在日志里找它的请求记录,对照 client-rules:请求走的是默认组,说明规则没命中,多半是设备换了新 IP,把规则里的固定 IP 改成 MAC 即可。

定期体检:每两周跑一次systemctl status smartdns,顺手瞄一眼最近百行日志,半分钟的事。

配置都集中在一个文件里,改完重启就生效,不用动别的服务。建议的节奏:最小配置先跑一阵,发现哪个角色不对劲,再给它补一两条 client-rules,配置很快会收敛。下一步可以做的事:打开 Web 仪表盘,看看三条上游各自的命中率,把长期最慢的那条换掉。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 16:23:39

ActiveX调用MATLAB在CVI和LabVIEW中的混合编程实践

简介:面向需要在Matlab与LabWindows/CVI、LabVIEW之间实现双向数据交互的工程师与科研人员,资源围绕ActiveX技术提供了可运行的完整工程示例,帮助解决跨软件调用测试程序、传递采集数据等常见集成需求。压缩包共21个文件,以C语言源…

作者头像 李华
网站建设 2026/9/15 16:22:54

用Python和Pygame实现围棋小游戏:规则建模、提子判定与AI对战

简介:用 Python 与 Pygame 编写的围棋小游戏完整源码项目,适合想通过实战入门游戏开发的 Python 初学者、Pygame 学习者,以及想了解围棋规则与简单 AI 算法的开发者。整体代码量精简、模块划分清楚,可直接运行体验,也适…

作者头像 李华
网站建设 2026/9/15 16:20:18

Haystack 集成指南:使用 YouComWebSearch 组件接入 You.com 搜索 API

Haystack 集成指南:使用 YouComWebSearch 组件接入 You.com 搜索 API 【免费下载链接】haystack Open-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows wit…

作者头像 李华