Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

14.2. 配置 DHCP 服务器

dhcp 软件包包含一个互联网系统 Consortium(ISC )D 服务器。以 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-版本;/dhcpd.conf.example 中找到。您应该使用此文件来帮助您配置 /etc/dhcp/dhcpd.conf,详情如下。
DHCP 还使用文件 /var/lib/dhcpd/dhcpd.leases 来存储客户端租期数据库。如需更多信息,请参阅 第 14.2.2 节 “租期数据库”

14.2.1. 配置文件

配置 DHCP 服务器的第一步是创建 配置文件,该文件存储客户端的网络信息。使用此文件声明客户端系统的选项。
配置文件可以包含额外的标签页或空白行,以方便格式化。关键字不区分大小写,以哈希符号(#)开头的行被视为注释。
配置文件中有两种语句类型:
  • 参数 - 说明如何执行任务,无论是执行任务,还是要将哪些网络配置选项发送到客户端。
  • 声明 - 描述网络拓扑、描述客户端、为客户端提供地址,或者对一组声明应用一组参数。
以 keyword 选项开头的参数称为选项。这些选项控制 DHCP 选项;而参数配置不是可选的值或控制 DHCP 服务器的行为方式。
在大括号({ })括起的部分之前声明的参数(包括选项)被视为全局参数。全局参数应用到它下面的所有部分。
重要
如果配置文件已更改,则更改不会生效,直到 DHCP 守护进程使用 systemctl restart dhcpd 命令重启为止。
注意
使用omshell命令不更改 DHCP 配置文件和每次重新启动服务,而是提供了一种交互式方式来连接、查询和更改 DHCP 服务器的配置。通过使用omshell,可在服务器运行期间进行所有更改。有关omshell的详情请参考 theomshell man page。
例 14.1 “子网声明” 中,路由器、subnet-mask、domain-search、domain-name-serverstime-offset 选项都会用于它下面声明的任何主机语句
对于将提供服务的每个子网,对于 DHCP 服务器连接到的每个子网,必须有一个子网声明,该公告告诉 DHCP 守护进程如何识别某个地址在该子网上。每个子网都需要子网声明,即使没有地址动态分配到该子网。
在本例中,子网中的每个 DHCP 客户端都有全局选项,并且声明了一个范围。为客户端分配 范围内的 IP 地址

例 14.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 服务器,请从 例 14.2 “范围参数” 修改示例值。它为客户端声明默认的租用时间、最长租用时间和网络配置值。 本例将范围 192.168.1.10 和 192.168.1. 100 范围 分配给客户端系统

例 14.2. 范围参数

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 地址,请在主机声明中使用硬件以太网 参数。如 例 14.3 “使用 DHCP 的静态 IP 地址” 中所示,主机 apex 声明指定 MAC 地址为 00:A0:78:8E:9E:AA 的网络接口卡始终接收 IP 地址 192.168.1.4
请注意,您也可以使用可选参数 host-name 为客户端分配主机名。

例 14.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 支持为 InfiniBand IPoIB 接口分配静态 IP 地址。但是,由于这些接口没有普通的硬件以太网地址,因此必须使用不同的方法来为 IPoIB 接口指定唯一标识符。标准是使用选项 dhcp-client-identifier= 构造来指定 IPoIB 接口的 dhcp-client-identifier 字段。DHCP 服务器主机结构最多支持一个硬件以太网和每个主机段一个 dhcp-client-identifier 条目。但是,可能有多个固定地址条目,DHCP 服务器将自动使用适合 DHCP 请求所接收网络的地址来响应。

例 14.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,您通常可以使用 prefix ff:00:00:00:02:00:00:02:c9:00,然后添加 IPoIB 接口的最后 8 字节(这也会是 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 字段。然后,硬件类型 255 与 ID 的 initial ff: 对应,而 ID 的其余部分将完全按照需要显示在 DHCP 配置文件中进行引用。
共享同一物理网络的所有子网都应在共享网络声明中声明,如 例 14.5 “shared-network lack” 所示。shared-network 中的参数以及括起的子网声明之外的参数被视为全局参数。分配给 shared-network 的名称必须是网络的描述性标题,例如使用标题 test-lab 来描述测试实验环境中的所有子网。

例 14.5. shared-network lack

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;
    }
}
例 14.6 “grouprigger” 所示,组声明用于将全局参数应用到一组声明。例如,可以对共享网络、子网和主机进行分组。

例 14.6. grouprigger

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_numberDHCP 版本号。
有关选项语句的完整列表及其作用,请参阅 dhcp-options(5) man page。