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
2
3
systemctl disable systemd-resolved --now
rm /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

2️⃣ 安装 dnsmasq

打开终端,执行以下命令安装:

1
2
apt update
apt install dnsmasq -y

安装后,dnsmasq 会自动以服务形式运行。

3️⃣ 配置 dnsmasq

编辑主配置文件 /etc/dnsmasq.conf

1
vim /etc/dnsmasq.conf

在文件末尾添加自定义规则,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 监听地址
listen-address=0.0.0.0
# 监听所有网卡和53端口
bind-interfaces
port=53

# 局域网解析
address=/git.home.com/192.168.10.1

# 公网 github 解析(避免DNS污染并且也不用每个设备都配置hosts)
address=/github.com/20.205.243.166

# 本地 DNS 缓存过期时间(秒)
cache-size=1000

# 自定义上游 DNS(如阿里DNS、Google DNS)
server=223.5.5.5
server=8.8.8.8

# 引入本地 /etc/dnsmasq.d 目录下 .conf 结尾的配置文件
conf-dir=/etc/dnsmasq.d,.conf

PS:若想正常访问Github还有很多其他的域名需要配置解析,这里就不一一列出了。

4️⃣ 单独管理本地域名配置(可选)

若域名比较多需单独管理,可以在/etc/dnsmasq.d目录中新建.conf文件,然后添加解析。

例如 /etc/dnsmasq.d/home.conf

1
2
address=/git.home.com/192.168.10.2
address=/harbor.home.com/192.168.10.1

修改完后还需要再重启 dnsmasq 服务生效。

5️⃣ 重启 dnsmasq 并验证服务

1
2
# 重启服务
systemctl restart dnsmasq

测试本地域名解析:

1
2
3
dig @127.0.0.1 git.home.com +short

ping git.home.com

若打印出:192.168.10.2 则表示已经解析成功了。

6️⃣ 其他设备配置DNS地址

这里我们可以直接在家里路由器上配置首选DNS,也可以在每台电脑上自行配置。

配置完过后就基本都会从这台 DNS 服务进行查询请求了。

PS:有些高级的路由器本身就自带DNS服务或刷成 OpenWrt,并且提供了图形化管理,更方便些,不过我用的是比较老款的 TP-link 并不支持,也懒得折腾 OpenWrt 了,直接自己自建一个更省事~

✅ 总结

通过 dnsmasq 在 Ubuntu 系统上快速部署本地 DNS 服务变得非常简单可靠。

我们可以灵活配置自定义域名、解决 DNS 污染和缓存策略,大幅提升局域网访问体验与效率。

相比笨重的传统 DNS 服务,dnsmasq 是轻量网络环境的理想之选。