Ubuntu 本地 DNS 服务搭建指南(dnsmasq)

Ubuntu 本地 DNS 服务搭建指南(dnsmasq)
青萍叙事📝 前言
最近在将开发、测试环境迁移到家里旧笔记本上(3台),为了更方便的访问,就顺带搭建了一套 DNS 服务,本篇分享介绍一下如何搭建自己的 DNS。
PS:不要尝试在公网搭建DNS服务,这是需要申请资质的~
🧭 背景介绍
在日常开发或家庭网络中,我们常常需要实现以下目标:
- 为局域网设备自定义命名解析(如
home.local) - 加速某些国内/内网域名的解析速度,减少公网依赖
- 实现轻量级的广告屏蔽或自定义 DNS 路由
- 本地化 DNS 查询以提升响应效率,节省公网流量(通过本地缓存方式)
- 避免运营商 DNS 污染(如无法正常访问 github)
虽然可以选择如 BIND、CoreDNS 等方案,但它们配置相对复杂、资源消耗高。
相比之下,dnsmasq 是一款轻量级的 DNS 服务器,非常适合快速部署小型网络服务。
🔍 使用场景
- 局域网内设备希望通过域名访问彼此
- 将部分域名(如公司内网、开发环境)解析为本地 IP
- 破除运营商 DNS 污染
📌 最终目标
通过自定义域名的方式访问内网各个服务,无需记忆 IP。
加快访问公网的性能,避免 DNS 污染。
📋 前提条件
- 一台已安装 Ubuntu 系统 的主机(建议使用24.04 或以上的 LTS 版)
- 熟悉 Linux 的基础操作
🚀 详细步骤
1️⃣ 禁用systemd-resolved服务
Ubuntu 从 18.04 版本开始默认启用了 systemd-resolved 服务,用于管理系统的 DNS 查询解析和缓存。
该服务会自动接管 /etc/resolv.conf,并监听在 127.0.0.53 地址作为本地 DNS 转发器。
这与我们的 dnsmasq 是存在冲突的,dnsmasq 在不少方面都是优于 systemd-resolved,比如支持自定义域名解析、上游DNS控制、DNS缓存等等,因此在开始之前我们需要先禁用该服务。
打开终端,使用root用户执行以下命令:
1 | systemctl disable systemd-resolved --now |
2️⃣ 安装 dnsmasq
打开终端,执行以下命令安装:
1 | apt update |
安装后,dnsmasq 会自动以服务形式运行。
3️⃣ 配置 dnsmasq
编辑主配置文件 /etc/dnsmasq.conf:
1 | vim /etc/dnsmasq.conf |
在文件末尾添加自定义规则,例如:
1 | # 监听地址 |
PS:若想正常访问Github还有很多其他的域名需要配置解析,这里就不一一列出了。
4️⃣ 单独管理本地域名配置(可选)
若域名比较多需单独管理,可以在/etc/dnsmasq.d目录中新建.conf文件,然后添加解析。
例如 /etc/dnsmasq.d/home.conf :
1 | address=/git.home.com/192.168.10.2 |
修改完后还需要再重启 dnsmasq 服务生效。
5️⃣ 重启 dnsmasq 并验证服务
1 | # 重启服务 |
测试本地域名解析:
1 | dig @127.0.0.1 git.home.com +short |
若打印出:192.168.10.2 则表示已经解析成功了。
6️⃣ 其他设备配置DNS地址
这里我们可以直接在家里路由器上配置首选DNS,也可以在每台电脑上自行配置。
配置完过后就基本都会从这台 DNS 服务进行查询请求了。
PS:有些高级的路由器本身就自带DNS服务或刷成 OpenWrt,并且提供了图形化管理,更方便些,不过我用的是比较老款的 TP-link 并不支持,也懒得折腾 OpenWrt 了,直接自己自建一个更省事~
✅ 总结
通过 dnsmasq 在 Ubuntu 系统上快速部署本地 DNS 服务变得非常简单可靠。
我们可以灵活配置自定义域名、解决 DNS 污染和缓存策略,大幅提升局域网访问体验与效率。
相比笨重的传统 DNS 服务,dnsmasq 是轻量网络环境的理想之选。













