32 DHCP #
动态主机配置协议 (DHCP) 用于从服务器集中指派网络设置,如此就不必在每个工作站本地配置这些设置。被配置为使用 DHCP 的主机不能控制它自己的静态地址。DHCP 使它能够根据服务器的指示完全且自动地对自身进行配置。如果在客户端使用 NetworkManager,则无需配置客户端。在更改了环境并且一次只能使用一个活动的接口时,它才有用。请勿在运行 DHCP 服务器的机器上使用 NetworkManager。
在 IBM Z 平台上,DHCP 仅在使用 OSA 和 OSA Express 网卡的接口上有效。现在只有这些网卡具有 MAC,因为需要 MAC 来实现 DHCP 自动配置功能。
配置 DHCP 服务器的其中一种方法是,使用网卡的硬件地址(一般应该是固定的)来标识每个客户端,然后在客户端每次连接到服务器时为它提供相同的设置。另一种方法是对 DHCP 进行配置,从为此设置的地址池来为每个相关客户端动态指派地址。在后一种情况下,DHCP 服务器每次在收到客户端请求时都会尝试向它指派相同的地址,即使相隔较长的时间也是如此。只有在网络中包含的客户端数不超过地址数时,它才生效。
DHCP 简化了系统管理员的工作。与地址和网络配置相关的任何更改(甚至是较大的更改)一般都可以通过编辑服务器的配置文件来集中完成。这比重配置众多工作站要方便得多。此外,还可以更方便地将计算机(尤其是新计算机)集成到网络中,因为现在可以从池中为它们指派 IP 地址。如果经常在不同的网络中使用便携式计算机,则从 DHCP 服务器检索适当的网络设置特别有用。
在本章中,DHCP 服务器将在工作站所在的子网内运行,即 192.168.2.0/24
(网关为 192.168.2.1
)。它具有固定的 IP 地址 192.168.2.254
,并提供两个地址范围:192.168.2.10
至 192.168.2.20
,192.168.2.100
至 192.168.2.200
。
DHCP 服务器不仅提供了 IP 地址和网络掩码,还提供了客户机要使用的主机名、域名、网关和名称服务器地址。此外,DHCP 还允许您集中配置多个参数,例如客户端可以从中巡回检测当前时间的时间服务器,甚至是打印服务器。
32.1 使用 YaST 配置 DHCP 服务器 #
要安装 DHCP 服务器,请启动 YaST 并选择
› 。选择 › ,然后选择 。确认安装相关的包来完成安装进程。可以将 YaST DHCP 模块设置为在本地储存服务器配置(即运行 DHCP 服务器的主机上),或使其配置数据由 LDAP 服务器管理。要使用 LDAP,请在配置 DHCP 服务器前设置 LDAP 环境。
有关 LDAP 的更多信息,请参见第 5 章 “LDAP with 389 Directory Server”。
使用 YaST DHCP 模块 (yast2-dhcp-server
) 可将自己的 DHCP 服务器设置用于本地网络。此模块能以向导模式或专家配置模式运行。
32.1.1 初始配置(向导) #
第一次启动此模块时,向导启动,提示您做出一些有关服务器管理的基本决定。完成此初始设置将生成一个非常基本的服务器配置,此配置可以使服务器在各基本方面正常工作。专家方式可用于处理更高级的配置任务。按如下所示继续:
从该列表中选择 DHCP 服务器应侦听的接口,然后依次单击图 32.1 “DHCP 服务器:卡选择”。
、 。请参见注意:DHCP 和firewalld
请注意,选项SUSE Linux Enterprise Server 15 SP2 中的
(目前)不支持firewalld
。要手动打开 DHCP 端口,请运行tux >
sudo
firewall-cmd --zone=public --permanent --add-service=dhcp
tux >
sudo
firewall-cmd --reload
图 32.1︰ DHCP 服务器:卡选择 #使用此复选框来确定是否由 LDAP 服务器自动储存您的 DHCP 设置。在文本框中,提供 DHCP 服务器应管理的所有客户端的网络细节。这些细节包括域名、时间服务器地址、主名称服务器和二级名称服务器的地址、打印和 WINS 服务器的地址(对于同时包含 Windows 和 Linux 客户端的混合网络)、网关地址和租用时间。请参见图 32.2 “DHCP 服务器:全局设置”。
图 32.2︰ DHCP 服务器:全局设置 #配置如何为客户端指派动态 IP 地址。为此,应首先指定服务器为 DHCP 客户端指派地址时使用的 IP 范围。所有这些地址必须由同一个网络掩码来覆盖。还要指定租用时间,在此期间客户端可以保留它的 IP 地址,而无需请求续期。也可以选择指定最长租用时间,这是服务器为特定客户端保留某个 IP 地址的时间。请参见图 32.3 “DHCP 服务器:动态 DHCP”。
图 32.3︰ DHCP 服务器:动态 DHCP #定义 DHCP 服务器应如何启动。指定 DHCP 服务器是在引导系统时自动启动还是在需要时(例如进行测试时)手动启动。单击图 32.4 “DHCP 服务器:启动”。
以完成对服务器的配置。请参见图 32.4︰ DHCP 服务器:启动 #除了按上文所述方式使用动态 DHCP 之外,您也可以将服务器配置为以准静态方式指派地址。使用窗口下部提供的文本框来指定要以此方式管理的一组客户端。具体地说就是提供客户端的图 32.5 “DHCP 服务器:主机管理”。
和 ,以及 和 (令牌环或以太网)。使用 、 和 来修改在窗口上部显示的客户端列表。请参见图 32.5︰ DHCP 服务器:主机管理 #
32.1.2 DHCP 服务器配置(专家) #
除了前面介绍的配置方法外,还有一种专家配置方式,用于从方方面面精确调整 DHCP 服务器设置。单击图 32.4 “DHCP 服务器:启动”)以启动专家配置。
对话框中的 (参见- Chroot 环境和声明
在第一个对话框中,选择图 32.6 “DHCP 服务器:Chroot Jail 和声明”。选择 后,请定义要添加的声明的类型。使用 ,可查看服务器的日志文件、配置 TSIG 密钥管理以及根据 DHCP 服务器的设置调整防火墙的配置。
,使现有的配置可编辑。DHCP 服务器的行为的一个重要功能就是它能够在 chroot 环境(即 chroot jail)中运行,以便保证服务器主机的安全。如果 DHCP 服务器受到了外部攻击,则攻击者仍将被封锁在 chroot jail 中,从而可阻止其访问系统的其他部分。对话框的下部显示了一个树视图,列出了已经定义的声明。请使用 、 和 来修改它们。如果选择 ,就会进入其他专家对话框。参见图 32.6︰ DHCP 服务器:Chroot Jail 和声明 #- 选择声明类型
DHCP 服务器的图 32.7 “DHCP 服务器:选择声明类型”)。
由若干声明组成。使用此对话框可设置声明类型 、 、 、 、 和 。此示例显示了新子网的选择(请参见图 32.7︰ DHCP 服务器:选择声明类型 #- 子网配置
此对话框用于指定新子网的 IP 地址和网络掩码。在对话框的中部,使用
、 和 修改所选子网的 DHCP 服务器启动选项。要为子网设置动态 DNS,请选择 。图 32.8︰ DHCP 服务器:配置子网 #- TSIG 密钥管理
如果在前面的对话框中选择了配置动态 DNS,现在就可以配置密钥管理来实现安全区域传送。选择图 32.10 “DHCP 服务器:动态 DNS 的接口配置”)。
将进入另一个对话框,在其中可以配置动态 DNS 的接口(请参见图 32.9︰ DHCP 服务器:TSIG 配置 #- 动态 DNS:接口配置
通过选择图 32.8 “DHCP 服务器:配置子网”)。再次选择 将返回最初的专家配置对话框。
,可以为子网激活动态 DNS。完成激活后,请使用下拉框来激活正向和反向区域的 TSIG 密钥,确保为 DNS 和 DHCP 服务器选择相同密钥。使用 ,您可以根据动态 DNS 环境自动更新和调节全局 DHCP 服务器设置。最后需要定义每个动态 DNS 应更新哪些正向和反向区域,同时分别为两个区域指定主名称服务器的名称。选择 返回子网配置对话框(请参见图 32.10︰ DHCP 服务器:动态 DNS 的接口配置 #- 网络接口配置
要定义 DHCP 服务器应侦听的接口并调整防火墙配置,请从专家配置对话框中选择
› 。从所显示的接口列表中,选择一个或多个应由 DHCP 服务器处理的接口。如果希望使所有子网中的客户端都能够与服务器通讯,同时如果服务器主机也运行防火墙,则相应调整防火墙。注意:DHCP 和firewalld
请注意,选项SUSE Linux Enterprise Server 15 SP2 中的
(目前)不支持firewalld
。要手动打开 DHCP 端口,请运行tux >
sudo
firewall-cmd --zone=public --permanent --add-service=dhcp
tux >
sudo
firewall-cmd --reload
图 32.11︰ DHCP 服务器:网络接口和防火墙 #
在完成所有配置步骤后,选择
关闭对话框。服务器现在将以新配置启动。32.2 DHCP 软件包 #
DHCP 服务器和 DHCP 客户端都适用于 SUSE Linux Enterprise Server。可用的 DHCP 服务器是 dhcpd
(由因特网系统联盟发布)。客户端提供了 dhcp-client
(ISC 中也有提供)及 wicked
包附带的工具。
默认情况下,wicked
工具会连同 wickedd-dhcp4
和 wickedd-dhcp6
服务一起安装。系统每次引导时,会自动启动它们,以监视 DHCP 服务器。它们不需要配置文件来执行操作,可以直接用在大多数标准设置中。对于更复杂的情况,请使用 ISC dhcp-client
,它是通过配置文件 /etc/dhclient.conf
和 /etc/dhclient6.conf
来控制的。
32.3 DHCP 服务器 dhcpd #
任何 DHCP 系统的核心都是动态主机配置协议守护程序。根据配置文件 /etc/dhcpd.conf
中定义的设置,此服务器租出地址并监视它们的使用。通过更改此文件中的参数和值,系统管理员可以在许多方面影响程序的行为。让我们看一下例 32.1 “配置文件 /etc/dhcpd.conf”中的基本示例 /etc/dhcpd.conf
文件。
default-lease-time 600; # 10 minutes max-lease-time 7200; # 2 hours option domain-name "example.com"; option domain-name-servers 192.168.1.116; option broadcast-address 192.168.2.255; option routers 192.168.2.1; option subnet-mask 255.255.255.0; subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.10 192.168.2.20; range 192.168.2.100 192.168.2.200; }
这个简单的配置文件足以使 DHCP 服务器在网络中指派 IP 地址。确保在每行末尾插入一个分号,否则将不能启动 dhcpd。
示例文件可以分为三部分。第一部分定义了将 IP 地址租出给请求它的客户端的默认秒数 (default-lease-time
),超过此时间就应申请续期。此部分还包含一个最大期限语句,在此期限内计算机可以保留 DHCP 服务器指派的 IP 地址而无需申请续期 (max-lease-time
)。
第二部分在全局级别上定义了一些基本网络参数:
option domain-name
行用于定义网络的默认域。使用
option domain-name-servers
项,最多可指定三个 DNS 服务器值,用来将 IP 地址解析为主机名,或将主机名解析为 IP 地址。理想情况下,应在设置 DHCP 之前在您的计算机上或网络中的其他位置配置一个名称服务器。这个名称服务器应为每个动态地址定义一个主机名(反之亦然)。要了解如何配置您自己的名称服务器,请参见第 31 章 “域名系统”。行
option broadcast-address
定义了请求客户端应该使用的广播地址。option routers
用于设置服务器在无法将数据包发送到本地网络上的主机时应将其发送到的位置(根据所提供的源和目标主机地址以及子网掩码)。通常情况下,尤其是在较小的网络中,此路由器与因特网网关完全相同。option subnet-mask
用于指定为客户端指派的网络掩码。
文件的最后一部分用于定义网络,其中包含子网掩码。最后指定一个地址范围,DHCP 守护程序将使用此范围来向相关的客户端指派 IP 地址。在例 32.1 “配置文件 /etc/dhcpd.conf”中,可以为客户端分配 192.168.2.10
到 192.168.2.20
之间或 192.168.2.100
到 192.168.2.200
之间的任何地址。
编辑这些行后,便可以使用命令 systemctl start dhcpd
来激活 DHCP 守护程序。随后将可以立即使用它。使用命令 rcdhcpd
check-syntax
来执行简单的语法检查。如果配置时出现任何意外问题(例如服务器由于错误而中止或在启动时不返回 done
),您可以使用命令 journalctl
查询主系统日志中的信息,找出问题所在(有关更多信息,请参见第 17 章 “journalctl
:查询 systemd
日记”)。
在默认的 SUSE Linux Enterprise Server 系统上,出于安全考虑,将在 chroot 环境中启动 DHCP 守护程序。必须将配置文件复制到 chroot 环境,以便守护程序能够找到它们。通常情况下无需担心这一点,因为命令 systemctl start dhcpd
会自动复制这些文件。
32.3.1 具有固定 IP 地址的客户端 #
DHCP 可用来向特定客户端指派预定义的静态地址。显式指派的地址始终优先于来自地址池的动态地址。静态地址永远不会像动态地址那样过期。例如,对于动态地址而言,如果没有足够的地址可用,服务器需要在客户端之间重新分发这些地址。
要标识使用静态地址配置的客户端,dhcpd 会使用硬件地址(这是一个全球唯一的固定数字代码,其中包含 6 对八位组),用于标识所有网络设备(例如 00:30:6E:08:EC:80
)。如果将相应的各行(如例 32.2 “配置文件的添加项”中的行)添加到例 32.1 “配置文件 /etc/dhcpd.conf”的配置文件,DHCP 守护程序会将相同的一组数据指派到相应的客户端。
host jupiter { hardware ethernet 00:30:6E:08:EC:80; fixed-address 192.168.2.100; }
在第一行输入相应客户端的名称(host
HOSTNAME,在本例中为 jupiter
),在第二行输入 MAC 地址。在 Linux 主机上,使用命令 ip
link show
后跟网络设备(例如 eth0
)来查找 MAC 地址。输出应包含如下内容:
link/ether 00:30:6E:08:EC:80
在上面的示例中,会为网卡的 MAC 地址为 00:30:6E:08:EC:80
的客户端自动指派 IP 地址 192.168.2.100
和主机名 jupiter
。虽然也支持在 IBM 系统上常见的 token-ring
,但在几乎所有情况下,要输入的硬件类型都是 以太网
,
32.3.2 SUSE Linux Enterprise Server 版本 #
为了提高安全性,SUSE Linux Enterprise Server 版本的 ISC DHCP 服务器已应用了 Ari Edelkind 的 non-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
/var/run/netconfig/resolv.conf
在启动 init 脚本时,将把这些文件复制到 /var/lib/dhcp/etc/
。如果通过 /etc/ppp/ip-up
这样的脚本动态修改这些文件,则无论这些文件需要任何更改,都必须同时考虑这些副本。但是,如果配置文件仅指定 IP 地址(而不是主机名),就不需要担心这一点。
如果您的配置中包含应复制到 chroot 环境中的其他文件,请在文件 etc/sysconfig/dhcpd
中的变量 DHCPD_CONF_INCLUDE_FILES
下设置它们。为了确保 DHCP 日志记录功能即使在 syslog 守护程序重启动后仍然起作用,文件 /etc/sysconfig/syslog
中必须有附加项 SYSLOGD_ADDITIONAL_SOCKET_DHCP
。
32.4 更多信息 #
有关 DHCP 的更多信息,请访问因特网系统联盟网站 (https://www.isc.org/dhcp/)。也可在 dhcpd
、dhcpd.conf
、dhcpd.leases
和 dhcp-options
手册页中获得相关信息。