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.5. Shared-network 声明
shared-network name {
option domain-search "test.redhat.com";
option domain-name-servers ns1.redhat.com, ns2.redhat.com;
option routers 192.168.0.254;
#more parameters for EXAMPLE shared-network
subnet 192.168.1.0 netmask 255.255.252.0 {
#parameters for subnet
range 192.168.1.1 192.168.1.254;
}
subnet 192.168.2.0 netmask 255.255.252.0 {
#parameters for subnet
range 192.168.2.1 192.168.2.254;
}
}
如 例 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。