3. DHCP 服务器配置:ISC DHCP vs dnsmasq,option 66/67/43/60/97 的配置实战
DHCP 服务器是网络启动的核心。没有它,客户端连 IP 都拿不到,更别提下载启动文件了。这一章我们重点聊聊两个主流方案:ISC DHCP 和 dnsmasq,以及那些让 PXE 正常工作的关键 option。
3.1 ISC DHCP vs dnsmasq:怎么选?
先说说我的个人习惯。生产环境里,我倾向于用 ISC DHCP。它功能全、配置灵活,适合复杂网络。dnsmasq 呢?轻量、简单,适合小规模或嵌入式环境。你想想看,一个只有几十台设备的实验室,用 dnsmasq 完全够用,还省资源。
| 特性 | ISC DHCP | dnsmasq |
|---|---|---|
| 功能丰富度 | 高,支持 failover、多子网、动态更新 DNS | 中等,基础 DHCP + DNS + TFTP |
| 配置复杂度 | 较高,需要理解参数含义 | 低,一行一个 option |
| 性能 | 高,适合大规模部署 | 中等,适合小规模 |
| PXE 支持 | 原生支持,option 灵活 | 支持,但需要手动配置 |
| 日志 | 详细,可定制 | 简单,默认输出到 syslog |
3.2 关键 Option:66/67/43/60/97 实战
这些 option 是 PXE 的灵魂。说白了,它们告诉客户端:你的启动文件在哪、怎么下载、用什么协议。我刚开始接触时也搞混过,尤其是 option 43 和 60,很多人分不清。
Option 60:客户端标识
客户端发送 DHCP Discover 时,会带上 option 60,告诉服务器“我是 PXE 客户端”。服务器根据这个来匹配后续的 option。没有它,服务器可能不会下发 PXE 相关的参数。
Option 66:TFTP 服务器地址
指定 TFTP 服务器的 IP 或主机名。客户端拿到这个地址后,就去那里下载启动文件。注意:如果用了 option 67,option 66 必须正确配置。
Option 67:启动文件名
指定客户端要下载的文件名,比如 pxelinux.0 或 bootx64.efi。这个文件通常放在 TFTP 服务器的根目录下。
Option 43:厂商特定信息
这是个大坑。Option 43 是厂商自定义的,不同厂商的 PXE 实现可能不一样。比如 Intel 的 PXE 需要特定的子 option。我曾经在一个项目中,因为 option 43 格式写错了,折腾了两天。
Option 97:客户端 UUID
用于标识客户端。有些场景下,服务器需要根据 UUID 来分配不同的启动文件。比如,不同型号的机器用不同的内核。
3.3 ISC DHCP 配置实战
下面是一个典型的 PXE 配置片段。注意看 option 的写法。
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
# PXE 相关 option
option vendor-class-identifier "PXEClient";
next-server 192.168.1.10; # TFTP 服务器 IP
filename "pxelinux.0";
# 针对不同架构的配置
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
option vendor-encapsulated-options "PXEClient";
}
}
这里有个细节:next-server 就是 option 66,filename 就是 option 67。ISC DHCP 用关键字代替了数字,更直观。
3.4 dnsmasq 配置实战
dnsmasq 的配置更简洁。一行一个参数。
# DHCP 地址池
dhcp-range=192.168.1.100,192.168.1.200,12h
# PXE 配置
dhcp-option=66,192.168.1.10
dhcp-option=67,pxelinux.0
# 针对 UEFI 客户端
dhcp-match=set:efi-x64,option:client-arch,7
dhcp-boot=tag:efi-x64,bootx64.efi,192.168.1.10
注意 dhcp-match 这一行。它根据客户端架构(option 93)来匹配不同的启动文件。UEFI 和 BIOS 的启动文件不一样,这个配置能自动区分。
dhcp-option=数字,值。数字就是 option 编号。比如 66 是 TFTP 服务器,67 是启动文件名。
3.5 DHCP 地址池与租约管理
地址池的大小直接影响网络启动的并发能力。我见过一个项目,地址池只有 50 个 IP,但同时有 100 台机器启动,结果一半拿不到 IP。
| 参数 | 说明 | 建议值 |
|---|---|---|
| 地址池大小 | 可分配的 IP 数量 | 至少是并发数的 1.5 倍 |
| 租约时间 | 客户端持有 IP 的时间 | PXE 环境建议 10-30 分钟 |
| 保留地址 | 为特定设备固定 IP | 用于服务器、网关等 |
租约时间要特别注意。PXE 启动完成后,客户端通常不再需要 DHCP 分配的 IP。如果租约时间太长,IP 会被占用,导致其他设备无法获取。我习惯把租约时间设短一些,比如 15 分钟。
3.6 多子网环境下的 DHCP 中继
当客户端和 DHCP 服务器不在同一个子网时,就需要 DHCP 中继。说白了,中继把客户端的广播请求转发给服务器,再把服务器的响应转发回来。
配置 DHCP 中继很简单。在路由器或三层交换机上启用 ip helper-address 指向 DHCP 服务器即可。
interface Vlan10
ip address 192.168.10.1 255.255.255.0
ip helper-address 192.168.1.10 # DHCP 服务器地址
注意:中继会修改 DHCP 报文中的 giaddr 字段,服务器根据这个字段知道客户端来自哪个子网,从而分配正确的地址池。
3.7 知识体系图
下面这张图展示了 DHCP 服务器配置的核心逻辑。从选择服务器软件,到配置关键 option,再到地址池管理和中继,每一步都环环相扣。
嗯,这一章的内容就到这里。DHCP 配置是网络启动的基础,但也是最容易出问题的地方。记住:option 66 和 67 是必须的,option 43 和 60 是辅助的,option 97 是特定场景用的。多子网环境下,别忘了配置 DHCP 中继。