我已配置 Kea DHCP 服务器如下(两个不同的接口服务于两个不同的网络):
{
"Dhcp4": {
"valid-lifetime": 4000,
"renew-timer": 1000,
"rebind-timer": 2000,
"interfaces-config": {
"interfaces": [ "eth0", "eth1" ]
},
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv"
},
"subnet4": [
{
"subnet": "192.168.8.0/24",
"pools": [
{
"pool": "192.168.8.2 - 192.168.8.200"
}
]
},
{
"subnet": "192.168.9.0/24",
"pools": [
{
"pool": "192.168.9.2 - 192.168.9.200"
}
]
}
],
"option-data": [
{
"name": "domain-name-servers",
"data": "1.1.1.1,8.8.8.8"
},
{
"name": "routers",
"data": "192.168.8.1,192.168.9.1"
}
],
"client-classes":
[
{
"name": "UEFI-32",
"test": "substring(option[60].hex,0,20) == 'PXEClient:Arch:00006'",
"boot-file-name": "ipxe/i386.efi"
},
{
"name": "UEFI-64",
"test": "substring(option[60].hex,0,20) == 'PXEClient:Arch:00007'",
"boot-file-name": "ipxe/x86_64.efi"
},
]
}
}
当我这样做时tcpdump -i eth0 -nn -vvvv
,我确实看到了 DHCP 请求/响应:
0.0.0.0.68 > 255.255.255.255.67:[udp sum ok] BOOTP/DHCP,来自 74:56:3c:83:a0:85 的请求,长度 359,xid 0xb9760545,标志 [广播](0x8000) 客户端以太网地址 74:56:3c:83:a0:85 供应商-rfc1048 扩展 魔法饼干 0x63825363 DHCP 消息(53),长度 1:请求 服务器 ID(54),长度 4:192.168.8.1 请求的 IP(50),长度 4:192.168.8.2 MSZ (57),长度 2:65280 参数请求(55),长度35: 子网掩码 (1)、时区 (2)、默认网关 (3)、时间服务器 (4) IEN 名称服务器 (5)、域名服务器 (6)、主机名 (12)、BS (13) 域名 (15)、RP (17)、EP (18)、RSZ (22) TTL(23)、BR(28)、YD(40)、YS(41) NTP (42)、供应商选项 (43)、请求 IP (50)、租用时间 (51) 服务器 ID (54)、RN (58)、RB (59)、供应商类别 (60) TFTP (66)、BF (67)、GUID (97)、未知 (128) 未知 (129), 未知 (130), 未知 (131), 未知 (132) 未知 (133), 未知 (134), 未知 (135) GUID(97),长度 17:0.0.192.165.218.38.183.238.17.128.0.116.86.60.131.160.133 NDI(94),长度 3:1.3.16 ARCH (93),长度 2:7 供应商类(60),长度 32:“PXEClient:Arch:00007:UNDI:003016” END(255),长度 0 22:54:47.774286 IP(tos 0x10、ttl 128、id 0、偏移量 0、标志 [DF]、proto UDP(17)、长度 318) 192.168.8.1.67 > 255.255.255.255.68:[udp sum ok] BOOTP/DHCP,回复,长度 290,xid 0xb9760545,标志 [广播](0x8000) 你的 IP 192.168.8.2 客户端以太网地址 74:56:3c:83:a0:85 文件“ipxe/x86_64.efi” 供应商-rfc1048 扩展 魔法饼干 0x63825363 DHCP 消息(53),长度 1:ACK 子网掩码(1),长度 4:255.255.255.0 默认网关(3),长度 4:192.168.9.1 域名服务器(6),长度 8:1.1.1.1,8.8.8.8 租约时间(51),长度 4:4000 服务器 ID(54),长度 4:192.168.8.1 RN(58),长度 4:1000 RB(59),长度4:2000 END(255),长度 0
但我根本看不到任何 tftp 请求。在屏幕上我看到(非常简短):
站点 IP 地址为 192.168.8.2 服务器 IP 地址是 192.168.8.1 NBP 文件名为 ipxe/x86_64.efi NBP 文件大小 0 字节 PXE-E99:意外的网络错误
我究竟做错了什么?
答案1
这里有几种行为相互作用导致了这个问题:
Kea DHCP 服务器不使用分配的子网来确定要服务的路由器。正如您在 tcpdump 中看到的那样,它将路由器分配给了
192.168.9.1
子网192.168.8.0/24
。要解决此问题,您可以在每个子网中提供单独的“选项数据”规范:"subnet4": [ { "subnet": "192.168.8.0/24", "pools": [ { "pool": "192.168.8.2 - 192.168.8.200" } ], "option-data": [ { "name": "routers", "data": "192.168.8.1" } ] }, { "subnet": "192.168.9.0/24", "pools": [ { "pool": "192.168.9.2 - 192.168.9.200" } ], "option-data": [ { "name": "routers", "data": "192.168.9.1" } ] }, ]
在 pxe 上下文之外,您可能看不到此配置的问题,原因是通常情况下,路由器不需要到达同一子网内的主机,因为客户端将根据网络掩码为 /24 子网添加路由。但是,PXE 网络堆栈不会这样做,并且始终使用默认路由,因此需要将其添加到配置中。