我在家里搭建 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
服务端配置好后,还需要:
- 在路由器DHCP设置中,将DNS服务器指向树莓派IP
- 或者在每台设备手动修改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漏洞坑了… 这是另一个血泪故事了,下次再聊!
这个方案太实用了,回家就试试看!
实测真的有效果吗?我是百兆宽带不知道能提升多少 🤔
技术宅拯救世界!看来我的树莓派可以派上大用场了
DNS居然这么影响网速,今天才知道,涨姿势了!
想问下作者,这个缓存一般多久更新一次数据啊?
哈哈,看到内存爆了那段笑出声,技术人谁没踩过这种坑呢
太专业了看不懂,有大佬能给个windows版的教程吗?