Debian 12 部署 DHCP 与 DNS Server
Debian 12 部署 DHCP 与 DNS Server
1. 文档目的
在 Debian 12 上部署内网 DHCP 和 DNS 服务,实现:
- DHCPv4:自动分配 IPv4 地址。
- DHCPv6:自动分配 IPv6 地址。
- DNS:接收和处理内网客户端的 DNS 查询。
- 内网域名解析:支持手动配置 A、AAAA 等记录。
- 服务独立运行,不依赖公网 DNS 或外部网络。
本方案使用:
| 组件 | 软件 | 作用 |
|---|---|---|
| DHCPv4 | Kea DHCPv4 | IPv4 地址分配 |
| DHCPv6 | Kea DHCPv6 | IPv6 地址分配 |
| DNS | Unbound | DNS 查询处理及内网记录解析 |
| IPv6 RA | radvd | 通告 IPv6 网络前缀及 DHCPv6 管理标志 |
注意:Kea DHCP 不提供 DNS 查询服务,因此需要额外部署 DNS Server。
2. 环境信息
以下参数以当前服务器为例,部署到其他环境时需要调整。
| 项目 | 配置 |
|---|---|
| 操作系统 | Debian 12 |
| 网卡 | enp6s18 |
| IPv4 地址 | 192.168.1.1/24 |
| IPv4 网段 | 192.168.1.0/24 |
| IPv6 地址 | fd42:1234:5678:1::1/64 |
| IPv6 网段 | fd42:1234:5678:1::/64 |
| IPv4 DNS | 192.168.1.1 |
| IPv6 DNS | fd42:1234:5678:1::1 |
| IPv4 租约文件 | /var/lib/kea/kea-leases4.csv |
| IPv6 租约文件 | /var/lib/kea/kea-leases6.csv |
| DNS 内网域名示例 | lab.home.arpa |
本方案假设客户端和服务器位于同一个二层网络。跨网段 DHCP 需要额外配置 DHCP Relay。
3. 配置服务器网络
先确认网卡和 IP 地址:
1 | ip -br addr |
确认服务器具有以下地址:
1 | 192.168.1.1/24 |
如果地址已配置并持久生效,无需重复配置。
检查网卡名称:
1 | ip link show |
后续配置必须使用实际网卡名,不能直接假设所有机器都叫 enp6s18。
4. 安装软件
4.1 安装 Kea、Unbound 和 radvd
如果服务器能够访问配置好的 Debian 软件源:
1 | apt update |
如果服务器完全离线,需要提前准备相应 Debian 12 软件包及其依赖,或使用内网 Debian 软件源。
4.2 检查软件版本和服务
1 | kea-dhcp4 -V |
配置完成前,服务可能尚未正常启动。
5. 配置 DHCPv4
配置文件:
1 | /etc/kea/kea-dhcp4.conf |
5.1 示例配置
以下示例分配 192.168.1.100 至 192.168.1.200 的地址,并向客户端下发 DNS 服务器。
1 | { |
说明:
interfaces:指定 DHCPv4 服务监听的网卡。lease-database:配置租约持久化方式。valid-lifetime:租约有效期,单位为秒。renew-timer:建议客户端续租的时间。rebind-timer:客户端向任意可用 DHCP 服务器重新绑定的时间。domain-name-servers:DHCP Option 6,下发 DNS 服务器地址。domain-name:DHCP Option 15,下发默认域名。
以上地址池只是示例。部署前必须确认池内地址没有被静态设备、BMC 或其他 DHCP 服务器占用。
如果已有配置文件,建议只修改对应字段,不要直接覆盖原有配置,以免丢失现有设置或其他选项。
5.2 验证并重启
1 | kea-dhcp4 -t /etc/kea/kea-dhcp4.conf |
只有配置检查通过后才重启:
1 | systemctl restart kea-dhcp4-server |
查看日志:
1 | journalctl -u kea-dhcp4-server -n 100 --no-pager |
抓取 DHCPv4 流量:
1 | tcpdump -ni enp6s18 -nn -vv 'udp port 67 or udp port 68' |
正常的地址获取流程通常包括 Discover、Offer、Request、ACK。
6. 配置 DHCPv6
配置文件:
1 | /etc/kea/kea-dhcp6.conf |
6.1 示例配置
以下配置分配 ULA IPv6 地址,并下发 IPv6 DNS 服务器地址。
1 | { |
说明:
dns-servers:DHCPv6 Option 23,用于下发 DNS 服务器地址。domain-search:DHCPv6 搜索域选项。- IPv6 地址池必须属于配置的 IPv6 子网。
- 以上计时器是示例值,应结合客户端行为和实际需求调整。
6.2 验证并重启
1 | kea-dhcp6 -t /etc/kea/kea-dhcp6.conf |
通过后执行:
1 | systemctl restart kea-dhcp6-server |
查看日志:
1 | journalctl -u kea-dhcp6-server -n 100 --no-pager |
抓取 DHCPv6 流量:
1 | tcpdump -ni enp6s18 -nn -vv \ |
正常 DHCPv6 地址获取通常包括 Solicit、Advertise、Request、Reply;具体流程可能因 Rapid Commit 等配置而不同。
7. 配置 IPv6 Router Advertisement
DHCPv6 地址分配依赖客户端的 IPv6 配置行为。对于需要通过 DHCPv6 获取地址的客户端,通常需要通过 Router Advertisement(RA)设置 Managed Flag。
安装并配置 radvd 后,编辑:
1 | /etc/radvd.conf |
示例:
1 | interface enp6s18 |
说明:
AdvManagedFlag on:提示客户端使用 DHCPv6 获取受管理的地址。AdvAutonomous off:不通过该前缀执行 SLAAC 自主地址配置。AdvDefaultLifetime 0:不通过这条 RA 宣告本机为 IPv6 默认路由器。
如果该网络需要 IPv6 默认网关,应另行设计和配置路由,不要直接沿用 AdvDefaultLifetime 0。
启动服务:
1 | systemctl enable --now radvd |
注意:DHCPv6 本身不提供默认网关。IPv6 默认路由通常由 RA 通告。
8. 配置 Unbound DNS
8.1 设计原则
Unbound 负责监听 DNS 的 UDP/TCP 53 端口并处理 DNS 查询。
在纯内网环境中:
- 可以解析配置在本机的内网记录。
- 可以回答已有的有效缓存记录。
- 没有公网连接时,不能保证解析未配置的公网域名。
- DNS 查询收到响应不代表域名解析成功,必须检查 DNS 返回码及答案内容。
8.2 配置文件
创建:
1 | /etc/unbound/unbound.conf.d/lan.conf |
示例:
1 | server: |
请根据实际环境修改内网记录,尤其是 192.168.1.10 和 fd42:1234:5678:1::10,不要将示例地址误认为真实设备地址。
这里使用 lab.home.arpa 作为内部域名。home.arpa 专门用于家庭网络环境;在企业实验室环境中,也可以使用由组织控制的内部子域。
local-zone: ... static 表示该区域由本机静态记录负责。对于这个区域中未定义的记录,Unbound 会根据该区域的配置返回本地结果,而不是转发到公网 DNS。
8.3 检查配置并启动
1 | unbound-checkconf |
如果检查通过:
1 | systemctl enable --now unbound |
确认监听端口:
1 | ss -lnutp | grep ':53' |
应检查 UDP 53 和 TCP 53 是否监听在预期的内网地址上。
9. DNS 功能验证
9.1 查询 IPv4 记录
在 DNS 服务器上执行:
1 | dig @192.168.1.1 server1.lab.home.arpa A |
预期结果:
1 | status: NOERROR |
9.2 查询 IPv6 记录
1 | dig @192.168.1.1 server1.lab.home.arpa AAAA |
或者直接通过 IPv6 DNS 地址查询:
1 | dig @fd42:1234:5678:1::1 server1.lab.home.arpa AAAA |
9.3 验证 DNS 服务器能否处理请求
1 | dig @192.168.1.1 server1.lab.home.arpa A +time=2 +tries=1 |
需要重点检查:
SERVER:是否为预期的 DNS 地址。status:成功解析通常返回NOERROR。ANSWER SECTION:是否返回预期记录。
如果查询 example.com 返回 SERVFAIL,在没有公网连接或上游 DNS 的情况下,这是可能出现的结果。它不能单独证明 Unbound 故障。
9.4 抓取 DNS 流量
1 | tcpdump -ni enp6s18 -nn -vv \ |
抓包可以验证 DNS 请求和响应是否经过网卡,但最终仍应以 dig 的查询结果判断解析功能是否成功。
10. 防火墙与端口
如果服务器启用了防火墙,需要允许来自内网的以下流量。
| 服务 | 协议与端口 | 用途 |
|---|---|---|
| DHCPv4 | UDP 67 | DHCP 服务器 |
| DHCPv6 | UDP 547 | DHCPv6 服务器 |
| DNS | UDP 53 | 常规 DNS 查询 |
| DNS | TCP 53 | TCP DNS 查询及较大响应 |
| IPv6 RA | ICMPv6 | IPv6 网络配置通告 |
客户端 DHCP 使用的源端口通常为 UDP 68(IPv4)和 UDP 546(IPv6)。防火墙应按实际规则允许相应请求及响应。
RA 使用 ICMPv6,不是 UDP 端口。
DNS 应限制为内网访问,不要在没有访问控制的情况下将递归 DNS 开放给不可信网络。
11. 租约文件与 LFC 维护
Kea 使用 memfile 时,租约通常保存在:
1 | /var/lib/kea/kea-leases4.csv |
检查文件:
1 | ls -lah /var/lib/kea/*leases* |
查看 IPv4 租约:
1 | cat /var/lib/kea/kea-leases4.csv |
查看 IPv6 租约:
1 | cat /var/lib/kea/kea-leases6.csv |
11.1 LFC 文件清理
Kea 的 Lease File Cleanup(LFC)会清理、合并和轮转 memfile 租约文件。过程中可能出现 .1、.2、.output、.completed 等辅助文件。
例如:
1 | kea-leases4.csv |
这些文件名应结合 LFC 日志和实际版本的文件轮转行为判断,不能单凭扩展名断定哪份文件就是当前数据库。
查看日志:
1 | journalctl -u kea-dhcp4-server --since "1 hour ago" --no-pager |
关注:
LFC_STARTLFC_READ_STATSLFC_WRITE_STATSLFC_ROTATINGLFC_TERMINATE
如果日志显示 errors: 0,并且清理程序正常结束,说明本次 LFC 没有报告读写错误,但这本身并不能保证服务当前所有租约状态都正确。
不要在 Kea 运行期间手动删除、移动或重命名租约文件。 如果主文件只有表头、租约却在轮转文件中,应先结合完整日志、服务状态及客户端实际租约验证,再决定是否需要进一步处理。
12. 常用故障排查
12.1 DHCPv4 客户端无法获取地址
检查服务:
1 | systemctl status kea-dhcp4-server --no-pager -l |
检查配置:
1 | kea-dhcp4 -t /etc/kea/kea-dhcp4.conf |
抓包:
1 | tcpdump -ni enp6s18 -nn -vv 'udp port 67 or udp port 68' |
12.2 DHCPv6 客户端无法获取地址
检查服务:
1 | systemctl status kea-dhcp6-server --no-pager -l |
检查配置:
1 | kea-dhcp6 -t /etc/kea/kea-dhcp6.conf |
抓包:
1 | tcpdump -ni enp6s18 -nn -vv \ |
同时确认 radvd 正常运行,以及客户端是否收到了带 Managed Flag 的 RA。
12.3 DNS 返回 SERVFAIL
检查:
1 | systemctl status unbound --no-pager -l |
使用已配置的内网记录验证:
1 | dig @192.168.1.1 server1.lab.home.arpa A |
如果内网记录正常,但公网域名失败,在完全隔离的网络中属于预期情况。
12.4 其他注意事项
- 如果服务器与客户端不在同一子网,需检查 DHCP Relay 和路由。
- DHCPv6 不负责分配 IPv6 默认网关。
- DHCPv4 与 DHCPv6 租约数据库相互独立。
- DHCP 地址池不能与静态地址或其他 DHCP 服务器的地址池冲突。
- 变更配置前应先备份,使用配置检查命令验证后再重启服务。
- 如果存在多个 DHCP 服务器,必须确认它们的地址池、网段和职责,避免重复分配地址。
13. 部署验收清单
- 服务器 IPv4/IPv6 地址正确且持久生效。
- Kea DHCPv4 配置检查通过,服务运行正常。
- 客户端能通过 DHCPv4 获取地址、租约及 DNS 配置。
- Kea DHCPv6 配置检查通过,服务运行正常。
- radvd 正常发送 IPv6 RA。
- 客户端能通过 DHCPv6 获取地址和 DNS 配置。
- Unbound 配置检查通过,UDP/TCP 53 端口监听正常。
- 内网 A 记录查询返回
NOERROR和正确地址。 - 内网 AAAA 记录查询返回
NOERROR和正确地址。 - 防火墙仅允许预期内网访问 DHCP、DNS 服务。
- 服务日志无持续性错误。
- 租约文件清理与轮转过程无未解决的错误。
14. 最终架构
部署完成后,服务器提供三项核心功能:
- Kea DHCPv4:为客户端分配 IPv4 地址。
- Kea DHCPv6 + radvd:为客户端提供 IPv6 地址分配及必要的 IPv6 网络通告。
- Unbound DNS:接收内网 DNS 查询并解析配置好的内网记录。
该方案可以在不接入公网的条件下运行。对于未配置的公网域名,服务器不会因为部署了 DHCP 或 DNS 就自动获得解析能力。
