DHCP动态分配块


8

我们有大量连接到我们的DHCP机器的客户端。我们想将其中一些分配给另一个IP块,该IP块以较低的优先级进行路由。每次DHCP租约续订时,我们都希望检查数据库并确定我们希望将客户分配给哪个IP块。

在决定在哪个池中分配哪个地址时,是否可以让DHCP服务器执行脚本,查找数据库或执行一些动态代码?每个客户端都由option82(也称为“ DHCP中继代理信息选项”)唯一标识。


什么操作系统上的哪个DHCP服务器?
Zypher

听起来像是运营商类型的设置...是这样吗?如果开放工具中已经存在类似的东西,我会感到惊讶。我可能会考虑自己写。虽然很有趣的问题!
MikeyB

@Zypher:Debian OS,常规dhcpd @MikeyB:是的,运营商设置
Andomar

Answers:


2

理想情况下,您将修改dhcpd以支持基于Option82的地址分配,这等效于主机对象中的“硬件”行。在ISP工作时,我已经使用OpenBSD dhcpd做到了这一点,它的内部结构比isc-dhcpd更简单。

如果您无法执行此操作,请查看omapi(3)和omshell(1);。您将使用OMAPI动态创建“类”和“池”对象,以实现Zypher的建议。我刚刚检查了一下,dhcpd.h并且该class结构具有一个OMAPI_OBJECT_PREAMBLE,因此应该可行。请注意,OMAPI上的文档可能会有点...轻率。


Zypher建议的解决方案是我们目前拥有的解决方案。而且我认为系统管理员不会喜欢dhcpd的编辑版本。但是,OMAPI似乎是一个不错的选择,谢谢!
安多玛(Andomar)2010年

3

因此,我没有使用选项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

这至少应该使您走上正确的道路,我没有测试我的游戏服务器,但是我在其他选项上做了类似的事情。


每次更改时,我们都不必重置dhcpd吗?是否可以通过脚本调用动态确定池成员身份?
安多玛(Andomar)

@Andomar:是的,你会的。不幸的是,我不这么认为-但我在那里可能很错
Zypher


0

一种方法是将这些客户端分配到单独的VLAN,然后这些客户端获得的DHCP地址将自动位于其他池中。


实际上,我们希望避免使用交换VLAN。VLAN交换机会混淆客户端的调制解调器,并且执行时间很长
-Andomar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.