我想将DHCP客户端分类为ISC DHCPD配置文件中子网声明中定义的池中的IP地址,并使用该信息更新DNS服务器 .
使用选项“dhcp-client-identifier”为客户端发送相同的类标识符将不起作用,因为具有相同标识符的后续IP地址请求(来自不同的客户端)将告诉DHCP服务器先前的客户端连接,而不是后者,因此(尝试)用新IP更新DNS服务器,丢失先前客户端的条目 .
到目前为止,我在互联网上找到的资源只谈到搞乱现有的选项(通常是供应商扩展),但没有什么可以告诉我该怎么做 .
我在想的是这样做:
-
定义自定义选项
-
配置客户端以使用适当的值发送类
-
根据该选项的值在服务器上定义客户端类
-
根据 class 提供IP地址
我的方法是这样的:
DHCP Server, in /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 client, in /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";
我希望我走在正确的轨道上,但我想我在这里错过了一些东西......
-
DHCP服务器:isc-dhcp-server / oldstable,现在4.3.1-6 deb8u2 armhf
-
DHCP客户端:isc-dhcp-client / xenial-updates,现为4.3.3-5ubuntu12.7 amd64
谢谢,米歇尔
1 回答
它以预期的方式工作如下:
dhcp-options(5)(例如here)对"definition"的自定义选项含糊不清
确保使用[224 - 254]范围内的选项代码(参见手册页,"Defining New Options"部分)
客户端和服务器必须可以使用实际的选项定义代码; dhcp-options(5)对此完全保持沉默 . 这让我感到困惑和磕磕绊绊 . 您可以使用include语句从装入的文件系统中的任何位置加载定义,或者使用"divine enlightenment",也称为代码重复(见下文) .
自定义选项可以具有多种结构中的一种,从布尔和字符串("text")到复杂记录(类似于C或PERL中的结构),请参阅dhcp.options(5)以获取更多信息 .
工作实例
需要存在以下用于服务器和客户端的代码片段;它们显然适用于ISC DHCP服务器和客户端库 .
在客户端;文件/etc/dhcp/dhclient.conf
在服务器上;文件/etc/dhcp/dhcpd.conf
匹配语句的RHS是一个正则表达式 - 用复杂的表达式调试你心中的欲望;-)
然后,您可以在dhcpd.conf中的任何其他限定语句中使用“myclass”类,例如:如原始问题所示 .