10.4. 配置 DHCP 服务器

多主机 DHCP 服务器可提供多个网络,即多个子网。这些小节中的示例详细论述了如何将 DHCP 配置为提供多个网络,选择要侦听的网络接口,以及如何为在网络间移动的系统定义网络设置。
进行修改前,请备份现有 /etc/dhcp/dhcpd.conf 文件。
DHCP 守护进程只侦听它能够在 /etc/dhcp/dhcpd.conf 文件中找到子网声明的网络。
下面是一个基本 /etc/dhcp/dhcpd.conf 文件,适用于有两个网络接口的服务器,接口 eth0 用于 10.0.0.0/24 网络,接口 eth1 用于 172.16.0.0/24 网络。多 subnet 声明可让您为多个网络定义不同的设置:
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
	option subnet-mask 255.255.255.0;
	option routers 10.0.0.1;
	range 10.0.0.5 10.0.0.15;
}
subnet 172.16.0.0 netmask 255.255.255.0 {
	option subnet-mask 255.255.255.0;
	option routers 172.16.0.1;
	range 172.16.0.5 172.16.0.15;
}
subnet 10.0.0.0 netmask 255.255.255.0;
要求为 DHCP 服务器提供的每个网络提供 subnet 声明。多子网需要多个 subnet 声明。如果 DHCP 服务器不包含处于 subnet 声明中的网络,则 DHCP 服务器不会为那个网络提供服务。
如果只有一个 subnet 声明,且没有处于那个子网范围中的网络接口,则 DHCP 守护进程会无法启动,并在 /var/log/messages 中记录如下出错信息:
dhcpd: No subnet declaration for eth0 (0.0.0.0).
dhcpd: ** Ignoring requests on eth0.  If this is not what
dhcpd:    you want, please write a subnet declaration
dhcpd:    in your dhcpd.conf file for the network segment
dhcpd:    to which interface eth1 is attached. **
dhcpd:
dhcpd:
dhcpd: Not configured to listen on any interfaces!
option subnet-mask 255.255.255.0;
option subnet-mask 选项定义子网掩码,并覆盖 subnet 声明中的 netmask 值。在简单示例中,子网及子网掩码值相同。
option routers 10.0.0.1;
option routers 选项为该子网地定义默认网关。系统访问不同子网中的内部网络及外部网络时需要这个配置。
range 10.0.0.5 10.0.0.15;
range 选项指定大量可用 IP 地址。可从指定 IP 地址范围中为系统分配一个地址。
详情请查看 dhcpd.conf(5) man page。

10.4.1. 系统配置

做任何改动前,请备份当前的 /etc/sysconfig/dhcpd/etc/dhcp/dhcpd.conf 文件。
为多网络配置单一系统

下面的 /etc/dhcp/dhcpd.conf 示例创建两个子网,并为同一系统配置一个 IP 地址,具体值要看该系统连接的网络:

default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
	option subnet-mask 255.255.255.0;
	option routers 10.0.0.1;
	range 10.0.0.5 10.0.0.15;
}
subnet 172.16.0.0 netmask 255.255.255.0 {
	option subnet-mask 255.255.255.0;
	option routers 172.16.0.1;
	range 172.16.0.5 172.16.0.15;
}
host example0 {
	hardware ethernet 00:1A:6B:6A:2E:0B;
	fixed-address 10.0.0.20;
}
host example1 {
	hardware ethernet 00:1A:6B:6A:2E:0B;
	fixed-address 172.16.0.20;
}
host example0
host 声明定义单一系统的具体参数,比如 IP 地址。要为多台主机配置具体参数,请使用多个 host 声明。
大多数 DHCP 客户端会忽略 host 声明中的名称,因此该名称可以是任意值,只要与其他 host 声明不同即可。要为多个网络配置相同的系统,请在每个 host 声明中使用不同的名称,否则 DHCP 守护进程将无法启动。系统是根据 hardware ethernet 选项识别,而不是 host 声明中的名称识别。
hardware ethernet 00:1A:6B:6A:2E:0B;
hardware ethernet 选项可识别该系统。要找到这个地址,请运行 ip link 命令。
fixed-address 10.0.0.20;
fixed-address 选项会为 hardware ethernet 选项指定的系统分配一个有效 IP 地址。这个地址必须在 range 选项指定的 IP 地址范围以外。
如果 option 语句的结尾处不是分号,则 DHCP 守护进程将无法启动,并在 /var/log/messages 文件中记录出错信息:
/etc/dhcp/dhcpd.conf line 20: semicolon expected.
dhcpd: }
dhcpd: ^
dhcpd: /etc/dhcp/dhcpd.conf line 38: unexpected end of file
dhcpd:
dhcpd: ^
dhcpd: Configuration file errors encountered -- exiting
配置有多个网络接口的系统

下面的 host 声明配置有多个网络接口的单一系统,以便每个接口都使用同样的 IP 地址。这个配置不适用于两个网络接口同时连接到同一网络的情况:

host interface0 {
	hardware ethernet 00:1a:6b:6a:2e:0b;
	fixed-address 10.0.0.18;
}
host interface1 {
	hardware ethernet 00:1A:6B:6A:27:3A;
	fixed-address 10.0.0.18;
}
例如:interface0 是第一个网络接口,interface1 是第二个网络接口。不同的 hardware ethernet 选项会识别每个接口。
如果某个系统连接到另一个网络,并添加更多 host 声明,请记住:
  • 为该主机连接的网络分配一个有效 fixed-address
  • host 声明中为其分配一个区别于其他名称的名字。
如果 host 声明中的名称不是唯一的,则 DHCP 守护进程将无法启动,并在 /var/log/messages 中记录如下出错信息:
dhcpd: /etc/dhcp/dhcpd.conf line 31: host interface0: already exists
dhcpd: }
dhcpd: ^
dhcpd: Configuration file errors encountered -- exiting
这个错误是由于在 /etc/dhcp/dhcpd.conf 中有多个 host interface0 声明造成的。