我们有大量连接到我们的DHCP机器的客户端。我们想将其中一些分配给另一个IP块,该IP块以较低的优先级进行路由。每次DHCP租约续订时,我们都希望检查数据库并确定我们希望将客户分配给哪个IP块。
在决定在哪个池中分配哪个地址时,是否可以让DHCP服务器执行脚本,查找数据库或执行一些动态代码?每个客户端都由option82(也称为“ DHCP中继代理信息选项”)唯一标识。
我们有大量连接到我们的DHCP机器的客户端。我们想将其中一些分配给另一个IP块,该IP块以较低的优先级进行路由。每次DHCP租约续订时,我们都希望检查数据库并确定我们希望将客户分配给哪个IP块。
在决定在哪个池中分配哪个地址时,是否可以让DHCP服务器执行脚本,查找数据库或执行一些动态代码?每个客户端都由option82(也称为“ DHCP中继代理信息选项”)唯一标识。
Answers:
理想情况下,您将修改dhcpd以支持基于Option82的地址分配,这等效于主机对象中的“硬件”行。在ISP工作时,我已经使用OpenBSD dhcpd做到了这一点,它的内部结构比isc-dhcpd更简单。
如果您无法执行此操作,请查看omapi(3)和omshell(1);。您将使用OMAPI动态创建“类”和“池”对象,以实现Zypher的建议。我刚刚检查了一下,dhcpd.h
并且该class
结构具有一个OMAPI_OBJECT_PREAMBLE
,因此应该可行。请注意,OMAPI上的文档可能会有点...轻率。
因此,我没有使用选项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.conf
这至少应该使您走上正确的道路,我没有测试我的游戏服务器,但是我在其他选项上做了类似的事情。
也许您可以从这里开始:
从来没有使用过,但是我认为有些脚本可以起作用。
编辑
man omshell(1)会给出其他一些示例