我们有大量客户端连接到我们的 DHCP 机器。我们希望将其中一些客户端分配给不同的 IP 块,这些 IP 块的路由优先级较低。每次 DHCP 租约续订时,我们都希望检查数据库并决定要将客户分配给哪个 IP 块。
在决定在哪个池中分配哪个地址时,有没有办法让 DHCP 服务器执行脚本、查看数据库或执行一些动态代码?每个客户端都由 option82(又称“DHCP 中继代理信息选项”)唯一标识。
答案1
理想情况下,您应该修改 dhcpd 以支持基于 Option82 的地址分配,这相当于主机对象中的“硬件”行。我在 ISP 工作时使用 OpenBSD dhcpd 完成过此操作,它的内部结构比 isc-dhcpd 更简单。
如果您无法做到这一点,请查看 omapi(3) 和 omshell(1);您可以使用 OMAPI 动态创建“类”和“池”对象,以实现 Zypher 的建议。我刚刚检查过,dhcpd.h
结构class
有一个OMAPI_OBJECT_PREAMBLE
,所以这应该是可能的。请注意,OMAPI 上的文档可能有点……简略。
答案2
所以我没有使用选项 82 来执行此操作,但最好的选择是使用 isc dhcpd 中的分类。
你要做的是设置如下类:
class "userclass1" {
match if substring(option agent.circuit-id, 2, 2) = "<your_id1>";
}
class "userclass2" {
match if substring(option agent.circuit-id, 2, 2) = "<your_id2>";
}
然后在您的池声明中:
pool {
allow members of "userclass1";
range 10.0.0.11 10.0.0.50;
}
pool {
allow members of "userclass2";
range 10.0.0.51 10.0.0.100;
}
参考:dhcpd配置文件
这至少应该让你走上正确的轨道,我没有启动我的游戏服务器来测试它,但是我已经用其他选项做了类似的事情。
答案3
也许你可以从这里开始:
从未使用过,但我认为通过一些脚本就可以工作。
编辑
man omshell(1) 会给出一些其他的例子
答案4
一种方法是将这些客户端分配给单独的 VLAN,然后这些客户端获得的 DHCP 地址将自动位于不同的池中。