在 Debian 13 上用 dnsmasq 部署 DHCP 服务
在 Debian 13 上用 dnsmasq 部署 DHCP 服务
3-4 台机器的小网络,不需要 isc-dhcp-server 那种重量级方案。dnsmasq 配置量只有它的三分之一,还顺手解决了内网 DNS 解析。本文记录完整部署过程。
为什么选 dnsmasq
小网络部署 DHCP 有几个常见选项:
| 方案 | 复杂度 | 特点 | 适合场景 |
|---|---|---|---|
| dnsmasq | 最低 | DNS + DHCP 一体,配置极简 | 小网络首选 |
| isc-dhcp-server | 中等 | 经典纯 DHCP,功能全面 | 传统/教学环境 |
| Kea DHCP | 较高 | ISC 新一代,支持数据库后端、REST API | 企业级/大规模 |
| systemd-networkd | 中等 | 系统自带,不用装包 | 已用 systemd-networkd 管理网络 |
| udhcpd | 最低 | BusyBox 出品,超轻量 | 嵌入式/资源受限环境 |
对于只有几台机器的局域网,dnsmasq 是性价比最高的选择:
- 配置简单:几行搞定,不需要写
subnet {}块 - 功能实用:自带 DNS 缓存和转发,内网机器可以直接用域名互访
- 资源占用低:适合跑在树莓派、旧路由器等低性能设备上
环境说明
- 服务端:Debian 13 (Trixie)
- 网卡名:
ens33(用ip a确认你的实际名称) - 网段:
192.168.10.0/24 - 网关:
192.168.10.1 - DHCP 分配范围:
192.168.10.100-192.168.10.110
以下配置中的 IP 地址请根据你的实际网络修改。
安装
sudo apt update
sudo apt install dnsmasq
安装后会自动启动。此时配置文件还是默认的,DHCP 功能未启用,属于正常状态。
配置
dnsmasq 的主配置文件在 /etc/dnsmasq.conf。建议先备份原文件再修改:
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo nano /etc/dnsmasq.conf
以下是一个最小可用配置:
# ===== 基础设置 =====
# 监听网卡(可选,不写则监听所有接口)
interface=ens33
# 不读取 /etc/resolv.conf,只用下面指定的上游 DNS
no-resolv
# ===== DHCP 配置 =====
# DHCP 分配范围(起始IP,结束IP,租约时间)
dhcp-range=192.168.10.100,192.168.10.110,12h
# 网关
dhcp-option=option:router,192.168.10.1
# DNS 服务器(阿里 + 腾讯公共 DNS)
dhcp-option=option:dns-server,223.5.5.5,119.29.29.29
# 广播地址
dhcp-option=option:broadcast-address,192.168.10.255
# 子网掩码(通常 255.255.255.0 可省略,dnsmasq 会自动推断)
dhcp-option=option:netmask,255.255.255.0
# ===== DNS 配置 =====
# 上游 DNS
server=223.5.5.5
server=119.29.29.29
# 本地域名后缀
domain=home.lan
# ===== 固定 IP 绑定(可选)=====
# 按 MAC 地址绑定固定 IP
# dhcp-host=aa:bb:cc:dd:ee:ff,192.168.10.50
# dhcp-host=11:22:33:44:55:66,workstation,192.168.10.51
# ===== 本地 DNS 记录(可选)=====
# 给内网设备设置域名,客户端可直接访问
# address=/nas.home.lan/192.168.10.10
# address=/printer.home.lan/192.168.10.20
配置说明:
interface:指定监听网卡。如果你的机器有多个网卡,务必指定,避免 DHCP 响应跑到错误的网络dhcp-range:定义 IP 分配池。租约时间12h表示客户端可以持有 IP 12 小时dhcp-option:DHCP 下发给客户端的选项,option:router是网关,option:dns-server是 DNSno-resolv+server:不读取系统 resolv.conf,直接用指定的上游 DNSdomain:设置本地域名后缀,客户端主机名会自动注册为hostname.home.lan
启动服务
sudo systemctl restart dnsmasq
sudo systemctl enable dnsmasq
sudo systemctl status dnsmasq
看到 active (running) 即表示服务正常运行。
验证
查看服务日志
sudo journalctl -u dnsmasq -f
正常启动会看到类似输出:
dnsmasq[1234]: started, version 2.90 cachesize 150
dnsmasq[1234]: compile time options: IPv6 GNU-getopt ...
dnsmasq[1234]: DHCP, IP range 192.168.10.100 -- 192.168.10.110, lease time 12h
dnsmasq[1234]: reading /etc/hosts
dnsmasq[1234]: read 5 hosts
查看 DHCP 租约
cat /var/lib/misc/dnsmasq.leases
输出格式:时间戳 MAC地址 客户端IP 主机名 客户端ID
1719820800 aa:bb:cc:dd:ee:ff 192.168.10.100 workstation-01 *
客户端测试
在另一台机器上获取 IP:
# Linux
sudo dhclient -v ens33
# 释放后重新获取
sudo dhclient -r && sudo dhclient -v
Windows 客户端:
ipconfig /release
ipconfig /renew
确认拿到的 IP、网关、DNS 都符合配置预期。
常见问题排查
1. 端口 53 被占用
Debian 默认可能运行 systemd-resolved,它会占用 53 端口(DNS),导致 dnsmasq 启动失败:
# 检查 53 端口占用
sudo ss -ulnp | grep :53
# 如果是 systemd-resolved,关掉它
sudo systemctl disable --now systemd-resolved
sudo rm /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
2. 客户端拿不到 IP
检查清单:
- dnsmasq 服务是否在运行:
sudo systemctl status dnsmasq - 防火墙是否放行 UDP 67/68:
sudo ufw allow 67/udp sudo ufw allow 68/udp - 网络中是否有其他 DHCP 服务器(如路由器自带),同一网络只能有一个 DHCP 服务器
interface参数是否指向了正确的网卡
3. 服务启动失败
查看详细日志定位问题:
sudo dnsmasq --test # 检查配置文件语法
sudo journalctl -u dnsmasq # 查看服务日志
常见原因:配置文件语法错误、端口被占用、网卡名写错。
4. 配置不生效
修改配置后必须重启服务:
sudo systemctl restart dnsmasq
如果改了 /etc/dnsmasq.d/ 下的文件,同样需要重启。
进阶用法
日志记录
默认 dnsmasq 只记录到 syslog。如果想记录详细的 DHCP 分配日志:
# 记录 DHCP 分配
log-dhcp
# 指定日志文件
log-facility=/var/log/dnsmasq.log
排除特定 IP
如果分配池中某些 IP 已经被静态使用,可以排除:
dhcp-range=192.168.10.100,192.168.10.110,12h
dhcp-host=00:11:22:33:44:55,infinite # 永不分配给该 MAC
或者缩小分配范围避开已用 IP。
PXE 网络启动
dnsmasq 支持 PXE 引导,适合无盘工作站或网络装机:
# 启用 PXE
dhcp-boot=pxelinux.0,,192.168.10.5
dhcp-option=option:tftp-server,192.168.10.5
enable-tftp
tftp-root=/srv/tftp
总结
| 步骤 | 命令 |
|---|---|
| 安装 | sudo apt install dnsmasq |
| 配置 | 编辑 /etc/dnsmasq.conf |
| 启动 | sudo systemctl restart dnsmasq |
| 验证 | cat /var/lib/misc/dnsmasq.leases |
dnsmasq 的核心优势在于 简单。几行配置就能同时搞定 DHCP 和 DNS,对于家庭实验室、小型办公网络来说完全够用。如果你需要更复杂的功能(DHCP 故障转移、动态 DNS 更新、多子网),再考虑切换到 Kea DHCP 或 isc-dhcp-server。
参考文档:
- dnsmasq 官方手册:
man dnsmasq- Debian Wiki: https://wiki.debian.org/dnsmasq

浙公网安备 33010602011771号