任何 DHCP 系统的核心都是动态主机配置协议守护程序。根据配置文件 /etc/dhcpd.conf 中定义的设置,此服务器租出地址并监视它们的使用。通过更改此文件中的参数和值,系统管理员可以在许多方面影响程序的行为。让我们看一下例 34.1 “配置文件 /etc/dhcpd.conf”中的基本示例 /etc/dhcpd.conf 文件。
例 34.1. 配置文件 /etc/dhcpd.conf
default-lease-time 600; # 10 minutes
max-lease-time 7200; # 2 hours
option domain-name "cosmos.all";
option domain-name-servers 192.168.1.1, 192.168.1.2;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
subnet 192.168.1.0 netmask 255.255.255.0
{
range 192.168.1.10 192.168.1.20;
range 192.168.1.100 192.168.1.200;
}
这个简单的配置文件足以使 DHCP 服务器在网络中指派 IP 地址。确保在每行末尾插入一个分号,否则将不能启动 dhcpd。
示例文件可以分为三部分。第一部分定义了将 IP 地址租出给请求它的客户机的默认秒数 (default-lease-time),超过此时间就应申请续期。此部分还包含一个最大期限语句,在此期限内计算机可以保留 DHCP 服务器指派的 IP 地址而无需申请续期 (max-lease-time)。
第二部分在全局级别上定义了一些基本网络参数:
option domain-name 行用于定义网络的默认域。
option domain-name-servers 项用于指定 DNS 服务器将 IP 地址解析为主机名(反之亦然)时使用的值(最多 3 个)。理想情况下,应在设置 DHCP 之前在您的计算机上或网络中的其他位置配置一个名称服务器。这个名称服务器应为每个动态地址定义一个主机名(反之亦然)。要了解如何配置您自己的名称服务器,请参见第 33 章 域名系统。
行 option broadcast-address 定义了请求客户机应该使用的广播地址。
option routers 用于设置服务器在无法将数据包发送到本地网络上的主机时应将其发送到的位置(根据所提供的源和目标主机地址以及子网掩码)。在大多数情况下,尤其是在较小的网络中,此路由器与因特网网关完全相同。
option subnet-mask 用于指定为客户机指派的网络掩码。
文件的最后一部分用于定义网络,其中包含子网掩码。最后指定一个地址范围,DHCP 守护程序将使用此范围来向相关的客户机指派 IP 地址。在例 34.1 “配置文件 /etc/dhcpd.conf”中,可以为客户机指派 192.168.1.10 和 192.168.1.20 之间以及 192.168.1.100 和 192.168.1.200 之间的任何地址。
在编辑这几行后,应可以使用命令 rcdhcpd start 来激活 DHCP 守护程序。随后将可以立即使用它。使用命令 rcdhcpd check-syntax 来执行简单的语法检查。如果配置出现意外问题 - 服务器由于错误而中止或在启动时不返回 done - 通过在主系统日志 /var/log/messages 或控制台 10 (Ctrl+Alt+F10) 上查找相关信息,您应能够发现出现的问题。
在默认 SUSE Linux Enterprise 系统上,基于安全原因,将在 chroot 环境中启动 DHCP 守护程序。必须将配置文件复制到 chroot 环境,以便守护程序能够找到它们。通常情况下无需担心这一点,因为命令 rcdhcpd start 会自动复制这些文件。
DHCP 可用来向特定客户机指派预定义的静态地址。显式指派的地址始终优先于来自地址池的动态地址。静态地址永远不会像动态地址那样过期。例如,对于动态地址而言,如果没有足够的地址可用,服务器需要在客户机之间重新分发这些地址。
要确定配置有静态地址的客户机,dhcpd 将使用硬件地址,这是一个全局唯一的固定数字代码,其中包含 6 个八进制数对,用于标识所有网络设备(例如 00:00:45:12:EE:F4)。如果将相应的各行(如例 34.2 “配置文件的添加项”中的行)添加到例 34.1 “配置文件 /etc/dhcpd.conf”的配置文件,DHCP 守护程序会将相同的一组数据指派到相应的客户机。
在第 1 行输入相应客户机的名称(hosthostname,在这里是 earth),在第 2 行输入 MAC 地址。在 Linux 主机上,使用命令 ip link show 后跟网络设备(例如 eth0)来查找 MAC 地址。输出应包含如下内容:
link/ether 00:00:45:12:EE:F4
在上面的示例中,具有 MAC 地址为 00:00:45:12:EE:F4 的网卡的客户机获得自动指派的 IP 地址 192.168.1.21 和主机名 earth。虽然也支持在 IBM 系统上常见的 token-ring,但在几乎所有情况下,要输入的硬件类型都是 ethernet,
为了提高安全性,ISC 的 DHCP 服务器的 SUSE Linux Enterprise 版本附带有 Ari Edelkind 编写的非 root/chroot 增补程序。这使得 dhcpd 能够使用用户 ID nobody 来运行,并可以在 chroot 环境 (/var/lib/dhcp) 中运行。要实现这一点,必须使配置文件 dhcpd.conf 位于 /var/lib/dhcp/etc 中。init 脚本在启动时会自动将文件复制到此目录。
通过文件 /etc/sysconfig/dhcpd 中的项来控制与此特性相关的服务器的行为。如果不希望在 chroot 环境中运行 dhcpd,请将 /etc/sysconfig/dhcpd 中的变量 DHCPD_RUN_CHROOTED 设置为 “no”。
为了使 dhcpd 甚至能够解析来自 chroot 环境的主机名,还必须复制其他一些配置文件:
/etc/localtime
/etc/host.conf
/etc/hosts
/etc/resolv.conf
在启动 init 脚本时,将把这些文件复制到 /var/lib/dhcp/etc/。如果通过 /etc/ppp/ip-up 这样的脚本动态修改这些文件,则无论这些文件需要任何更改,都必须同时考虑这些副本。但是,如果配置文件仅指定 IP 地址(而不是主机名),就不需要担心这一点。
如果您的配置中包含应复制到 chroot 环境中的其他文件,请在文件 etc/sysconfig/dhcpd 中的变量 DHCPD_CONF_INCLUDE_FILES 下设置它们。为了确保 DHCP 日志记录功能即使在 syslog-ng 守护程序重启动后也能保持运行,文件 /etc/sysconfig/syslog 中必须有附加条目 SYSLOGD_ADDITIONAL_SOCKET_DHCP。