Show Table of Contents
10.2. 配置 DHCP 服务器
dhcp 软件包包含互联网系统联盟(ISC)
DHCP 服务器。请作为 root 安装该软件包:
~]# yum install dhcp
安装 dhcp 软件包可生成文件
/etc/dhcp/dhcpd.conf,该文件基本是一个空白配置文件。请作为 root 运行以下命令:
~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
可在
/usr/share/doc/dhcp-version;/dhcpd.conf.example 找到示例配置文件。使用这个文件可帮助您配置 /etc/dhcp/dhcpd.conf,如下所示。
10.2.1. 配置文件
配置
DHCP 服务器的第一步是创建保存客户端网络信息的配置文件。使用这个文件向客户端系统声明选项。
该配置文件可包含附加标签或空白行以方便格式化。关键词区分大小写,同时将以井号(
#)开始的行视为注释。
配置文件中有两类语句:
- 参数 -- 说明如何执行任务,是否执行任务或向该客户端发送什么网络配置选项。
- 声明 -- 描述网络拓扑,描述客户端,提供客户端 IP 地址,或在一组声明中应用一组参数。
以关键字选项开始的参数请参考 选项。这些选项控制
DHCP 选项,必须为这些参数配置参数值,或控制 DHCP 服务器的行为。
大括号(
{ })前面一部分的参数(包括选项)是全局参数。全局参数适用于其后的所有内容。
重要
如果更改配置文件,更改的部分要在使用
systemctl restart dhcpd 重启 DHCP 守护进程后方可生效。
注意
与其每次更改
DHCP 配置文件并重启该服务,不如使用 omshell 命令提供一个互动的方法连接、查询并更改 DHCP 服务器的配置。使用 omshell 可在服务器运行过程中进行所有更改。有关 omshell 的详情请查看 omshell man page。
在 例 10.1 “子网声明” 中,可在下述
host 语句中使用以下routers、subnet-mask、domain-search、domain-name-servers 和 time-offset 选项。
对所有提供的子网及连接到
DHCP 服务器的所有子网,必须有一个 subnet 声明,该声明告知 DHCP 守护进程如何识别该子网中的地址。即使没有动态为那个子网分配任何地址,每个子网也都需要有一个 subnet 声明。
在这个示例中,子网中的每个
DHCP 客户端都有全局选项及一个声明的 range。会为这些客户端分配一个 range 范围内的 IP 地址。
例 10.1. 子网声明
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option domain-search "example.com";
option domain-name-servers 192.168.1.1;
option time-offset -18000; # Eastern Standard Time
range 192.168.1.10 192.168.1.100;
}
要配置一个为子网中的某个系统动态租用
IP 地址的 DHCP 服务器,请修改 例 10.2 “Range 参数” 中的示例值。它会说明客户端的默认租用时间、最长租用时间及网络配置值。这个示例为客户的系统分配 range 范围内的 IP 地址 192.168.1.10 和 192.168.1.100。
例 10.2. Range 参数
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-search "example.com";
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
}
要根据网卡的 MAC 地址为客户端分配
IP 地址,请在 host 声明中使用 hardware ethernet 参数。如 例 10.3 “使用 DHCP 的静态 IP 地址” 所示,host apex 声明指定使用 MAC 地址 00:A0:78:8E:9E:AA 的网卡永远接收 IP 地址 192.168.1.4。
注:还可以使用自选参数
host-name 为客户端分配主机名。
例 10.3. 使用 DHCP 的静态 IP 地址
host apex {
option host-name "apex.example.com";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.1.4;
}
Red Hat Enterprise Linux 7 支持为 InfiniBank IPoIB 接口分配静态
IP 地址。但因为这些接口没有正常的硬件以太网地址,因此必须使用不同的方法为 IPoIB 接口指定唯一识别符。该标准是使用选项 dhcp-client-identifier= 结构指定 IPoIB 接口的 dhcp-client-identifier 字段。DHCP 服务器主机架构最多支持一个硬件以太网,在每个主机段中支持一个 dhcp-client-identifier 条目。但可能有多个固定地址条目,同时 DHCP 服务器会在接收 DHCP 请求后自动使用适用于该网络的地址响应。
例 10.4. 使用 DHCP 在多个接口中使用静态 IP 地址
在使用复杂配置的机器中,例如:有两个 InfiniBand 接口,且每个物理接口中都有
P_Key 接口,外加一个以太网连接,则可在配置时使用以下静态 IP 架构:
Host apex.0 {
option host-name “apex.example.com”;
hardware ethernet 00:A0:78:8E:9E:AA;
option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:03:00:31:7b:11;
fixed-address 172.31.0.50,172.31.2.50,172.31.1.50,172.31.3.50;
}
host apex.1 {
option host-name “apex.example.com”;
hardware ethernet 00:A0:78:8E:9E:AB;
option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:03:00:31:7b:12;
fixed-address 172.31.0.50,172.31.2.50,172.31.1.50,172.31.3.50;
}
要为您的设备找到正确的
dhcp-client-identifier,通常可使用前缀 ff:00:00:00:00:00:02:00:00:02:c9:00,然后在最后添加 8 字节 IPoIB 接口(恰好是 IPoIB 接口所在 InfiniBand 端口的 8 字节 GUID)。在有些旧的控制器中,这个前缀是错误的。如果出现那种情况,建议您在 DHCP 服务器中使用 tcpdump 捕获传入 IPoIB DHCP 请求,并从中获取正确的 dhcp-client-identifier。例如:
]$ tcpdump -vv -i mlx4_ib0
tcpdump: listening on mlx4_ib0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
23:42:44.131447 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
0.0.0.0.bootpc > 255.255.255.255.bootps: [udp sum ok] BOOTP/DHCP, Request, length 300, htype 32, hlen 0, xid 0x975cb024, Flags [Broadcast] (0x8000)
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Discover
Hostname Option 12, length 10: "rdma-qe-03"
Parameter-Request Option 55, length 18:
Subnet-Mask, BR, Time-Zone, Classless-Static-Route
Domain-Name, Domain-Name-Server, Hostname, YD
YS, NTP, MTU, Option 119
Default-Gateway, Classless-Static-Route, Classless-Static-Route-Microsoft, Static-Route
Option 252, NTP
Client-ID Option 61, length 20: hardware-type 255, 00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:02:00:21:ac:c1
上述转储显示了 Client-ID 字段。hardware-type 255 与 ID 起始的 ff: 对应,然后将 ID 的剩余部分括起,因为要在 DHCP 配置文件中有这些内容。
如 例 10.5 “Shared-network 声明” 所示,应在
shared-network 声明中宣布共享同一物理网络的所有子网。shared-network 中的参数(未包含在子网声明中的除外)都应被视为全局参数。为 shared-network 分配的名称必须可描述该网络,比如使用 “test-lab” 描述所有 test lab 环境中的所有子网。
如 例 10.6 “组声明” 所示,
group 声明是用来在一组声明中应用全局参数。例如:共享网络、子网及主机都可分组。
例 10.6. 组声明
group {
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option domain-search "example.com";
option domain-name-servers 192.168.1.1;
option time-offset -18000; # Eastern Standard Time
host apex {
option host-name "apex.example.com";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.1.4;
}
host raleigh {
option host-name "raleigh.example.com";
hardware ethernet 00:A1:DD:74:C3:F2;
fixed-address 192.168.1.6;
}
}注意
可参照提供的示例配置文件,在其中添加自定义配置选项。请作为
root 使用以下命令将这个文件复制到正确位置:
~]# cp /usr/share/doc/dhcp-version_number/dhcpd.conf.example /etc/dhcp/dhcpd.conf
其中 version_number 是
DHCP 版本号。
有关选项语句的完整列表及其功能,请查看
dhcp-options(5) man page。
10.2.2. 租期数据库
DHCP 服务器中,使用文件 /var/lib/dhcpd/dhcpd.leases 保存 DHCP 客户端租用数据库。请勿更改这个文件。该租用数据库会自动保存每个最近分配给 IP 地址的 DHCP 租用信息。该信息包括租期、分配 IP 地址的对象、租用起始及终止日期、以及用来检索租用信息的网卡 MAC 地址。
租期数据库中所用的时间是格林威治标准时间(GMT),不是本地时间。
会经常重新生成这个租期数据库以免其过于庞大。首先,所有已知租期都保存在临时租期数据库中。将
dhcpd.leases 文件重命名为 dhcpd.leases~,并将临时租期数据库写入 dhcpd.leases。
在将租用数据库重新命名为备份文件后到写入新文件前,
DHCP 守护进程可被杀死,或者系统可能会崩溃。如果出现这种情况,dhcpd.leases 文件就不存在,但要求启动该服务。请勿创建新的租用文件。如果您这样做,就会丢失所有旧的租用信息,从而造成巨大影响。正确的解决方法是将 dhcpd.leases~ 备份文件重命名为 dhcpd.leases,然后重启该守护进程。
10.2.3. 启动和停止服务器
重要
首次启动
DHCP 服务器时,如果没有 dhcpd.leases 文件就会失败。如果没有该文件,可使用命令 touch /var/lib/dhcpd/dhcpd.leases 生成该文件。如果同一服务器还作为 DNS 服务器运行 BIND,那么就不需要执行这一步操作,因为 named 服务会自动检查 dhcpd.leases 文件。
请勿在之前运行的系统中创建新的租用文件。如果这样做,就会丢失所有旧的租用信息,造成很多问题。正确的解决方法是将
dhcpd.leases~ 备份文件重命名为 dhcpd.leases,然后重启该守护进程。
请使用以下命令启动
DHCP 服务:
systemctl start dhcpd.service
请使用以下命令停止
DHCP 服务器:
systemctl stop dhcpd.service
默认情况下,
DHCP 服务不在引导时启动。有关如何将该守护进程配置为在引导时自动启动的信息,请查看 《Red Hat Enterprise Linux 7 系统管理员指南》。
如果在该系统中添加一个以上网络接口,但
DHCP 只应侦听其中一个接口的 DHCP 请求,请将 DHCP 配置为只侦听那个设备。DHCP 守护进程将只侦听可在 /etc/dhcp/dhcpd.conf 文件的子网声明中找到的接口。
这对使用两个网卡的防火墙机器有帮助。可将一个网卡配置为
DHCP 客户端,检索互联网 IP 地址。将另一个网卡作为 DHCP 服务器用于防火墙保护下的内部网络。只指定连接到内部网络的网卡,让系统更安全,因为用户无法通过互联网连接到该守护进程。
要指定命令行选项,请作为
root 用户复制、然后编辑 dhcpd.service 文件。例如:
~]#编辑 [Service] 部分中的内容:cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/~]#vi /etc/systemd/system/dhcpd.service
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid your_interface_name(s),然后作为
root 用户重启该服务:
~]#systemctl --system daemon-reload~]#systemctl restart dhcpd
可将命令行选项附加到
/etc/systemd/system/dhcpd.service 文件 [Service] 部分的 ExecStart=/usr/sbin/dhcpd 命令中。这些选项包括:
-p portnum— 指定 UDP 端口号,dhcpd应侦听该端口。默认端口为 67。DHCP服务器将响应通过大于指定 UDP 端口号的端口传送到DHCP客户端。例如:如果默认端口为 67,则该服务器应在端口 67 侦听请求,并通过端口 68 为客户端提供响应。如果在此指定端口,同时使用DHCP中继代理,则必须为DHCP中继代理指定应侦听同一端口。详情请查看 第 10.3 节 “DHCP 中继代理程序” 。-f-- 将该守护进程作为前端进程运行。这大多数是用于 debug。-d— 在DHCP服务器守护进程日志中记录标准错误描述符。这大多用于 debug。如果未指定,则会在/var/log/messages中记录日志。-cf filename— 指定配置文件位置。默认位置为/etc/dhcp/dhcpd.conf。-lf filename— 指定租用数据库文件位置。如果已有租用数据库文件,关键是每次DHCP服务启动时使用同一文件。强烈建议只在非产品机器中进行 debug 时使用这个选项。默认位置为/var/lib/dhcpd/dhcpd.leases。-q-- 启动该守护进程时不要输出完整版权信息。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.