搭建本地 DNS 缓存服务,加速所有设备解析速度

2025.7.2 杂七杂八 1248
33BLOG智能摘要
为了改善家庭网络体验,作者搭建了本地DNS缓存服务。通过测试发现,使用公共DNS解析时间长达78ms,而切换到本地DNsmasq缓存后,解析时间减少至3ms。作者选择了轻量级的DNsmasq而非Unbound,并通过配置上游DNS服务器和主机文件来实现缓存和广告过滤。更新路由器DHCP设置后,所有设备都开始使用缓存DNS,网络速度显著提升。该方案通过自定义解析,还能实现内网域名管理和负载均衡,带来更高的性价比和便利性。最后提醒定期更新DNsmasq版本,以避免安全漏洞问题。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

我在家里搭建 DNS 缓存服务器的奇妙体验:网速提升看得见

搭建本地 DNS 缓存服务,加速所有设备解析速度

大家好,我是33blog的站长。最近我发现家里的网络有个奇怪的现象:明明宽带升级到了500M,但打开网页时总感觉”卡卡的”。经过一番排查,发现问题出在DNS解析上。今天就跟大家分享我是如何通过搭建本地DNS缓存服务,让全家所有设备上网速度都提升的实战经历。

为什么需要本地DNS缓存?

说实话,以前我也觉得DNS就是个”小透明”,直到有一天用dig命令测试解析时间,才发现问题:

$ dig baidu.com

;; Query time: 78 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)

每次访问新网站都要花70-100ms在DNS查询上,而且不同设备重复查询相同的域名。如果能在本地缓存这些记录,不就省时了吗?这就是我决定搭建本地DNS缓存的初衷。

选型:dnsmasq 还是 Unbound?

调研后发现两个主流方案:

  • dnsmasq:轻量级,配置简单
  • Unbound:功能更强大,支持DNSSEC

作为一个实用主义者,我最终选择了dnsmasq。原因很简单:我的树莓派性能有限,而且家里就几台设备,没必要上重型武器。

实战安装配置dnsmasq

我的环境是Ubuntu Server,安装过程异常简单:

sudo apt update
sudo apt install dnsmasq

关键的配置在/etc/dnsmasq.conf,我做了这些调整:

# 设置缓存大小
cache-size=1000

# 指定上游DNS
server=114.114.114.114
server=8.8.8.8

# 启用日志(调试用)
log-queries
log-facility=/var/log/dnsmasq.log

这里有个坑我踩过:cache-size的单位是DNS记录条数,不是MB!刚开始设了个50000,结果内存直接爆了…

让所有设备使用缓存DNS

服务端配置好后,还需要:

  1. 在路由器DHCP设置中,将DNS服务器指向树莓派IP
  2. 或者在每台设备手动修改DNS设置

我选择了第一种方案,这样新接入的设备也能自动受益。顺便在dnsmasq里加了广告过滤列表,一举两得!

效果实测:从100ms到3ms的飞跃

用同样的dig命令测试,第二次查询同一个域名时:

$ dig baidu.com

;; Query time: 3 msec
;; SERVER: 192.168.1.100#53(192.168.1.100)

解析时间从78ms降到了3ms!更惊喜的是,在手机上看视频时,之前经常出现的”正在缓冲”提示少了很多。

进阶玩法:自定义域名解析

后来我还发现dnsmasq可以:

  • 给内网设备设置好记的域名(比如nas.lan
  • 屏蔽某些广告域名
  • 实现简单的负载均衡

配置方法就是在/etc/hosts或dnsmasq配置文件中添加:

address=/nas.lan/192.168.1.200

总结:小改动,大提升

这次折腾给我的启示是:有时候网速慢不一定是带宽问题。花半小时搭建本地DNS缓存,就能让全家网络体验明显提升,这性价比简直了!如果你也遇到类似情况,不妨试试这个方案。

最后提醒:记得定期更新dnsmasq版本,我去年就因为没更新差点被一个DNS漏洞坑了… 这是另一个血泪故事了,下次再聊!

评论