在 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 是 DNS
  • no-resolv + server:不读取系统 resolv.conf,直接用指定的上游 DNS
  • domain:设置本地域名后缀,客户端主机名会自动注册为 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。

参考文档:

posted @ 2026-07-15 02:01  轻聆月下  阅读(7)  评论(0)    收藏  举报