linux配置dnsmasq本地dns缓存需停用systemd-resolved、安装dnsmasq、设listen-address与no-resolv、指定server上游dns、启用cache-size,最后验证53端口监听及dig查询时间下降。

Linux中配置dnsmasq作为本地DNS缓存服务,核心是停用冲突服务、安装dnsmasq、修改关键配置项、指定上游DNS,并让系统解析请求走本地。它轻量、可控、兼容性好,比systemd-resolved更适合日常使用。
停用 systemd-resolved 避免端口冲突
systemd-resolved 默认占用 127.0.0.53:53,会和 dnsmasq 冲突,必须先禁用:
-
停止并禁用服务:
sudo systemctl disable --now systemd-resolved -
删除原有 resolv.conf 并重建:
sudo rm -f /etc/resolv.conf,然后写入nameserver 127.0.0.1 -
锁定文件防止被覆盖:
sudo chattr +i /etc/resolv.conf(后续如需修改,先执行chattr -i)
安装 dnsmasq(适配主流发行版)
无需编译,直接用包管理器安装即可:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
Debian/Ubuntu:
sudo apt update && sudo apt install dnsmasq -y -
RHEL/CentOS 7/8/9:
sudo yum install epel-release && sudo yum install dnsmasq -y(CentOS 8+ 可用dnf替代yum) - 安装后服务默认未启动,需手动启用:
sudo systemctl enable --now dnsmasq
关键配置项(编辑 /etc/dnsmasq.conf)
只需调整几项就能满足大多数缓存需求,避免改错全局行为:
-
监听地址:添加
listen-address=127.0.0.1(仅本机)或listen-address=127.0.0.1,192.168.1.100(加局域网IP) -
绑定接口更安全:加上
bind-interfaces,防止监听到意外网卡 -
关闭自动读取系统 DNS 设置:
no-resolv(否则会忽略你写的 server 行) -
指定上游 DNS:例如
server=114.114.114.114(国内快)、server=8.8.8.8(备用),可写多行 -
启用缓存:
cache-size=1500(够日常用),还可加min-cache-ttl=300控制最小缓存时间 -
集成 hosts 解析:保留默认的
addn-hosts=/etc/hosts,内网域名可直接写进 /etc/hosts 生效
验证与测试是否生效
改完配置别忘了重启服务:sudo systemctl restart dnsmasq,再确认监听状态:
- 检查端口:
sudo ss -tuln | grep ':53',应看到 127.0.0.1:53 - 查一个域名两次:
dig @127.0.0.1 github.com +short,对比两次输出里的 Query time - 首次查询可能 20–50ms,第二次降到 0–5ms,说明缓存已工作
- 顺带测试 hosts 是否生效:
echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts,再ping test.local应通










