首页 文章

声明DHCP自定义选项并配置客户端以发送它

提问于
浏览
0

我想将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 回答

  • 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

    option foo code 224 = text; # here be divine enlightenment!
    send foo "value";
    

    在服务器上;文件/etc/dhcp/dhcpd.conf

    option foo code 224 = text;
    class "myclass" {
        match if option foo ~= "value";
    }
    

    匹配语句的RHS是一个正则表达式 - 用复杂的表达式调试你心中的欲望;-)

    然后,您可以在dhcpd.conf中的任何其他限定语句中使用“myclass”类,例如:如原始问题所示 .

相关问题