翻译dhcp

dhcpd.conf(5) - Linux 手册页
名称
dhcpd.conf - dhcpd 配置文件

描述

dhcpd.conf 文件包含dhcpd( Internet 系统联盟 DHCP 服务器)的配置信息。

dhcpd.conf 文件是一个自由格式的 ASCII 文本文件。它由内置于 dhcpd 的递归下降解析器解析。该文件可能包含用于格式化的额外制表符和换行符。文件中的关键字不区分大小写。注释可以放在文件内的任何位置(引号内除外)。注释以 # 字符开头,并在行尾结束。

该文件主要由一系列语句组成。语句分为两大类——参数和声明。

参数语句要么说明如何做某事(例如,提供多长时间的租约),是否做某事(例如,dhcpd 是否应向未知客户端提供地址),或向客户端提供哪些参数(例如,使用网关 220.177. 244.7)。

声明用于描述网络的拓扑结构,描述网络上的客户端,提供可以分配给客户端的地址,或将一组参数应用于一组声明。在任何一组参数和声明中,必须在指定依赖于这些参数的任何声明之前指定所有参数。

关于网络拓扑的声明包括共享网络和子网声明。如果一个子网的客户端将被动态分配的地址,一个范围内声明必须在该范围内出现子网声明。对于具有静态分配地址的客户端,或者对于只为已知客户端提供服务的安装,每个这样的客户端都必须有一个主机声明。如果将参数应用于在每个子网基础上不严格相关的一组声明,则可以使用组声明。

对于将要提供服务的每个子网,以及 dhcp 服务器连接到的每个子网,必须有一个子网声明,它告诉 dhcpd 如何识别该子网上的地址。一个子网声明要求,即使没有地址将在该子网动态地分配每个子网。

某些安装具有运行多个 IP 子网的物理网络。例如,如果全站要求使用 8 位子网掩码,但一个拥有单个物理以太网网络的部门扩展到节点数超过 254 个,则可能需要运行两个 8 位子网掩码。位子网在同一以太网上,直到可以添加新的物理网络。在这种情况下,这两个网络的子网声明必须包含在共享网络声明中。

请注意,即使在共享网络声明是不存在,一个空的一个是由以包含服务器创建子网(和包含在任何范围的参数的子网)。出于实际目的,这意味着与地址(以及子网)无关的“无状态”DHCP 客户端将接收与有状态客户端相同的配置。

某些站点可能具有在多个子网上拥有客户端的部门,但可能需要为这些客户端提供一组统一的参数,这些参数与向同一子网上其他部门的客户端提供的参数不同。对于将使用主机声明显式 声明的客户端,这些声明可以与该部门通用的参数一起包含在组声明中。对于地址将被动态分配的客户端,类声明和条件声明可用于根据客户端发送的信息对参数分配进行分组。

当要引导客户端时,其引导参数通过查阅该客户端的主机声明(如果有),然后查阅与该客户端匹配的任何 类声明,以及分配的 IP 地址的池、子网和共享网络声明来确定给客户。这些声明中的每一个本身都出现在一个词法范围内,并且在不太具体的词法范围内的所有声明也被用于客户端选项声明。作用域永远不会被考虑两次,如果参数在多个作用域中声明,则在最具体的作用域中声明的参数就是使用的那个。

当 dhcpd 尝试为客户端查找主机声明时,它首先查找具有固定地址声明的主机声明,该声明列出了对客户端正在启动的子网或共享网络有效的 IP 地址。如果它没有找到任何这样的条目,它会尝试找到一个没有固定地址声明的条目。

例子
典型的 dhcpd.conf 文件如下所示:

全局参数…

子网 204.254.239.0 子网掩码 255.255.255.224 {
子网特定参数…
范围 204.254.239.10 204.254.239.30;
}

子网 204.254.239.32 子网掩码 255.255.255.224 { 子网特定参数…
范围 204.254.239.42 204.254.239.62;
}
子网 204.254.239.64 子网掩码 255.255.255.224 { 子网特定参数…
范围 204.254.239.74 204.254.239.94;
}
group { group-specific parameters…
host zappo.test.isc.org {
host-specific parameters…
}
host beppo.test.isc.org { host-specific parameters…
}
host harpo.test.isc .org {

特定于主机的参数...

}
}
图1

请注意,在文件的开头,有一个用于放置全局参数的位置。这些可能是组织的域名、名称服务器的地址(如果它们对整个组织是通用的)等。因此,例如:

选项域名“isc.org”;
选项域名服务器 ns1.isc.org、ns2.isc.org;
图2

正如您在图 2 中看到的那样,您可以使用域名而不是数字 IP 地址在参数中指定主机地址。如果给定的主机名解析为多个 IP 地址(例如,如果该主机有两个以太网接口),则在可能的情况下,将两个地址都提供给客户端。

具有图 1 所示的子网特定参数的最明显原因是每个子网都必须有自己的路由器。例如,对于第一个子网,应该有类似的内容:

选项路由器 204.254.239.1;
注意这里的地址是用数字指定的。这不是必需的 - 如果路由器上的每个接口都有不同的域名,则使用该接口的域名而不是数字地址是完全合法的。然而,在许多情况下,路由器的所有 IP 地址可能只有一个域名,在这里使用该名称是不合适的。
在图 1 中还有一个group语句,它为一组三个主机(zappo、beppo 和 harpo)提供通用参数。如您所见,这些主机都在 test.isc.org 域中,因此使用特定于组的参数来覆盖提供给这些主机的域名可能是有意义的:

选项域名“test.isc.org”;
此外,考虑到它们所在的域,这些可能是测试机器。如果我们想测试 DHCP 租用机制,我们可以将租用超时设置为比默认值短一些:
最大租用时间 120;
默认租赁时间 120;

您可能已经注意到,虽然有些参数以option关键字开头,但有些则不是。以option关键字开头的参数对应于实际的 DHCP 选项,而不以 option 关键字开头的参数要么控制 DHCP 服务器的行为(例如,dhcpd 的租期将给出多长时间),要么指定不以 option 关键字开头的客户端参数在 DHCP 协议中可选(例如,服务器名和文件名)。
在图 1 中,每个主机都有特定于主机的参数。这些可能包括诸如主机名选项、要上传的文件的名称( 文件名参数)和上传文件的服务器地址(下一个服务器参数)等内容。一般情况下,任何参数都可以出现在允许参数的任何位置,并根据参数出现的范围进行应用。

想象一下,您有一个包含大量 NCD X 终端的站点。这些终端有多种型号,您希望为每个型号指定引导文件。一种方法是为每个服务器声明主机并按模型对它们进行分组:

组{
文件名“Xncd19r”;
下一个服务器 ncd-booter;

主机 ncd1 { 硬件以太网 0:c0:c3:49:2b:57; }
主机 ncd4 { 硬件以太网 0:c0:c3:80:fc:32; }
主机 ncd8 { 硬件以太网 0:c0:c3:22:46:81; }
}

组{
文件名“Xncd19c”;
下一个服务器 ncd-booter;

主机 ncd2 { 硬件以太网 0:c0:c3:88:2d:81; }
主机 ncd3 { 硬件以太网 0:c0:c3:00:14:11; }
}

组{
文件名“XncdHMX”;
下一个服务器 ncd-booter;

主机 ncd1 { 硬件以太网 0:c0:c3:11:90:23; }
主机 ncd4 { 硬件以太网 0:c0:c3:91:a7:8; }
主机 ncd8 { 硬件以太网 0:c0:c3:cc🅰️8f; }
}
地址池
该池的声明可以被用来指定将被视为不同于另一地址池,甚至在同一网段或子网地址池。例如,您可能希望提供大量地址,这些地址可以分配给注册到您的 DHCP 服务器的 DHCP 客户端,同时提供一组较小的地址,可能租用时间较短,可供未知客户端使用。如果您有防火墙,您可以安排一个池中的地址允许访问 Internet,而另一个池中的地址则不能,从而鼓励用户注册他们的 DHCP 客户端。为此,您需要设置一对池声明:

子网 10.0.0.0 网络掩码 255.255.255.0 {
选项路由器 10.0.0.254;

未知客户端获取此池。

池 {
选项域名服务器 bogus.example.com;
最大租赁时间 300;
范围 10.0.0.200 10.0.0.253;
允许未知客户端;
}

已知客户端获得这个池。

池{
选项域名服务器ns1.example.com,ns2.example.com;
最大租赁时间 28800;
范围 10.0.0.5 10.0.0.199;
拒绝未知客户;
}
}
还可以为已知和未知客户端设置完全不同的子网——地址池存在于共享网络级别,因此池声明中的地址范围可以位于不同的子网上。
正如您在前面的示例中看到的那样,池可以有许可列表来控制哪些客户端可以访问池,哪些不可以。池的许可列表中的每个条目都使用allow或deny关键字引入。如果池具有许可列表,则只有与许可列表中的特定条目匹配的客户端才有资格从池中分配地址。如果池具有拒绝列表,则只有那些与拒绝列表中的任何条目都不匹配的客户端才有资格。如果池中同时存在允许列表和拒绝列表,则仅允许与允许列表匹配且与拒绝列表不匹配的客户端进行访问。

动态地址分配
地址分配实际上仅在客户端处于 INIT 状态并已发送 DHCPDISCOVER 消息时完成。如果客户端认为它有一个有效的租约并发送一个 DHCPREQUEST 来启动或更新该租约,服务器只有三种选择 - 它可以忽略 DHCPREQUEST,发送一个 DHCPNAK 告诉客户端它应该停止使用该地址,或者发送一个DHCPACK,告诉客户端继续使用该地址一段时间。

如果服务器找到客户端请求的地址,并且该地址可供客户端使用,则服务器将发送 DHCPACK。如果地址不再可用,或不允许客户端拥有它,服务器将发送 DHCPNAK。如果服务器对地址一无所知,它将保持沉默,除非该地址对于客户端所连接的网段不正确并且服务器对该网段具有权威性,在这种情况下,服务器甚至会发送 DHCPNAK虽然它不知道地址。

可能存在与客户端标识匹配的主机声明。如果该主机声明包含一个固定地址声明,该声明列出了对客户端连接到的网段有效的 IP 地址。在这种情况下,DHCP 服务器永远不会进行动态地址分配。在这种情况下,客户端需要获取主机声明中指定的地址。如果客户端为某个其他地址发送 DHCPREQUEST,服务器将使用 DHCPNAK 进行响应。

当 DHCP 服务器为客户端分配新地址时(请记住,这仅在客户端发送了 DHCPDISCOVER 时才会发生),它首先查看客户端是否已经拥有 IP 地址的有效租用,或者是否有旧的客户端之前拥有的 IP 地址尚未重新分配。在这种情况下,服务器将获取该地址并检查它以查看是否仍然允许客户端使用它。如果客户端不再被允许使用它,则如果服务器认为它仍在使用,则租用被释放 - 客户端已发送 DHCPDISCOVER 的事实向服务器证明客户端不再使用该租用。

如果没有找到现有租约,或者如果客户端被禁止接收现有租约,那么服务器将在客户端所连接的网段的地址池列表中查找未使用的租约,并且客户被允许拥有。它按顺序查看每个池声明(出现在池声明之外的所有范围声明都被分组到一个没有许可列表的池中)。如果池的许可列表允许为客户端分配该池中的地址,则检查池以查看是否有可用地址。如果是这样,则暂时为客户端分配该地址。否则,将测试下一个池。如果找不到可以分配给客户端的地址,则不会向客户端发送响应。

如果发现允许客户端拥有的地址,并且之前从未分配给任何客户端,则该地址会立即分配给客户端。如果该地址可用于分配,但之前已分配给不同的客户端,则服务器将继续查找,希望找到以前从未分配给客户端的地址。

DHCP 服务器从哈希表中生成可用 IP 地址的列表。这意味着地址没有按任何特定顺序排序,因此无法预测 DHCP 服务器分配 IP 地址的顺序。以前版本的 ISC DHCP 服务器的用户可能已经习惯于 DHCP 服务器按升序分配 IP 地址,但这不再可能,并且无法使用版本 3 的 ISC DHCP 服务器配置此行为。

IP地址冲突预防
在将 IP 地址分配给客户端之前,DHCP 服务器会检查 IP 地址以查看它们是否正在使用中。它通过向正在分配的 IP 地址发送 ICMP Echo 请求消息来实现此目的。如果在一秒钟内没有收到 ICMP Echo 回复,则假定该地址是空闲的。这仅适用于在 range 语句中指定的租用,并且仅当 DHCP 服务器认为租用是空闲的时才这样做 - 即 DHCP 服务器或其故障转移对等方未将租用列为正在使用中。

如果收到对 ICMP Echo 请求的响应,则 DHCP 服务器假定存在配置错误 - 该 IP 地址正被网络上的某个主机使用,该主机不是 DHCP 客户端。它将地址标记为已放弃,并且不会将其分配给客户端。

如果 DHCP 客户端尝试获取 IP 地址,但没有可用的 IP 地址,但存在废弃的 IP 地址,则 DHCP 服务器将尝试回收废弃的 IP 地址。它将一个 IP 地址标记为空闲,然后执行前面描述的相同 ICMP Echo 请求检查。如果没有对 ICMP Echo 请求的答复,则将地址分配给客户端。

如果 DHCP 服务器尝试回收的第一个 IP 地址空闲,则 DHCP 服务器不会在废弃的 IP 地址之间循环。相反,当下一个 DHCPDISCOVER 来自客户端时,它将使用此处描述的相同方法尝试新的分配,并且通常会尝试新的 IP 地址。

DHCP 故障转移
此版本的 ISC DHCP 服务器支持 Draft-ietf-dhc-failover-07.txt 中记录的 DHCP 故障转移协议。这不是最终的协议文档,我们还没有与其他供应商对该协议的实现进行互操作性测试,因此您不能假设该实现符合标准。如果您希望使用故障转移协议,请确保两个故障转移对等点都运行相同版本的 ISC DHCP 服务器。

故障转移协议允许两个 DHCP 服务器(最多两个)共享一个公共地址池。在任何给定时间,每个服务器将拥有池中大约一半的可用 IP 地址进行分配。如果一台服务器出现故障,另一台服务器将继续更新池外的租约,并从与另一台服务器的通信丢失时它所拥有的大约一半可用地址中分配新地址。

在长时间的故障期间,有可能告诉剩余的服务器另一台服务器已关闭,在这种情况下,剩余的服务器将(随着时间的推移)回收另一台服务器可用于分配的所有地址,并开始重用它们。这称为将服务器置于 PARTNER-DOWN 状态。

您可以通过使用omshell (1)命令或通过停止服务器、编辑租用文件中的最后一个对等状态声明并重新启动服务器来将服务器置于 PARTNER-DOWN 状态。如果您使用最后一种方法,请确保将状态开始的日期和时间留空:

故障转移对等 名称 state {
my state partner-down;
对等状态 的状态 在 日期;
}
当另一台服务器重新联机时,它应该自动检测到它已脱机并向运行在 PARTNER-DOWN 状态下的服务器请求完整更新,然后两台服务器将一起恢复处理。
可能会陷入危险的境地:如果您将一个服务器置于 PARTNER-DOWN 状态,然后服务器宕机,而另一台服务器又恢复了,另一台服务器将不知道第一台服务器是PARTNER-DOWN 状态下,可能会将其他服务器之前发布的地址发给不同的客户端,导致 IP 地址冲突。因此,在将服务器置于 PARTNER-DOWN 状态之前,请确保其他服务器不会自动重启。

故障转移协议定义了主服务器角色和辅助服务器角色。主要和次要的行为方式存在一些差异,但大多数差异仅与为每个对等点提供一种与其他对等点以相反方式行事的方式有关。所以一台服务器必须配置为主,另一台必须配置为辅助,哪个是哪个都没有太大关系。

故障转移启动
当服务器启动之前没有与其故障转移对等方通信时,它必须与其故障转移对等方建立通信并与其同步,然后才能为客户端提供服务。这可能是因为您刚刚将 DHCP 服务器配置为第一次执行故障转移,或者因为您的一台故障转移服务器发生灾难性故障并丢失其数据库。

初始恢复过程旨在确保当一个故障转移对等点丢失其数据库然后重新同步时,故障服务器在其发生故障之前给出的任何租约都将得到遵守。当故障服务器启动时,它注意到它没有保存故障转移状态,并尝试联系它的对等方。

当它建立联系时,它向对等方请求其对等方的租用数据库的完整副本。然后,对等方发送其完整的数据库,并发送一条消息表明它已完成。发生故障的服务器然后等待,直到 MCLT 通过,一旦 MCLT 通过,两台服务器都将转换回正常操作。此等待期可确保故障服务器在与其合作伙伴失去联系时可能发出的任何租用期都将到期。

当发生故障的服务器正在恢复时,其伙伴仍处于伙伴关闭状态,这意味着它正在为所有客户端提供服务。故障服务器在过渡到正常操作之前根本不向 DHCP 客户端提供任何服务。

如果两台服务器都检测到它们之前从未与它们的伙伴通信,它们都会进入此恢复状态并遵循我们刚刚描述的过程。在这种情况下,在 MCLT 到期之前,不会向 DHCP 客户端提供任何服务。

配置故障转移
为了配置故障转移,您需要编写配置故障转移协议的对等声明,并且需要在要对其进行故障转移的每个池声明中编写对等引用。您不必对给定网段上的所有池进行故障转移。你不能告诉一台服务器它正在一个特定的地址池上进行故障转移,而告诉另一台它不是。您不能有任何未在其上执行故障转移的公共地址池。利用故障转移的池声明如下所示:

水池 {
故障转移对等方“foo”;
池特定参数

};
动态 BOOTP 租约与故障转移不兼容,因此,您需要在使用故障转移的池中禁止 BOOTP。

服务器目前很少做健全性检查,所以如果你配置错误,它只会以奇怪的方式失败。因此,我建议您要么进行故障转移,要么不进行故障转移,但不要进行任何混合池。此外,对两台服务器使用相同的主配置文件,并有一个单独的文件,其中包含对等声明和主文件。这将帮助您避免配置不匹配。随着我们的实现的发展,这将不再是一个问题。主服务器的基本示例 dhcpd.conf 文件可能如下所示:

故障转移对等方“foo”{
主要;
地址 anthrax.rc.vix.com;
647端口;
对等地址 trantor.rc.vix.com;
对等端口 847;
最大响应延迟 60;
max-unacked-updates 10;
mclt 3600;
拆分 128;
负载平衡最大秒数 3;
}

包括“/etc/dhcpd.master”;
peer声明中的语句如下:
所述初级和次级语句

[初级| 次要] ;
这将确定服务器是主服务器还是辅助服务器,如前面 DHCP 故障转移中所述。

该地址声明
地址 地址;
该地址的语句声明在其服务器监听来自它的故障转移对等连接,并且也值了要使用的DHCP故障转移协议服务器识别的IP地址或DNS名称。由于此值用作标识符,因此不能省略。

该同行地址声明
对等地址 地址;
该同行地址语句声明服务器应该连接到达到其故障对等体故障消息的IP地址或DNS名称。

该端口声明
端口 端口号;
在端口语句声明在其服务器监听来自它的故障转移对等连接的TCP端口。

该对等端口声明
对等端口 端口号;
该端端口语句声明服务器应该连接到达到其故障对等体故障消息的TCP端口。在声明的端口号对端口声明可能是相同的端口号在声明端口声明。

的最大响应延迟声明
最大响应延迟 秒;
的最大响应延迟语句告诉DHCP服务器多少秒可以传递,而不脱离其故障转移对收到的消息则认为已经失效。这个数字应该足够小,以至于中断连接的瞬时网络故障不会导致服务器长时间失去通信,但足够大到服务器不会经常建立和断开连接。必须指定此参数。

在MAX-UNACKED-更新语句
最大未确认更新 计数;
在MAX-UNACKED-更新语句告诉远程DHCP服务器接收到来自本地系统BNDACK,才可以有多少BNDUPD邮件发送。我们没有足够的操作经验来说明这有多大的价值,但 10 似乎有效。必须指定此参数。

该MCLT声明
mclt 秒;
该MCLT语句定义的最大客户交货期。它必须在主服务器上指定,而不能在辅助服务器上指定。这是任何一个故障转移对等点可以在不联系另一个的情况下更新租约的时间长度。设置的时间越长,运行的服务器在进入 PARTNER-DOWN 状态后恢复 IP 地址所需的时间就越长。您设置的时间越短,您的服务器在不通信时所承受的负载就越大。像 3600 这样的值可能是合理的,但请再次记住,我们没有真正的操作经验。

该分裂声明
拆分 索引;
split 语句指定主要和次要之间的拆分以实现负载平衡。每当客户端发出 DHCP 请求时,DHCP 服务器都会在客户端标识上运行散列,从而产生从 0 到 255 的值。这用作 256 位字段的索引。如果设置了该索引处的位,则主要负责。如果该索引处的位未设置,则次要负责。所述分裂值确定许多领先比特如何被设置为1。因此,在实践中,较高的拆分值将导致主服务器比辅助服务器服务更多的客户端。较低的分割值,反之。合法值在 0 到 255 之间,其中最合理的是 128。

该HBA声明
hba 冒号分隔的十六进制列表;
hba 语句将主要和次要之间的分割指定为位图而不是截止值,这在理论上允许更细粒度的控制。然而,在实践中,可能不需要这种细粒度的控制。一个示例 hba 语句:

hba ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
00:00:00:00:00:00:00:00:00 :00:00:00:00:00:00:00;
这相当于拆分 128;声明,并且相同。下面两个例子也等价于128的分割,但不完全相同:
hba aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:
aa:aa:aa:aa:aa:aa:aa:aa:aa :aa:aa:aa:aa:aa:aa:aa;

hba 55:55:55:55:55:55:55:55:55:55:55:55:55:55:55:55:
55:55:55:55:55:55:55:55:55 :55:55:55:55:55:55:55;
它们是等效的,因为一半的位设置为 0,一半设置为 1(0xa 和 0x5 分别是 1010 和 0101 二进制),因此这将粗略地在服务器之间平均分配客户端。它们并不相同,因为对于每个示例,这将负载平衡到每个服务器的实际对等点是不同的。
您只能定义split或hba,不能同时定义。大多数情况下,不需要hba提供 的细粒度控制,应该使用split。

该负载均衡最大秒钟声明
负载平衡最大秒 秒;
此语句允许您配置一个截止时间,在该截止时间之后禁用负载平衡。截止时间基于自客户端发送其第一个 DHCPDISCOVER 或 DHCPREQUEST 消息以来的秒数,并且仅适用于正确实现secs字段的客户端 - 幸运的是大多数客户端都这样做。我们建议将其设置为 3 或 5 之类的值。这样做的效果是,如果其中一个故障转移对等方进入一种状态,即它正在响应故障转移消息但不响应某些客户端请求,则另一个故障转移对等方将接管其客户端在客户端重试时自动加载。

故障转移池余额报表。
最大租赁失衡 百分比;最大租赁所有权 百分比;最小平衡 秒;最大余额 秒;
此版本的 DHCP 服务器按计划评估池平衡,而不是在分配租用时按需评估。当池不平衡达到完全饱和时,后一种方法被证明有点笨拙…当任何服务器用完要分配的租约时,它也失去了注意到它已经耗尽的能力。

为了理解池平衡,首先需要定义其操作的一些元素。首先,有“免费”和“备用”租约。这两者都被称为“自由州租约”。就本文档而言,“免费”和“备份”是“自由状态”。不同之处在于,除非在特殊情况下,只有主要可以从“免费”租用中分配,并且只有次要可以分配“备份”租用。

当执行池平衡时,唯一合理的期望是在两台服务器之间提供 50/50 的空闲状态租约分割。这是因为没有人能够预测哪台服务器会发生故障,无论两台服务器上的相对负载如何,因此为每台服务器提供一半的租约可以使两台服务器具有相同的“故障承受能力”。因此,除了我们将很快描述的一些非常小的窗口之外,无法配置任何不同的行为。

在任何池余额运行中计算的第一件事是一个称为“lts”或“Leases To Send”的值。简而言之,这就是免费和备用租用的数量之差除以 2。对于二级,它是备份和免费租用的差异,除以二。结果值是有符号的:如果它是正的,本地服务器应该分发租约以保留 50/50 的余额。如果它是负数,远程服务器将需要发送租约来平衡池。一旦 lts 值达到零,池就完美平衡(在总空闲状态租约数为奇数的情况下,给予或接受一个租约)。

当前的方法仍然是旧方法的混合体,其特点是存在max-lease-misbalance语句。此参数配置以前版本中曾经是 10% 的固定值:如果 lts 小于 free+backup * max-lease-misbalance百分比,那么服务器将跳过平衡给定的池(它不会打扰移动任何租约,即使某些租约“应该”移动)。然而,这个值的含义也有些过重,因为它也控制着何时尝试平衡池的估计(然后也可以跳过)。检查空闲和备份状态中最旧的租约。它们驻留在各自队列中的时间被用作估计,以表明在消耗列表顶部的租用之前可能需要多长时间(因此,使用所有租用需要多长时间在那个状态)。这个百分比直接乘以这个时间,如果它在min-balance和max-balance之内,就适合调度配置的值。预定的池检查时间只会向下移动,永远不会增加。最后,如果 lts 在负方向上超过这个数字的两倍,本地服务器将“恐慌”并传输故障转移协议 POOLREQ 消息,希望远程系统将被唤醒并采取行动。

一旦 lts 值超过上述总空闲状态租用的max-lease-misbalance百分比,租用将移动到远程服务器。这是分两次完成的。

在第一轮中,只有根据负载平衡算法(请参阅上面的split和hba配置语句),远程服务器会为其最近绑定的客户端提供服务的租约才会提供给对等方。这第一遍将愉快地继续放弃租约,为每个将 lts 值减 1,直到 lts 值达到租用总数乘以max-lease-ownership的负数 百分比。因此,正是通过这个值,您可以允许租用池的小幅失衡 - 目的是为对等方提供超过 50/50 的租用份额,希望他们的客户有一天会返回并由对等方分配(正常运行)。这个过程被称为“MAC 地址关联”,但这有点被误称:它同样适用于 DHCP 客户端标识符选项。另请注意,如果辅助节点的份额已超过其份额,则当租约进入从空闲状态移动到备份状态时,关联将应用于租约。

只有在第一遍未能将 lts 减少到自由状态租赁总数乘以最大租赁所有权百分比以下时,才会进入第二遍 。在此过程中,最旧的租约被交给对等方,而无需再考虑负载平衡算法,并且这种情况一直持续到 lts 低于此值。通过这种方式,本地服务器也会很高兴地保留一小部分通常会为自身进行负载平衡的租约。

因此,max-lease-misbalance值充当行为门。较小的值会导致更多的租约过渡到过渡状态以随着时间的推移平衡池,较高的值会减少变化量(但如果租约运行,可能会导致池饥饿)。

在最大租赁所有权值允许小(百分比)在自由状态租约总数的百分比租赁平衡偏移。

最后,min-balance和max-balance确保预定的重新平衡事件在合理的时间范围内发生(不会被例如 7 年的免费租约所抛弃)。

百分比的合理值介于 0 和 100 之间,包括 0 和 100,但超过 50 的值彼此无法区分(一旦 lts 超过自由状态租约的 50%,因此一台服务器必须在其各自的自由状态下拥有 100% 的租约) . 建议选择 最大租赁所有权值大于选择的值低MAX-租赁misbalance值。max-lease-ownership默认为 10,max-lease-misbalance默认为 15。

min-balance和max-balance时间的合理值也范围从 0 到 (2^32)-1(或本地 time_t 值的限制),但分别默认为值 60 和 3600(将平衡事件置于 1分 1 小时)。

客户分类
客户端可以分成多个类,并根据它们所在的类进行不同的处理。这种分离可以使用条件语句或类声明中的 match 语句来完成。可以指定一个特定类或子类中可以同时持有租约的客户端总数的限制,并且可以根据客户端数据包的内容指定自动子类化。

要将客户端添加到基于条件评估的类,您可以在 class 语句中指定匹配表达式:

class “ras-clients” {
如果子字符串匹配(选项 dhcp-client-identifier, 1, 3) = “RAS”;
}
请注意,无论您使用匹配表达式还是添加语句(或两者)对客户端进行分类,您都必须始终为您使用的任何类编写类声明。如果类没有匹配语句和作用域内语句,则声明应如下所示:
类“ras-clients”{
}
子类
除了类之外,还可以声明子类。子类是与常规类同名的类,但具有特定的子匹配表达式,该表达式经过哈希处理以进行快速匹配。这本质上是一种速度技巧——五个具有匹配表达式的类与一个具有五个子类的类之间的主要区别在于,可以更快地找到子类。子类的工作方式如下:

class “allocation-class-1” {
match pick-first-value (option dhcp-client-identifier, hardware);
}

class “allocation-class-2” {
match pick-first-value (option dhcp-client-identifier, hardware);
}

子类“allocation-class-1” 1:8:0:2b:4c:39:ad;
子类“allocation-class-2” 1:8:0:2b:a9:cc:e3;
子类“allocation-class-1” 1:0:0:c4:aa:29:44;

子网 10.0.0.0 网络掩码 255.255.255.0 {
池 {
允许“分配类 1”的成员;
范围 10.0.0.11 10.0.0.50;
}
pool {
允许“allocation-class-2”的成员;
范围 10.0.0.51 10.0.0.100;
}
}
子类声明中类名后面的数据是一个常量值,用于匹配类的匹配表达式。当类匹配完成后,服务器将评估匹配表达式,然后在哈希表中查找结果。如果找到匹配项,则客户端被视为类和子类的成员。
子类可以在有或没有作用域的情况下声明。在上面的例子中,子类的唯一目的是允许一些客户端访问一个地址池,而其他客户端可以访问另一个地址池,因此这些子类声明时没有作用域。如果子类的部分目的是为某些客户端定义不同的参数值,您可能需要声明一些具有作用域的子类。

在上面的示例中,如果您有一个需要一些配置参数的客户端,而大多数不需要,您可以为该客户端编写以下子类声明:

子类“allocation-class-2” 1:08:00:2b:a1:11:31 {
option root-path “samsara:/var/diskless/alphapc”;
文件名“/tftpboot/netbsd.alphapc-diskless”;
}
在这个例子中,我们使用子类化作为一种​​基于每个客户端控制地址分配的方法。但是,也可以以非特定于客户端的方式使用子类化 - 例如,使用 vendor-class-identifier 选项的值来确定要在 vendor-encapsulated-options 选项中发送的值。在dhcp-options (5)手册页中的 VENDOR ENCAPSULATED OPTIONS标题下显示了一个示例。
动态地址分配的每类限制
您可以指定一个类中可以分配租约的客户端数量的限制。这样做的效果是使类中的新客户难以获得地址。一旦具有此类限制的类达到其限制,该类中的新客户端获得租用的唯一方法是让现有客户端放弃其租用,要么让它过期,要么发送 DHCPRELEASE 数据包。具有租用限制的类指定如下:

类“limited-1”{
租用限制4;
}
这将产生一个班级,其中最多可有四名成员一次持有租约。
生成类
可以声明一个生成类。生成类是根据客户端发送的内容自动生成子类的类。创建生成类的原因是可以动态创建租用限制类。设想的应用是一种电缆调制解调器环境,其中 ISP 希望为特定站点的客户端提供多个 IP 地址,但不希望为这些客户端提供自己的子网,也不希望为它们提供无限数量的 IP 地址。它们连接到的网段。

许多电缆调制解调器前端系统可以配置为在将 DHCP 数据包中继到 DHCP 服务器时向 DHCP 数据包添加中继代理信息选项。这些系统通常添加唯一标识客户站点的电路 ID 或远程 ID 选项。为了利用这一点,您可以按如下方式编写类声明:

class “customer” {
spawn with option agent.circuit-id;
租赁限制4;
}
现在,每当来自客户站点的请求传入时,都会根据类的哈希表检查电路 ID 选项。如果找到与电路 ID 匹配的子类,客户端将被归入该子类并进行相应处理。如果没有找到与电路 ID 匹配的子类,则会创建一个新的子类并将其记录在dhcpd.leases文件中,并且客户端将被归类到这个新类中。对客户进行分类后,将根据该类别的规则对其进行处理,包括在这种情况下,受每个站点四个租约的限制。
子类生成机制的使用不限于中继代理选项——给出这个特定的例子只是因为它是一个相当简单的例子。

结合匹配、匹配和生成
在某些情况下,使用一个表达式将客户端分配给特定类,并使用第二个表达式将其放入该类的子类可能很有用。这可以通过将match if和spawn 与语句或match if和match语句组合在一起来完成。例如:

类“jr-cable-modems”{
匹配如果选项 dhcp-vendor-identifier = “jrcm”;
使用选项 agent.circuit-id 生成;
租赁限制4;
}

class “dv-dsl-modems” {
匹配 if opton dhcp-vendor-identifier = “dvdsl”;
使用选项 agent.circuit-id 生成;
租赁限制 16;
}
这允许您拥有两个具有相同spawn 和表达式的类,而不会使两个类中的客户端相互混淆。
动态 Dns 更新
DHCP 服务器具有动态更新域名系统的能力。在配置文件中,您可以定义希望如何更新域名系统。这些更新符合 RFC 2136,因此任何支持 RFC 2136 的 DNS 服务器都应该能够接受来自 DHCP 服务器的更新。

目前实施了两个 DNS 更新方案,另一个正在计划中。目前可用的两种是ad-hoc DNS 更新模式和临时DHCP-DNS 交互草案更新模式。如果 DHCP-DNS 交互草案和 DHCID 草案通过 IETF 标准流程,则会出现第三种模式,即标准 DNS 更新方法。DHCP 服务器必须配置为使用当前支持的两种方法之一,或者不进行 dns 更新。这可以通过ddns-update-style配置参数来完成。

Ad-hoc Dns 更新方案
ad-hoc 动态 DNS 更新方案现在已弃用且不起作用。在 ISC DHCP 服务器的未来版本中,此方案可能不可用。临时方案有效,允许故障转移,现在应该使用。以下描述仅供参考。

此版本的 ISC DHCP 服务器中实现的 ad-hoc 动态 DNS 更新方案是一个原型设计,与 IETF DHC 工作组正在标准化的标准更新方法没有太大关系,而是实现了一些非常基本但有用的更新功能。此模式不适用于故障转移协议,因为它不考虑两个不同的 DHCP 服务器更新同一组 DNS 记录的可能性。

对于 ad-hoc DNS 更新方法,客户端的 FQDN 由两部分派生。首先,确定主机名。然后,确定域名,并将其附加到主机名。

DHCP 服务器通过首先查找ddns-hostname配置选项并使用它(如果存在)来确定客户端的主机名。如果没有这样的选项,服务器会在客户端发送的 FQDN 选项中查找有效的主机名。如果找到,则使用;否则,如果客户端发送了主机名选项,则使用该选项。否则,如果存在适用于客户端的主机声明,则将使用该声明中的名称。如果这些都不适用,服务器将没有客户端的主机名,并且将无法进行 DNS 更新。

域名由ddns-domainname配置选项确定。此选项的默认配置为:

option server.ddns-domainname = config-option domain-name;
因此,如果此配置选项未配置为不同的值(覆盖上述默认值),或者未为客户端范围配置域名选项,则服务器将不会尝试执行 DNS 更新。
客户的完全限定域名(如我们所描述的那样)用作将存储“A”记录的名称。A 记录将包含客户端在其租约中分配的 IP 地址。如果 DNS 服务器中已经存在同名的 A 记录,则不会更新 A 或 PTR 记录 - 这可以防止客户端声称其主机名是某个网络服务器的名称。例如,如果您有一个名为“fs.sneedville.edu”的文件服务器,并且客户端声称其主机名为“fs”,则不会为该客户端执行 DNS 更新,并且会记录一条错误消息。

如果 A 记录更新成功,将对分配的 IP 地址进行 PTR 记录更新,指向 A 记录。此更新是无条件的 - 即使存在另一个同名的 PTR 记录,它也会完成。由于 IP 地址已分配给 DHCP 服务器,因此应该是安全的。

请注意,当前的实现假设客户端只有一个网络接口。具有两个网络接口的客户端将看到不可预测的行为。这被认为是一个错误,将在以后的版本中修复。启用“ one-lease-per-client”参数可能会有所帮助,这样漫游客户端就不会触发相同的行为。

DHCP 协议通常涉及四包交换 - 首先客户端发送 DHCPDISCOVER 消息,然后服务器发送 DHCPOFFER,然后客户端发送 DHCPREQUEST,然后服务器发送 DHCPACK。在服务器的当前版本中,服务器将在收到 DHCPREQUEST 之后和发送 DHCPACK 之前进行 DNS 更新。如果之前没有为客户端地址发送过 DNS 更新,它只会发送 DNS 更新,以尽量减少对 DHCP 服务器的影响。

当客户端的租期到期时,DHCP 服务器(如果它正在运行,或者下次运行时)将从 DNS 数据库中删除客户端的 A 和 PTR 记录。如果客户端通过发送 DHCPRELEASE 消息释放其租约,服务器将同样删除 A 和 PTR 记录。

临时 Dns 更新计划
临时 DNS 更新方案主要根据 IETF 正在考虑并有望成为标准的几个草案来运作,但还不是标准,并且可能不会完全按照目前的提议进行标准化。这些是:

Draft-ietf-dhc-ddns-resolution-??.txt
Draft-ietf-dhc-fqdn-option-??.txt
draft-ietf-dnsext-dhcid-rr-??.txt

由于我们的实现与标准略有不同,我们将在此处简要记录此更新样式的操作。

了解这种 DNS 更新风格的第一点是,与 ad-hoc 风格不同,DHCP 服务器不一定总是更新 A 和 PTR 记录。FQDN 选项包括一个标志,当由客户端发送时,该标志指示客户端希望更新其自己的 A 记录。在这种情况下,服务器可以配置为尊重客户端的意图或忽略它们。这是通过语句allow client-updates 完成的;或语句忽略客户端更新;. 默认情况下,允许客户端更新。

如果服务器配置为允许客户端更新,则如果客户端在 FQDN 选项中发送完全限定的域名,服务器将使用客户端在 FQDN 选项中发送的名称来更新 PTR 记录。例如,假设客户端是来自“radish.org”域的访问者,其主机名为“jschmoe”。服务器用于“example.org”域。DHCP 客户端在 FQDN 选项中指示其 FQDN 是“jschmoe.radish.org.”。它还表明它要更新自己的 A 记录。因此,DHCP 服务器不会尝试为客户端设置 A 记录,但会为其分配给客户端的 IP 地址设置 PTR 记录,指向 jschmoe.radish.org。一旦 DHCP 客户端有了 IP 地址,它就可以更新自己的 A 记录,假设“萝卜.

如果服务器配置为不允许客户端更新,或者如果客户端不想进行自己的更新,则服务器将简单地从 fqdn 选项(如果存在)或主机名选项(如果存在)中为客户端选择一个名称当下)。它将为客户端使用自己的域名,就像在 ad-hoc 更新方案中一样。然后它将使用它为客户端选择的名称更新 A 和 PTR 记录。如果客户端在 fqdn 选项中发送完全限定的域名,则服务器仅使用域名的最左边部分 - 在上面的示例中,“jschmoe”而不是“jschmoe.radish.org”。

此外,如果忽略客户端更新;指令被使用,然后服务器将另外在 DHCP 数据包中发送一个响应,使用 FQDN 选项,这暗示客户端如果它选择这样做,它应该执行自己的更新。随着否认客户端更新; ,发送响应,指示客户端可能不执行更新。

此外,如果启用了use-host-decl-names配置选项,则将使用主机声明的主机名代替 主机名选项,并且将应用与上述相同的规则。

ad-hoc 方案和临时方案的另一个区别是,在临时方案中,使用了一种方法,允许多个 DHCP 服务器更新 DNS 数据库,而不会意外删除不应删除或未能删除的 A 记录add 应该添加的记录。该方案的工作原理如下:

当 DHCP 服务器向客户端发出新租约时,它会创建一个文本字符串,该字符串是 DHCP 客户端标识上的 MD5 散列(有关详细信息,请参阅 Draft-ietf-dnsext-dhcid-rr-??.txt)。更新添加了一个带有服务器选择的名称的 A 记录和一个包含散列标识符字符串 (hashid) 的 TXT 记录。如果此更新成功,则服务器完成。

如果因为 A 记录已经存在而导致更新失败,则 DHCP 服务器尝试添加 A 记录,前提是必须有一个与新 A 记录同名的 TXT 记录,并且该 TXT 记录的内容必须等于哈希德。如果此更新成功,则客户端具有其 A 记录和 PTR 记录。如果失败,则客户端已分配(或请求)的名称正在使用中,并且客户端无法使用。此时 DHCP 服务器放弃尝试为客户端进行 DNS 更新,直到客户端选择一个新名称。

临时 DNS 更新方案被称为临时有两个原因。首先,它并不完全遵循草案。草案的当前版本需要新的 DHCID RRtype,但这尚不可用。临时 DNS 更新方案改为使用 TXT 记录。此外,现有的 ddns-resolution 草案要求 DHCP 服务器将 DHCID RR 放在 PTR 记录上,但临时更新方法没有这样做。我们的立场是这没有用,我们正在与作者合作,希望将其从草稿的下一个版本中删除,或者更好地理解为什么认为它有用。

除了这些差异之外,服务器也不会非常积极地更新。由于每次 DNS 更新都涉及到 DNS 服务器的往返,因此即使它们实际上并未修改 DNS 数据库,执行更新也会产生相关成本。因此,DHCP 服务器会跟踪它过去是否更新过记录(此信息存储在租约中),并且不会尝试更新它认为已经更新的记录。

这可能导致 DHCP 服务器添加一条记录,然后通过某种其他机制删除该记录,但服务器不再更新 DNS,因为它认为数据已经存在。在这种情况下,可以通过运营商干预从租约中删除数据,一旦完成,DNS 将在下次客户端更新时更新。

动态 Dns 更新安全
当您将 DNS 服务器设置为允许来自 DHCP 服务器的更新时,您可能会将其暴露给未经授权的更新。为避免这种情况,您应该使用 TSIG 签名 - 一种使用共享密钥对更新进行加密签名的方法。只要您保护此密钥的机密性,您的更新也应该是安全的。但是请注意,DHCP 协议本身不提供安全性,因此客户端可以向 DHCP 服务器提供信息,然后 DHCP 服务器将在其更新中使用这些信息,具有前面描述的约束。

DNS 服务器必须配置为允许更新 DHCP 服务器将更新的任何区域。例如,假设 sneedville.edu 域中的客户端将分配到 10.10.17.0/24 子网上的地址。在这种情况下,您将需要一个用于您将使用的 TSIG 密钥的密钥声明,以及两个区域声明 - 一个用于包含将要更新的 A 记录的区域,另一个用于包含 PTR 记录的区域 - 对于 ISC BIND,一些像这样:

密钥 DHCP_UPDATER {
算法 hmac-md5;
秘密 pRP5FapFoJ95JEL06sv4PQ==;
};

区域“example.org”{
类型大师;
文件“example.org.db”;

允许更新 { 关键 DHCP_UPDATER; };

};
区域“17.10.10.in-addr.arpa”{

类型大师;
文件“10.10.17.db”;

允许更新 { 关键 DHCP_UPDATER; };

};
您还必须配置 DHCP 服务器以更新这些区域。为此,您需要在 dhcpd.conf 文件中添加如下内容:

密钥 DHCP_UPDATER {
算法 hmac-md5;
秘密 pRP5FapFoJ95JEL06sv4PQ==;
};

区域示例.ORG。{
主要 127.0.0.1;
关键 DHCP_UPDATER;
}

区域 17.127.10.in-addr.arpa。{
主要 127.0.0.1;
关键 DHCP_UPDATER;
}
该主语句指定名称服务器,其区信息进行更新的IP地址。
请注意,区域声明必须对应于您的名称服务器中的权限记录 - 在上面的示例中,“example.org”必须有一个 SOA 记录。和“17.10.10.in-addr.arpa.”。例如,如果有一个没有单独 SOA 的子域“foo.example.org”,则不能为“foo.example.org”编写区域声明。还要记住,DHCP 配置中的区域名称应以“.”结尾;这是首选语法。如果您的区域名称不以“.”结尾,DHCP 服务器会找出来。另请注意,在 DHCP 配置中,区域名称未封装在 DNS 配置中的引号中。

当然,您应该选择自己的密钥。ISC BIND 8 和 9 发行版带有一个用于生成密钥的程序,称为 dnssec-keygen。BIND 9 附带的版本可能会产生更多随机密钥,因此我们建议您使用该密钥,即使您没有使用 BIND 9 作为 DNS 服务器。如果您使用 BIND 9 的 dnssec-keygen,则上述密钥将按如下方式创建:

dnssec-keygen -a HMAC-MD5 -b 128 -n 用户 DHCP_UPDATER
如果您使用的是 BIND 8 dnskeygen 程序,则以下命令将生成如上所示的密钥:
dnskeygen -H 128 -u -c -n DHCP_UPDATER
您可能希望在您的 DNS 服务器上启用 DNS 更新日志记录。为此,您可以编写如下的日志记录语句:
日志记录{
频道更新调试{
文件“/var/log/update-debug.log”;

严重性

调试3;

印刷品类

是的;

打印严重性

是的;

打印时间

是的;

};

通道安全信息

{

文件

“/var/log/named-auth.info”;

严重性

信息;

印刷品类

是的;

打印严重性

是的;

打印时间

是的;

};

类别更新{ update_debug; };

类别安全{ security_info; };

};
在启动名称服务器之前,您必须创建 /var/log/named-auth.info 和 /var/log/update-debug.log 文件。有关配置 ISC BIND 的更多信息,请参阅随附的文档。

参考:事件
关于租约,可能会发生三种事件,并且可以声明当这些事件中的任何一个发生时发生的语句。这些事件是提交事件,当服务器向客户端做出某个租约的承诺时,释放事件,当客户端从其承诺中释放服务器时,以及到期事件,当承诺到期时。

要声明在事件发生时要执行的一组语句,必须使用on语句,后跟事件名称,然后是一系列要在事件发生时执行的语句,用大括号括起来。事件用于实现 DNS 更新,因此如果您使用内置 DNS 更新机制,则不应定义自己的事件处理程序。

DNS 更新机制的内置版本位于 server/dhcpd.c 顶部的文本字符串中。如果您想将事件用于 DNS 更新之外的其他事情,并且您还需要 DNS 更新,则必须首先将此代码复制到 dhcpd.conf 文件中并进行修改。

参考:声明
在 包括 声明

包括 “文件名” ;
在包括语句用于在一个名为读取文件,并处理文件的内容,就好像是在地方包括语句输入。
在 共享网络 声明

共享网络 名称 {
[参数]
[声明]
}
在共享网络语句用来通知DHCP服务器,一些IP子网实际上是共享同一个物理网络。共享网络中的任何子网都应在shared-network语句中声明。在这些子网上引导客户端时,将使用shared-network语句中指定的参数,除非在子网或主机级别提供的参数覆盖它们。如果共享网络中的任何子网具有可用于动态分配的地址,这些地址将被收集到该共享网络的公共池中,并根据需要分配给客户端。无法区分客户端应该在共享网络的哪个子网上启动。
Name应该是共享网络的名称。此名称在打印调试消息时使用,因此它应该是对共享网络的描述。该名称可能具有有效域名的语法(尽管它永远不会被这样使用),或者它可能是任何包含在引号中的任意名称。

该 子网 声明

子网 子网号 子网掩码 网络 掩码 {
[参数]
[声明]
}
该子网语句用来提供足够的信息的dhcpd告诉一个IP地址是否是该子网。它还可用于提供特定于子网的参数并指定可以动态分配给在该子网上启动的客户端的地址。这些地址是使用范围声明指定的。
的子网的数目应是被描述解析为子网的子网号的一个IP地址或域名。的网络掩码应当是被描述解析为子网的子网掩码的IP地址或域名。子网号与网络掩码一起足以确定任何给定的 IP 地址是否在指定的子网上。

尽管每个子网声明都必须提供网络掩码,但建议如果站点的子网掩码有任何差异,则在每个子网声明中使用子网掩码选项语句来设置所需的子网掩码,因为任何子网- mask 选项语句将覆盖子网语句中声明的子网掩码。

该 subnet6 声明

子网6 子网6号 {
[参数]
[声明]
}
该subnet6语句用来提供足够的信息的dhcpd告诉IPv6地址是否是对subnet6。它还可用于提供特定于子网的参数并指定可以动态分配给在该子网上启动的客户端的地址。
所述subnet6数应该是IPv6网络标识符,指定为IP6-地址/位。

该 范围内 声明

范围[动态引导]低地址[高地址] ;
对于将动态分配地址的任何子网,必须至少有一个范围语句。range 语句给出了一个范围内的最低和最高 IP 地址。范围内的所有 IP 地址都应位于声明范围语句的子网中。的 动态BOOTP如果在指定的范围内的地址可以被动态地分配给BOOTP客户机以及DHCP客户端标志可以被指定。指定单个地址时,可以省略高地址。
该 范围6 声明

range6 低地址高地址;
range6 子网6号;
range6 subnet6-number 临时;
range6 地址 临时;
对于将动态分配地址的任何 IPv6 子网6,必须至少有一个range6语句。该范围6语句可以是在最低和最高的IPv6地址范围6,或使用CIDR表示法,指定为IP6地址/位。range6中的所有IP 地址都 应该在声明range6语句的subnet6 中。
所述temporay变体使得前缀(默认64位)可用于临时(RFC 4941)的地址。使用 IA_TA 选项在每次请求时计算共享网络中每个前缀的新地址。释放和确认忽略临时地址。

任何分配给具有fixed-address6主机的 IPv6 地址都被排除在range6 之外,服务器本身的 IPv6 地址也是如此。

该 prefix6 声明

prefix6 低地址高地址 / 位;
该prefix6是范围6当量为前缀委派(RFC 3633)。位长度的前缀在低地址 和高地址之间分配。
给静态项(主机)与任何IPv6前缀固定prefix6被排除在prefix6。

此语句当前是全局的,但它应该具有共享网络范围。

该 主机 声明

主机主机 名{
[参数]
[声明]
}
所述主机声明提供了在其中以提供关于特定客户端的配置信息的范围,并且还提供了一种方法来分配客户端的固定地址。主机声明为 DHCP 服务器提供了一种识别 DHCP 或 BOOTP 客户端的方法,也是一种为客户端分配静态 IP 地址的方法。
如果希望能够在多个具有固定地址的子网上启动 DHCP 或 BOOTP 客户端,则可以在固定地址声明中指定 多个地址,或者可以指定多个host语句匹配同一客户端.

如果特定于客户端的引导参数必须根据客户端所连接的网络进行更改,则应使用多个主机声明。的主机,如果他们中的一个的声明将只匹配客户端固定地址语句是在其中客户端所连接的子网(或共享网络)是可行的。相反,要使主机声明与被分配动态地址的客户端相匹配,它必须没有任何固定地址 语句。因此,对于任何给定的客户端,您可能需要混合使用主机声明……有些具有固定地址语句,有些则没有。

主机名应该是标识主机的名称。如果没有为主机指定主机名选项,则使用主机名。

主机声明通过匹配在指定的DHCP客户端标识符选项匹配实际DHCP或BOOTP客户端主机声明由客户端提供的一个,或者,如果主机声明或客户机不提供DHCP的客户端标识符选项,通过将主机声明中的硬件参数与客户端提供的网络硬件地址进行匹配 。BOOTP 客户端通常不提供 dhcp-client-identifier,因此硬件地址必须用于所有可能使用 BOOTP 协议引导的客户端。

DHCPv6 服务器可以在主机声明中使用host-identifier 选项参数,并指定任何具有固定值的选项来标识主机。

请注意,只有在DHCP客户端标识符选项和硬件地址可以被用来匹配一台主机的声明,或者 主机标识符选项的DHCPv6服务器的报参数。例如,不可能将主机声明与主机名选项相匹配。这是因为不能保证主机名选项对于任何给定的客户端都是唯一的,而硬件地址和dhcp-client-identifier选项至少在理论上保证对给定的客户端是唯一的。

该 集团 声明

组{
[参数]
[声明]
}
group 语句仅用于将一个或多个参数应用于一组声明。它可用于对主机、共享网络、子网甚至其他组进行分组。
参考:允许和拒绝
在允许和拒绝语句可以用来控制DHCP服务器的不同种类的请求的回应。根据上下文,allow 和 deny 关键字实际上具有不同的含义。在池上下文中,这些关键字可用于为地址分配池设置访问列表。在其他上下文中,关键字仅根据作用域控制与客户端有关的一般服务器行为。在非池上下文中,可以使用ignore关键字代替deny关键字来防止记录被拒绝的请求。

在范围内允许拒绝和忽略
以下允许和拒绝的用法适用于任何范围,尽管不建议在池声明中使用它们。

在 未知的客户 关键字

允许未知客户端;拒绝未知客户;忽略未知客户端;

在未知的客户端标志是用来告诉dhcpd中是否要对未知客户端动态分配地址。默认情况下允许向未知客户端动态分配地址。未知客户端只是没有主机声明的客户端。

现在不推荐使用此选项。如果你试图限制已知客户端访问你的网络,你应该使用deny unknown-clients;在您的地址池内,如标题允许和拒绝池内声明下所述。

该 BOOTP 关键字

允许引导;拒绝引导;忽略引导;

该BOOTP标志是用来告诉dhcpd中是否要对BOOTP响应查询。默认情况下允许使用Bootp 查询。

此选项不满足故障转移对等方拒绝动态 bootp 客户端的要求。在否认动态BOOTP客户; 应改用选项。有关更多详细信息,请参阅此手册页的 ALLOW AND DENY IN POOL DECLARATIONS 部分。

在 启动 关键字

允许开机;拒绝开机;忽略启动;

该引导标志用于从特定客户告诉dhcpd中是否不回应查询。此关键字仅在出现在主机声明中时才有意义。默认情况下,允许启动,但如果为特定客户端禁用它,则该客户端将无法从 DHCP 服务器获取地址。

将 重复 关键字

允许重复;拒绝重复;

主机声明可以根据 DHCP 客户端标识符选项或基于客户端的网络硬件类型和 MAC 地址来匹配客户端消息。如果使用 MAC 地址,则主机声明将匹配具有该 MAC 地址的任何客户端 - 即使是具有不同客户端标识符的客户端。这通常不会发生,但是当一台计算机上安装了多个操作系统时可能会发生 - 例如,Microsoft Windows 和 NetBSD 或 Linux。

的重复标志告诉DHCP服务器,如果从客户端主机声明的MAC地址相匹配接收到一个请求,任何其他租赁匹配的MAC地址应当由服务器被丢弃,即使UID是不一样的。这违反了 DHCP 协议,但可以防止其客户端标识符定期更改的客户端同时持有多个租用。默认情况下,允许重复。

该 下降 关键字

允许拒绝;拒绝拒绝;忽略下降;

DHCPDECLINE 消息由 DHCP 客户端用来指示服务器提供的租约无效。当服务器收到特定地址的 DHCPDECLINE 时,它通常会放弃该地址,假设某个未经授权的系统正在使用它。不幸的是,恶意或有缺陷的客户端可以使用 DHCPDECLINE 消息完全耗尽 DHCP 服务器的分配池。服务器会收回这些租约,但是当客户端在池中运行时,可能会导致 DNS 严重抖动,还会导致 DHCP 服务器忘记旧的 DHCP 客户端地址分配。

该跌幅标志告诉DHCP服务器是否要荣誉DHCPDECLINE消息。如果在特定范围内设置为拒绝或忽略,则 DHCP 服务器将不会响应 DHCPDECLINE 消息。

该 客户端更新 关键字

允许客户端更新;拒绝客户端更新;

该客户端更新标志告诉DHCP服务器是否要兑现客户的意向做自有它的A记录的更新。这仅在进行临时DNS 更新时相关。有关详细信息,请参阅“临时 DNS 更新计划”标题下的文档。

该 leasequery 关键字

允许租用查询;拒绝租约查询;

该leasequery标志告诉DHCP服务器是否不回答DHCPLEASEQUERY包。对 DHCPLEASEQUERY 数据包的答复包括有关特定租用的信息,例如它何时发布以及何时到期。默认情况下,服务器不会响应这些数据包。

允许和拒绝池声明
无论客户端是发送 DHCPDISCOVER 还是 DHCPREQUEST 消息,上一节中显示的 allow 和 deny 关键字的使用方式几乎相同 - 将向客户端分配一个地址(它请求的旧地址或新地址)地址),然后将测试该地址以查看是否可以让客户端拥有它。如果客户端请求它,并且它不正常,服务器将发送一个 DHCPNAK 消息。否则,服务器将根本不响应客户端。如果可以将地址提供给客户端,服务器将发送 DHCPACK 消息。

池声明背后的主要动机是拥有分配策略不同的地址分配池。客户端可能会被拒绝访问一个池,但允许访问同一网段上的另一个池。为了使其工作,访问控制必须在地址分配期间进行,而不是在地址分配完成后进行。

当处理 DHCPREQUEST 消息时,地址分配仅包括查找客户端请求的地址并查看它是否仍可用于客户端。如果是,则 DHCP 服务器检查地址池许可列表和相关的范围内允许和拒绝语句,以查看是否可以向客户端提供租用。在 DHCPDISCOVER 消息的情况下,分配过程按照前面地址分配部分中的描述完成。

在声明地址分配池的许可列表时,在 allow 或 deny 关键字之后识别以下语法:

已知客户;

如果指定,此语句将允许或阻止从此池分配给具有主机声明(即,已知)的任何客户端。如果客户端在任何范围内具有主机声明,而不仅仅是当前范围,则它是已知的。

未知客户;

如果指定,此语句将允许或阻止从此池分配给没有主机声明(即,未知)的任何客户端。

“类”的成员;

如果指定,此语句将允许或阻止从此池分配给作为命名类成员的任何客户端。

动态引导客户端;

如果指定,此语句将允许或阻止从此池分配给任何 bootp 客户端。

认证客户;

如果指定,此语句将允许或阻止从此池分配给已使用 DHCP 身份验证协议进行身份验证的任何客户端。这还不支持。

未经身份验证的客户;

如果指定,此语句将允许或阻止从此池分配给尚未使用 DHCP 身份验证协议进行身份验证的任何客户端。这还不支持。

所有客户;

如果指定,此语句将允许或阻止从此池分配给所有客户端。当您出于某种原因想要编写池声明但将其保留,或者当您想要快速重新编号网络并因此希望服务器强制所有已从该池分配地址的客户端时,可以使用此方法下次更新时立即获取新地址。

过了 一段时间;

如果指定,此语句将允许或阻止在给定日期之后从此池中分配。当您想将客户端从一个池移动到另一个池时,可以使用此方法。服务器调整常规租用时间,使最晚到期时间为给定时间+min-lease-time。较短的最小租用时间强制执行阶跃变化,而较长的最小租用时间允许逐渐变化。time是自纪元以来的秒数,或 UTC 时间字符串,例如 4 2007/08/24 09:14:32 或以秒为单位的时区偏移字符串,例如 4 2007/08/24 11:14:32 -7200

参考:参数
该自适应租赁时间阈值声明

自适应租赁时间阈值 百分比;
当池中分配的租用数量超过此语句中给出的百分比时,DHCP 服务器将此池中新客户端的租用长度减少到min-lease-time秒。续订已经有效(长期)租约的客户端至少从当前租约中获得剩余时间。由于租约到期更快,服务器可以更快地恢复或完全避免池耗尽。一旦分配的租用数量低于阈值,服务器将恢复到正常租用时间。有效百分比介于 1 和 99 之间。

将始终广播声明
始终广播 标志;
DHCP 和 BOOTP 协议都要求 DHCP 和 BOOTP 客户端在 BOOTP 消息头的标志字段中设置广播位。不幸的是,一些 DHCP 和 BOOTP 客户端不这样做,因此可能无法从 DHCP 服务器接收响应。通过将此标志设置为相关范围的“on”,可以使 DHCP 服务器始终向客户端广播其响应;相关范围将在条件语句中,作为类的参数,或作为主机声明的参数。为避免在您的网络上产生过多的广播流量,我们建议您将此选项的使用限制为尽可能少的客户端。例如,已知 Microsoft DHCP 客户端没有此问题,OpenTransport 和 ISC DHCP 客户端也是如此。

将始终回复RFC1048声明
始终回复 rfc1048 标志;
一些 BOOTP 客户端期望 RFC1048 样式的响应,但在发送请求时不遵循 RFC1048。如果客户端没有获得您为其配置的选项,并且您在服务器日志中看到与记录的每个 BOOTREQUEST 一起打印的消息“(非 rfc1048)”,则您可以判断客户端存在此问题。

如果您想向这样的客户端发送 rfc1048 选项,您可以在该客户端的主机声明中设置always-reply-rfc1048选项,DHCP 服务器将使用 RFC-1048 样式的供应商选项字段进行响应。此标志可以在任何范围内设置,并将影响该范围涵盖的所有客户端。

该权威说法
权威性;
不权威;

DHCP 服务器通常会假定有关给定网段的配置信息未知是正确的且不具有权威性。这样一来,如果天真的用户安装了 DHCP 服务器,但不完全了解如何配置它,它就不会向从网络上的合法 DHCP 服务器获取地址的客户端发送虚假的 DHCPNAK 消息。

为其网络设置权威 DHCP 服务器的网络管理员应始终编写权威;在其配置文件的顶部,指示 DHCP 服务器应向配置错误的客户端发送 DHCPNAK 消息。如果不这样做,客户端将无法在更改子网后获得正确的 IP 地址,直到旧租约到期,这可能需要很长时间。

通常,写作权威;在文件的顶层应该就足够了。但是,如果要设置 DHCP 服务器,以便它知道它对某些网络具有权威性,而某些网络不具有权威性,则在每个网络段的基础上声明权限可能更合适。

请注意,对权限概念有意义的最具体范围是物理网段 - 共享网络语句或未包含在共享网络语句中的子网语句。指定服务器对共享网络中的某些子网具有权威性,但对其他子网不具有权威性没有意义,指定服务器对某些主机声明具有权威性而不对其他人具有权威性也没有意义。

在启动未知的客户端声明
引导未知客户端 标志;
如果存在boot-unknown-clients语句并且值为false或off,则将 不允许没有主机声明的客户端获取 IP 地址。如果此语句不存在或值为true或on,则将允许没有主机声明的客户端获取 IP 地址,只要这些地址不受其池声明中的允许和拒绝语句的 限制。

在DB-时间的格式声明
db-time-format [默认| 本地] ;
将租约写入持久存储时,DHCP 服务器软件会输出多个时间戳。此配置参数选择两种输出格式之一。该默认格式打印天,日期和UTC时间,而本地的格式打印系统秒纪元以来,并提供有益在评论系统时区的日期和时间。时间格式在dhcpd.leases (5) 联机帮助页中有详细描述。

该DDNS主机名声明
ddns-主机 名;
该名称参数应该是将设置客户端的A和PTR记录所使用的主机名。如果在范围内未指定 ddns-hostname,则服务器将使用针对每种不同更新方法而变化的算法自动派生主机名。

该DDNS,域名声明
ddns-域名 名称;
该名称参数应该是将被追加到客户端的主机名,形成一个完全合格的域名(FQDN)的域名。

该DDNS-REV-域名声明
ddns-rev-域名 名称;该名称参数应该是将附加到客户端的反向IP地址在客户端的PTR记录使用产生的名称的域名。默认情况下,这是“in-addr.arpa.”,但可以在此处覆盖默认值。
附加此域名的反向 IP 地址始终是客户端的 IP 地址,采用点分四元表示法,反向 - 例如,如果分配给客户端的 IP 地址为 10.17.92.74,则反向 IP 地址为 74.92 .17.10。因此,默认情况下,具有该 IP 地址的客户端将获得 10.17.92.74.in-addr.arpa 的 PTR 记录。

该DDNS更新式的参数
ddns-update-style 风格;
该风格参数必须是一个临时,临时或无。该DDNS更新式的语句是只在外部范围有意义的-一旦读取dhcpd.conf文件,而每个时间比客户端分配IP地址后,其被评估,所以没有办法用不同的DNS更新款式针对不同的客户。默认值为none。

该 DDNS更新功能 声明
ddns-更新 标志;
该DDNS更新功能参数控制是否该服务器将尝试在租赁确认做DNS更新。如果服务器不应尝试在特定范围内进行更新,则将此设置为off。该DDNS更新功能参数默认是开启的。要在所有范围内禁用 DNS 更新,最好使用ddns-update-style语句,将样式设置为none。

在默认的租赁时间声明
默认租赁 时间;
如果请求租用的客户端不要求特定的到期时间,则时间应该是将分配给租用的以秒为单位的长度。这用于 DHCPv4 和 DHCPv6 租用(它也称为 DHCPv6 中的“有效生存期”)。

该延迟ACK和MAX-ACK延迟报表
延迟确认 计数;最大确认延迟 微秒;
计数应该是一个从 0 到 2^16-1 的整数值,默认为 28。计数表示最多有多少 DHCPv4 回复将排队等待传输,直到数据库提交事件之后。如果达到这个数目,就会产生一个数据库提交事件(通常会导致 fsync() 并表示性能损失),然后将批量传输回复包。这保留了在回复客户端之前更新“稳定存储”的 RFC2131 方向。如果 DHCPv4 套接字“变干”(select() 立即返回而没有读取套接字),则进行提交并传输任何排队的数据包。

类似地,微秒表示在排队等待 fsync 的数据包和执行 fsync 之间允许传递多少微秒。有效值范围从 0 到 2^32-1,默认值为 250,000(1/4 秒)。

请注意,由于delayed-ack 目前处于实验阶段,因此默认情况下不会编译delayed-ack 功能,但必须在编译时使用’./configure --enable-delayed-ack’ 启用它。

该DO-向前更新声明
do-forward-updates 标志;
该做的,前瞻性的更新语句指示DHCP服务器为是否应该尝试更新DHCP客户端的A记录当客户端获取或更新租约。除非启用 DNS 更新并且ddns-update-style设置为中间,否则此语句无效。默认情况下启用转发更新。如果此语句用于禁用转发更新,则 DHCP 服务器将永远不会尝试更新客户端的 A 记录,并且只会在客户端提供应使用以下命令放入 PTR 记录的 FQDN 时才尝试更新客户端的 PTR 记录fqdn 选项。如果启用了转发更新,DHCP 服务器仍将遵守client-updates标志的设置。

该动态BOOTP租赁截止声明
动态引导租约截止 日期;
该动态BOOTP租赁截止语句将续期的动态分配给BOOTP客户的结束时间。因为 BOOTP 客户端没有任何更新租约的方法,并且不知道他们的租约可能会过期,所以默认情况下 dhcpd 会为所有 BOOTP 客户端分配无限的租约。但是,在某些情况下,为所有 BOOTP 租约设置截止日期可能是有意义的 - 例如,学期结束或设施关闭且所有机器都需要关闭电源的夜间时间。

日期应该是所有分配的 BOOTP 租约结束的日期。日期以以下形式指定:

W YYYY/MM/DD HH:MM:SS

W 是星期几,表示为从零(星期日)到六(星期六)的数字。YYYY 是年份,包括世纪。MM 是月份,表示为从 1 到 12 的数字。DD 是月份中的第几天,从 1 开始计数。HH 是小时,从 0 到 23。MM 是分钟,SS 是秒。时间始终采用协调世界时 (UTC),而不是当地时间。

该动态BOOTP租赁长度声明
动态引导租约长度 长度;
的动态BOOTP租赁长度语句用于设置动态分配给BOOTP客户租约的长度。在某些站点,如果租约持有者在特定时间段内未使用 BOOTP 或 DHCP 获取其地址,则可以假设租约不再使用。时间段的长度指定 为秒数。如果客户端在超时期间使用 BOOTP 重新启动,则租用期限将重置为length,因此启动频率足够高的 BOOTP 客户端永远不会丢失其租用。不用说,这个参数应该非常小心地调整。

该名发言
文件名“文件名”;
该文件名语句可以用来指定要由客户端加载初始引导文件的名称。该文件名应该是一个文件名识别到任何文件传输协议,客户端可以预期使用加载的文件。

在固定地址的声明
固定地址地址[ , 地址… ] ;
该固定地址声明用于分配一个或多个固定的IP地址的客户端。它应该只出现在主机声明中。如果提供了多个地址,那么当客户端启动时,将为其分配与其启动的网络相对应的地址。如果固定地址语句中的地址对于客户端所连接的网络均无效,则该客户端将与 包含该固定地址声明的主机声明不匹配。固定地址声明中的每个地址都应该是一个 IP 地址或解析为一个或多个 IP 地址的域名。

该固定address6声明
固定地址6 ip6地址;
所述固定address6声明用于分配一个固定的IPv6地址到客户端。它应该只出现在主机声明中。

在获取租赁,主机名声明
get-lease-hostnames 标志;
该GET-租赁主机名语句用来告诉dhcpd中是否要查找对应于租约池中的每个地址的IP地址,域名和使用该地址的DHCP主机名称选项。如果flag为真,则对当前范围内的所有地址执行此查找。默认情况下,或者如果flag为 false,则不进行任何查找。

在硬件声明
硬件 硬件类型硬件地址;
为了识别 BOOTP 客户端,必须使用host语句中的硬件子句声明其网络硬件地址。 hardware-type必须是物理硬件接口类型的名称。目前,只有以太网和令牌环类型被识别,尽管支持fddi硬件类型(和其他)也是可取的。该硬件地址应该是一组由冒号分隔的十六进制的八位字节(通过FF从0号)的。该硬件的语句也可用于DHCP客户端。

该主机标识符选项声明
主机标识符选项 选项名称选项数据;
这在主机语句中标识 DHCPv6 客户端。option-name是任何选项,option-data是客户端将发送的选项的值。该选项数据必须是一个恒定值。

在无限的,保留的声明
无限保留 标志;
ISC DHCP 现在支持“保留”租用。请参阅下面关于保留租约的部分。如果此标志打开,服务器将自动保留分配给请求无限 (0xffffffff) 租用时间的客户端的租用。

默认为关闭。

该租赁文件名称声明
租用文件名 名称;
Name应该是 DHCP 服务器的租用文件的名称。默认情况下,这是/var/lib/dh​​cpd/dhcpd.leases。此语句必须出现在配置文件的外部范围内——如果出现在其他范围内,则不会产生任何影响。此外,如果被-lf标志或PATH_DHCPD_DB环境变量覆盖,则它不起作用 。

该极限addrs的每IA声明
limit-addrs-per-ia 数量;
默认情况下,DHCPv6 服务器会将客户端限制为每个 IA 选项一个 IAADDR,即一个地址。如果您希望允许客户端一次挂在多个地址上,请在此处配置一个更大的数字。

请注意,目前没有方法可以将服务器配置为强制为共享网络上的每个子网的客户端配置一个 IP 地址。这留待以后的工作。

该DHCPv6的租赁文件名称声明
dhcpv6-lease-file-name 名称;
Name是当且仅当服务器在 DHCPv6 模式下运行时要使用的租用文件的名称。默认情况下,这是/var/lib/dh​​cpd/dhcpd6.leases。这个语句和lease-file-name 一样, 必须出现在配置文件的外部作用域中。如果被-lf标志或PATH_DHCPD6_DB环境变量覆盖,则它不起作用。如果dhcpv6-lease-file-name未指定,但lease-file-name指定,则将使用后一个值。

在本地端口声明
本地端口 端口;
这个语句使DHCP服务器监听指定的UDP端口上的DHCP请求的端口,而不是67端口。

在本地地址声明
本地地址 地址;
此语句使 DHCP 服务器侦听发送到指定地址的DHCP 请求,而不是发送到所有地址的请求。由于为直接连接的 DHCP 客户端提供服务意味着服务器必须响应发送到全 1 IP 地址的请求,因此如果客户端位于直接连接的网络上,则无法使用此选项…通过单播到达,例如通过 DHCP 中继代理。

注意:此语句仅在使用 USE_SOCKETS #define 语句编译服务器时有效,该语句在少数操作系统上是默认的,并且必须在编译时为所有其他操作系统显式选择。如果您在启动时看到以下格式的行,您可以确定您的服务器是否使用 USE_SOCKETS 编译:

监听 Socket/eth0

另请注意,由于此 bind() 将所有 DHCP 套接字连接到指定地址,因此在给定时间在守护程序中可能仅支持一个地址。

该日志工具声明
日志设施 设施;
一旦读取了 dhcpd.conf 文件,此语句将使 DHCP 服务器在指定的日志工具上执行其所有日志记录。默认情况下,DHCP 服务器会登录到守护进程。可能的日志工具包括 auth、authpriv、cron、daemon、ftp、kern、lpr、mail、mark、news、ntp、security、syslog、user、uucp 和 local0 到 local7。并非所有这些设施都在所有系统上可用,并且可能有其他设施在其他系统上可用。

除了设置此值外,您可能还需要修改syslog.conf文件以配置 DHCP 服务器的日志记录。例如,您可以添加如下一行:

local7.debug /var/log/dhcpd.log
syslog.conf文件的语法在某些操作系统上可能会有所不同 - 请参阅syslog.conf手册页以确定。要让 syslog 开始记录到新文件,您必须首先创建具有正确所有权和权限的文件(通常,/var/log/messages 或 /usr/adm/messages 文件的所有者和权限应该没问题)并向 syslogd 发送 SIGHUP。某些系统使用 shell 脚本或名为 newsyslog 或 logrotate 的程序支持日志翻转,您也可以对其进行配置,以便您的日志文件不会不受控制地增长。
由于log-facility设置由 dhcpd.conf 文件控制,因此在解析 dhcpd.conf 文件时或在解析它之前打印的日志消息将记录到默认日志工具中。为了防止这种情况,请参阅此发行版中包含的 README 文件,其中描述了如何更改默认日志工具。使用该参数时,DHCP服务器解析配置文件后,会再次打印自己的启动信息,以保证日志尽可能完整。

在最大租赁时间声明
最大租赁 时间;
时间应该是将分配给租约的最大长度(以秒为单位)。唯一的例外是客户端未指定的动态 BOOTP 租用长度不受此最大值限制。

在最小租约时间声明
最短租用 时间;
时间应该是分配给租约的最小长度(以秒为单位)。

在民秒声明
最小秒 秒;
秒应该是自客户端开始尝试获取新租约后 DHCP 服务器响应其请求的最小秒数。秒数以客户端报告的为准,客户端可以报告的最大值为255秒。通常,将此设置为 1 将导致 DHCP 服务器不响应客户端的第一个请求,而是始终响应其第二个请求。

这可用于设置辅助 DHCP 服务器,该服务器从不向客户端提供地址,直到主服务器有机会这样做。如果主服务器关闭,客户端将绑定到辅助服务器,否则客户端应始终绑定到主服务器。请注意,这本身并不允许主服务器和辅助服务器共享动态可分配地址池。

在接下来的服务器声明
下一个服务器 服务器名称;
在接下来的服务器语句用来指定从其初始引导文件(在指定的服务器的主机地址,文件名 语句)将被加载。Server-name应该是数字 IP 地址或域名。如果没有next-server语句适用于给定的客户端,则使用地址 0.0.0.0。

该OMAPI端口声明
omapi-port 端口;
该OMAPI口语句使DHCP服务器监听指定端口上的连接OMAPI。此语句是启用 OMAPI 协议所必需的,该协议用于在 DHCP 服务器运行时检查和修改其状态。

在一个租赁每客户声明
每个客户一个租用 标志;
如果启用此标志,则每当客户端为特定租用发送 DHCPREQUEST 时,服务器将自动释放客户端持有的任何其他租用。这假定当客户端发送 DHCPREQUEST 时,它忘记了 DHCPREQUEST 中未提及的任何租用 - 即,客户端只有一个网络接口并且它不记得它在当前未连接到的网络上持有的租用。这些假设都不是保证或可证明的,因此我们敦促谨慎使用此声明。

该PID文件名称声明
pid-file-name 名称;
Name应该是 DHCP 服务器的进程 ID 文件的名称。这是服务器启动时存储 DHCP 服务器进程 ID 的文件。默认情况下,这是/var/run/dhcpd.pid。与lease-file-name语句一样,该语句必须出现在配置文件的外部作用域中。如果被-pf标志或PATH_DHCPD_PID环境变量覆盖,则它不起作用。

该DHCPv6的PID文件名称声明

dhcpv6-pid-file-name 名称;
Name是当且仅当服务器在 DHCPv6 模式下运行时要使用的 pid 文件的名称。默认情况下,这是 /var/lib/dh​​cpd/dhcpd6.pid。这个语句和pid-file-name 一样, 必须出现在配置文件的外部作用域中。如果被-pf标志或PATH_DHCPD6_PID环境变量覆盖,则它不起作用。如果未指定dhcpv6-pid-file-name,但指定了pid-file-name,则将使用后一个值。

该平检查声明
ping 检查 标志;
当 DHCP 服务器考虑为客户端动态分配 IP 地址时,它首先向被分配的地址发送一个 ICMP Echo 请求(一个ping)。它等待一秒钟,如果没有听到 ICMP Echo 响应,它会分配地址。如果响应被听到,租赁被放弃,并且服务器不响应客户端。

此ping 检查在响应 DHCPDISCOVER 消息时引入了默认的一秒延迟,这对于某些客户端来说可能是一个问题。可以使用 ping-timeout 参数配置一秒的默认延迟。ping-check 配置参数可用于控制检查 - 如果其值为 false,则不进行 ping 检查。

该平超时声明
ping 超时 秒数;
如果 DHCP 服务器确定它应该发送 ICMP 回声请求(一个ping),因为 ping-check 语句为真, ping-timeout 允许您配置 DHCP 服务器应等待多长时间听到 ICMP 回声响应,如果在超时到期之前没有收到 ICMP Echo 响应,它分配地址。如果响应被听到,租赁被放弃,并且服务器不响应客户端。如果未设置任何值,ping-timeout 默认为 1 秒。

在首选一生声明
首选生命周期 秒;
IPv6 地址具有“有效”和“首选”生命周期。有效生命周期决定了在什么时候可以说租约已经过期,并且不再可用。首选生命周期是一个建议条件,可帮助应用程序从地址移至当前有效地址(是否仍应有任何打开的 TCP 套接字或类似地址)。

首选生命周期默认为更新+重新绑定计时器,如果未指定,则为默认租用时间的 3/4。

该远程端口声明
远程端口 端口;
这个语句使DHCP服务器在指定的UDP端口发送DHCP响应DHCP客户端端口,而不是端口68的UDP响应发送到DHCP中继的情况下,服务器通常使用本地端口配置价值。然而,如果 DHCP 中继恰好被寻址为 127.0.0.1,则 DHCP 服务器会将其响应传输到远程端口配置值。这通常仅用于测试目的,通常不应使用此配置值。

该服务器的标识声明
服务器标识符 主机名;
server-identifier 语句可用于定义在给定范围的 DHCP 服务器标识符选项中发送的值。指定的值 必须是 DHCP 服务器的 IP 地址,并且必须可由特定范围服务的所有客户端访问。

不推荐使用 server-identifier 语句 - 使用它的唯一原因是在默认值不正确的情况下强制发送默认值以外的值。默认值是与请求到达的物理网络接口关联的第一个 IP 地址。

需要发送server-identifier语句的常见情况是,当一个物理接口有多个 IP 地址时,默认发送的 IP 地址不适用于该接口所服务的部分或所有客户端。另一种常见情况是为 DHCP 服务器具有一致的 IP 地址而定义别名,并且希望客户端在联系服务器时使用此 IP 地址。

为 dhcp-server-identifier 选项提供值等同于使用 server-identifier 语句。

该服务器DUID声明
server-duid LLT [硬件类型时间戳硬件地址] ;
server-duid EN 企业号企业标识符 ;

server-duid LL [硬件类型硬件地址] ;

server-duid 语句配置服务器 DUID。您可以选择 LLT(链接本地地址加时间)、EN(企业)或 LL(链接本地)。

如果您选择 LLT 或 LL,您可以指定 DUID 的确切内容。否则服务器将生成指定类型的 DUID。

如果选择 EN,则必须包括企业编号和企业标识符。

默认的 server-duid 类型是 LLT。

该服务器名称声明
服务器名称 名称 ;
该服务器名称语句可以用来通知从它正在启动的服务器的名称的客户。Name应该是将提供给客户端的名称。

该站点的选择空间声明
站点选项空间 名称 ;
该站点的选择空间语句可用于从将采取什么选择空间站点本地选项来确定。这可以以与vendor-option-space语句大致相同的方式使用。DHCP 中的站点本地选项是那些数字代码大于 224 的选项。这些选项旨在用于特定于站点的用途,但经常被包含 DHCP 客户端的嵌入式硬件供应商使用。由于特定于站点的选项是临时分配的,因此一个供应商的 DHCP 客户端很可能出于不同的目的使用另一供应商的客户端使用的相同选项代码。所述站点的选择空间选项可以用于分配一组不同的对于每个这样的供应商的站点特定的选项,使用条件的评估(见dhcp-eval (5)了解详情)。

在藏匿代理选项声明
stash-agent-options 标志;
如果给定客户端的stash-agent-options参数为真,则当客户端处于 SELECTING 状态时,服务器将记录在客户端初始 DHCPREQUEST 消息期间发送的中继代理信息选项,并表现得好像这些选项包含在所有后续在 RENEWING 状态下发送的 DHCPREQUEST 消息。这解决了中继代理信息选项的问题,即它们通常不会出现在处于 RENEWING 状态的客户端发送的 DHCPREQUEST 消息中,因为此类消息直接单播到服务器,而不是通过中继代理发送。

该更新冲突检测声明
更新冲突检测 标志;
如果update-conflict-detection参数为true,则服务器将执行标准的DHCID 多客户端单名称冲突检测。如果该参数已设置为 false,则服务器将跳过此检查,而只需拆除任何先前的绑定即可毫无疑问地安装新的绑定。默认值为真。

该更新优化声明
更新优化 标志;
如果给定客户端的update-optimization参数为 false,则每次客户端续订其租约时,服务器都会尝试为该客户端进行 DNS 更新,而不是仅在看起来有必要时才尝试进行更新。这将允许 DNS 更容易地从数据库不一致中修复,但代价是 DHCP 服务器必须执行更多的 DNS 更新。我们建议启用此选项,这是默认设置。此选项仅影响临时 DNS 更新方案的行为,对 ad-hoc DNS 更新方案没有影响。如果未指定此参数,或者为 true,则 DHCP 服务器只会在客户端信息更改、客户端获得不同的租用或客户端的租用到期时更新。

该更新静态租赁声明
更新静态租赁 标志;
该更新静态租赁标志,如果启用,使DHCP服务器做客户端的DNS更新,即使这些客户端被分配使用的IP地址固定地址声明-也就是说,客户端被赋予一种静态分配。这仅适用于临时DNS 更新方案。不推荐,因为DHCP服务器无法判断更新已经完成,因此不会在不使用的情况下删除该记录。此外,每次客户端续订租约时,服务器都必须尝试更新,这在对 DHCP 服务器有很高要求的环境中可能会对性能产生重大影响。

在使用宿主DECL-名称声明
使用-host-decl-names 标志;
如果use-host-decl-names参数在给定范围内为真,则对于该范围内的每个主机声明,为主机声明提供的名称将作为其主机名提供给客户端。所以,例如,

组 {
  使用-host-decl-names on; 

 主机乔 {
    硬件以太网 08:00:2b:4c:29:32; 
    固定地址 joe.fugue.com; 
  } 
}

相当于

 主机乔{
    硬件以太网08:00:2b:4c:29:32; 
    固定地址 joe.fugue.com; 
    选项主机名“joe”;
  }

主机声明中的选项主机名语句将覆盖主机声明中名称的使用。
这里需要注意的是,大多数 DHCP 客户端完全忽略了 DHCP 服务器发送的主机名选项,并且没有办法配置它们不这样做。因此,您通常可以选择没有任何主机名到客户端将识别的客户端 IP 地址映射,或者进行 DNS 更新。描述如何做出此决定超出了本文档的范围。

在使用租赁,地址,对于默认路由声明
use-lease-addr-for-default-route 标志;
如果use-lease-addr-for-default-route参数在给定范围内为真,则不是发送路由器选项中指定的值(或根本不发送值),而是分配的租用的 IP 地址是发送给客户。这可能会导致 Win95 机器对所有 IP 地址进行 ARP,如果您的路由器配置为代理 ARP,这会很有帮助。不推荐使用此功能,因为它不适用于许多 DHCP 客户端。

在供应商的选择空间声明
供应商选项空间 字符串;
在供应商的选择空间参数从什么考虑选择空间供应商的选择决定。此配置参数的使用在dhcp-options (5)手册页的VENDOR ENCAPSULATED OPTIONS部分中进行了说明。

使用表达式设置参数值
有时,能够根据客户端发送的某个值设置 DHCP 服务器参数的值会很有帮助。为此,您可以使用表达式求值。该DHCP-EVAL(5)手册页介绍如何编写表达式。要将评估结果分配给选项,请按如下方式定义选项:

我的参数 = 表达式 ;
例如:
ddns-hostname = binary-to-ascii (16, 8, “-”,
substring (hardware, 1, 6));
保留租约
将单个地址大致永久分配给单个客户端通常很有用。带有固定地址子句的Host 语句在一定程度上是为了达到这个目的,但由于 host 语句旨在近似于“静态配置”,因此它们无法在许多其他服务器服务中被引用,例如动态 DNS、故障转移、“关于事件”等等。

如果标准动态租用,如任何范围语句,被标记为“保留”,那么服务器只会将此租用分配给它所标识的客户端(通过客户端标识符或硬件地址)。

在实践中,这意味着租约遵循正常状态引擎,当客户端绑定到它、到期或被释放时进入 ACTIVE 状态,并且在这些事件期间通常会提供的任何事件或服务都被正常处理,就像任何其他动态租约。唯一的区别是故障转移服务器在进入 FREE 或 BACKUP 状态时将保留的租用视为特殊的 - 每个服务器将租用应用到它可能分配的状态 - 并且租用不会放在队列中以分配给其他客户端。相反,它们可能只能通过客户端身份“找到”。结果是租约只提供给返回的客户。

可能应该注意确保客户端在它所标识的给定子网中只有一个租用。

可以通过 OMAPI 或通过“infinite-is-reserved”配置选项(如果这适用于您的环境和客户端组合)将租用设置为“保留”。

还应该注意的是,标记为“reserved”的租约与标记为“bootp”的租约的处理方式相同。

参考:选项声明
DHCP 选项语句记录在dhcp-options (5)手册页中。

参考:表达式
DHCP 选项语句和其他地方使用的表达式记录在dhcp-eval (5)手册页中。

也可以看看
dhcpd (8)、 dhcpd.leases (5)、 dhcp-options (5)、 dhcp-eval (5)、RFC2132、RFC2131。

作者
dhcpd.conf (5)是由 Ted Lemon 根据与 Vixie Labs 签订的合同编写的。该项目的资金由 Internet Systems Consortium 提供。有关 Internet Systems Consortium 的信息可以在https://www.isc.org上找到。
引用者
dhclient.conf (5), dhclient.leases (5), dhcpctl (3), dhcpd-eval (5), dhcpd-options (5), ltsp-config (8), omapi (3), omshell (1)
转载自https://linux.die.net/man/5/dhcpd.conf如有侵权联系作者删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值