我在 centOS 6.5 上使用 DHCP 服务器,我为特定的 MAC 地址保留了一个 IP
我的配置文件/etc/dhcp/dhcpd.conf
option domain-name-servers 192.168.1.5, 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.90 192.168.1.250;
option routers 192.168.1.1;
}
host specialPC {
hardware ethernet 00:16:3e:8a:30:f1;
fixed-address 192.168.1.90;
}
我的问题当specialPC
关闭时,DHCP 服务器使用它的 IP“192.168.1.90”我的意思是如果设备连接到网络,DHCP 服务器有时会将保留的 IP“192.168.1.90”提供给该设备,当这种情况发生时,specialPC
启动时它无法从 DHCP 获取其 IP。
这正常吗?我觉得有点不对劲。
答案1
您所看到的行为是预期的。
声明subnet
及其range
指定了 DHCP 服务器可以随意处理的范围。请参阅文档,第 21 页,子网。
声明host
指定应具有特定设置(在本例中为 IP 地址)的主机。
简单的解决方法是更改动态范围或 IP 地址,使specialPC
它们不重叠。将范围的起始更改为 .91 而不是 .90 应该可以很好地完成此操作,并防止发生冲突。
我相信,但是在文档中找不到这一点,您还可以将host
声明放在声明内部subnet
,这应该可以防止冲突。
答案2
我不同意 Michael Kjörling 的观点。dhcpd.conf 文件的 Linux 手册明确指出:
预留租约
通常,将单个地址永久分配给单个客户端很有用。带有固定地址子句的主机语句在一定程度上可以实现此目的,但由于主机语句旨在近似“静态配置”,因此它们无法在其他服务器服务(如动态 DNS、故障转移、“事件”等)中引用。
如果标准动态租约(如来自任何范围语句)被标记为“保留”,则服务器将仅将此租约分配给其所标识的客户端(无论是通过客户端标识符还是硬件地址)。
实际上,这意味着租约遵循正常状态引擎,在客户端绑定、到期或释放时进入 ACTIVE 状态,并且这些事件期间通常会提供的任何事件或服务都会像任何其他动态租约一样正常处理。唯一的区别是,故障转移服务器在进入 FREE 或 BACKUP 状态时将保留的租约视为特殊租约 - 每个服务器将租约应用到它可以分配的状态 - 并且租约不会放在队列中以分配给其他客户端。相反,它们只能通过客户端身份“找到”。结果是租约只提供给返回的客户端。
重点在最后,我再重复一遍:
...租约不会被放入队列中以分配给其他客户端。相反,它们只能通过客户端身份“找到”。结果是租约仅提供给返回的客户端。
因此,我认为 motaz 所描述的情况确实存在问题,正如他在对 Michael Kjörling 的回答的评论中所说的那样。根据我的经验,我有几台电脑,其保留地址在租约范围内,但我从未遇到过 motaz 所谴责的这些问题。
因此,现在我给 motaz 的建议是:
添加此行
infinite-is-reserved on;
到配置文件;
将您的主机声明更改为
host SpecialPC { hardware ethernet 00:16:3e:8a:30:f1; fixed-address 192.168.1.90; min-lease-time 2147483647 ; max-lease-time 2147483647 ; }
这只是遵循上述手册,其中指出:
无限保留声明
无限保留标志;
ISC DHCP 现在支持“保留”租约。请参阅下面有关保留租约的部分。如果此标志处于打开状态,服务器将自动保留分配给请求无限(0xffffffff)租约时间的客户端的租约。
默认是关闭的。