我想将DHCP客户端分类为ISC DHCPD配置文件中子网声明中定义的池中的IP地址,并使用该信息更新DNS服务器。
使用选项“dhcp-client-identifier”为客户端发送相同的类标识符将不起作用,因为具有相同标识符的后续IP地址请求(来自不同的客户端)将告诉DHCP服务器先前的客户端连接,而不是后者,因此(尝试)使用新IP更新DNS服务器,丢失以前客户端的条目。
我在互联网上找到的资源到目前为止只讨论搞乱现有选项(通常是供应商扩展),但没有任何可以告诉我该怎么做。
我在想的是:
我的方法是:
DHCP服务器,位于/etc/dhcp/dhcpd.conf中:
option foo code 224 = text; # code 224 - 250 is defined as local class range
...
class "myclass" {
match if option foo ~= "value";
}
...
subnet xxx.xxx.xxx.xxx netmask 255.255.255.0 {
pool {
...
allow members of "myclass";
deny known-clients;
}
}
DHCP服务器似乎对至少语法感到满意:
root@ns:/home/michel# dhcpd -t -cf /etc/dhcp/dhcpd.conf.test
Internet Systems Consortium DHCP Server 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf.test
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid
root@ns:/home/michel#
(不要因为root而杀了我 - 为了方便,我做了一个“sudo bash”)
DHCP客户端,在/etc/dhcp/dhclient.conf中:
# This is what I'd like the client to be able to send to make this all work
send foo "42";
我希望我走在正确的轨道上,但我想我在这里错过了一些东西......
谢谢, 米歇尔
答案 0 :(得分:2)
让它以预期的方式工作如下:
需要存在以下服务器和客户端代码段;它们显然适用于ISC DHCP服务器和客户端库。
option foo code 224 = text; # here be divine enlightenment!
send foo "value";
option foo code 224 = text;
class "myclass" {
match if option foo ~= "value";
}
匹配语句的RHS是一个正则表达式 - 用复杂的表达式调试你心中的欲望; - )
然后,您可以在dhcpd.conf中的任何其他限定语句中使用“myclass”类,例如:如原始问题所示。