![dhcpd 如何处理静态 IP 与 DHCP 预留](https://linux22.com/image/680250/dhcpd%20%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E9%9D%99%E6%80%81%20IP%20%E4%B8%8E%20DHCP%20%E9%A2%84%E7%95%99.png)
我们有一台用于 DHCP 的 RHEL 6.7 服务器。我需要澄清当有人想要永久 IP 地址时 dhcpd 如何处理网络寻址。这是我们其中一台服务器的示例配置。我的理解是,有两种方法可以获取它们。DHCP 保留和超出 DHCP 范围的真正静态 IP。
subnet 192.168.100.0 netmask 255.255.255.0 {
option domain-name "domain.net";
option broadcast-address 192.168.100.255;
option routers 192.168.100.1;
# Define the scopes for this DHCP pool
pool {
range 192.168.100.2 192.168.100.200;
# static reserve = 192.168.100.201 - 192.168.100.254
}
host static-custid {
hardware ethernet 00:01:02:03:04:05;
fixed-address 192.168.100.150;
}
host static-custid {
hardware ethernet 00:01:02:03:04:05;
fixed address 192.168.100.201;
}
}
因此,如您所见,我们在 DHCP 范围之外有一个静态保留,在 DHCP 范围之内也有一个。我的理解是,dhcpd 只知道声明池内的那个,因为客户端将使用 DHCP 协议。但我实在找不到人来向我解释为什么我们要为池中未定义的 IP 声明静态保留。dhcpd 是否有可能知道池外的静态保留,并在看到该 mac 地址并且客户端正在使用 DHCP 时为其提供 192.168.100.201?我不认为情况如此,因为所有这些位于池外的静态保留都不在 dhcpd.leases 文件中。
答案1
静态 IP 通常不在池范围之内,因为您不希望将静态 IP 分配给其他主机。只要静态 IP 位于 DCHP 服务器本地(或中继)的 IP 范围内,就可以提供服务。
租约文件记录了池中的哪些地址已分配给主机以及该分配何时到期。这用于确保不会为多个主机分配相同的 IP 地址。存在有效租约并不表示主机当前已连接到网络。由于静态 IP 分配是根据其定义来识别的,因此无需将其记录在租约文件中。
如果租约时间过长,且客户端频繁更换,则可能会在当前只有少数主机连接的情况下耗尽地址。这种情况在热点或访客网络中比在典型的办公网络中更容易发生。
答案2
某些 DHCP 服务器软件在预留方面采取不同的操作方式:
- 有些要求所有保留地址都在动态范围之外但在子网内。
- 有些要求所有保留地址都在动态范围内,然后它知道在动态分配其他主机时不要使用这些地址。
- 有些允许保留地址位于动态范围之内或之外。
阅读手册页对于最常见的 Linux DHCPd,它似乎允许通过使用池选项组合来实施上述任何策略:
- 允许已知客户;
- 拒绝已知客户;
- 允许未知客户;
- 拒绝未知客户;
已知客户端的定义是,在 conf 文件中的某处有一个主机条目。因此,如果您在池中不“允许已知客户端”,则无法在池使用的范围内分配固定地址。
当然,为了使保留的固定地址、动态地址和静态分配的 IP 能够相互通信,它们要么位于同一 LAN 上的同一子网中,要么在它们的子网之间具有所需的路由。
您可以同时执行这两项操作,在 DHCPd 中保留 IP 并在实际主机上设置静态 IP。这仅仅意味着 DHCP 服务器永远不会被询问使用哪个 IP,主机只需使用它即可。这样做可以帮助自行记录 IP 地址的使用情况,因为它可以为所有设备拥有的 IP 提供一个相当集中的存储区域。尽管像任何记录技术一样,它需要维护,否则就毫无用处。除了在 DHCPd 服务器中记录主机 IP,您还可以使用 DNS 服务器,或者您可以有单独的记录。