dhcpd (简体中文)

From ArchWiki

翻译状态:本文是 dhcpd翻译。上次翻译日期:2022-10-03。如果英文版本有所更改,则您可以帮助同步翻译。

dhcpd 是 Internet Systems Consortium DHCP 服务器。它可用作局域网环境中的路由管理。

注意: dhcpd (DHCP (服务器) 守护进程) 不是 dhcpcd (DHCP 客户端 守护进程).

安装

安装 dhcp 包。

使用

dhcpd 包括两个单元文件:dhcpd4.servicedhcpd6.service,可用于控制守护进程。它们分别在 IPv4 和 IPv6 的所有 网络接口 上启动守护进程。可查看 #只侦听单一网口 了解单一网口配置。

配置

为你想使用的接口分配静态 IPv4 地址(在实例中我们将使用 eth0)。指定的子网不应与其他接口的子网重叠。

# ip link set up dev eth0
# ip addr add 139.96.30.100/24 dev eth0 # arbitrary address
提示: 通常有三个预留的网段用于私有网络,它们不会与任何互联网中的主机发生冲突:
  • 192.168/16 (subnet 192.168.0.0, netmask 255.255.0.0)
  • 172.16/12 (subnet 172.16.0.0, netmask 255.240.0.0)
  • 10/8 (for large networks; subnet 10.0.0.0, netmask 255.0.0.0)
另请参阅 RFC 1918

要在启动时分配静态 IP 地址,查看网络配置#静态 IP 地址

默认的 dhcpd.conf 文件包含许多注释的例子,复制一份该文件:

# mv /etc/dhcpd.conf /etc/dhcpd.conf.example

欲仅监听子网 139.96.30.0/24,您可以创建以下最精简的配置文件:

/etc/dhcpd.conf
option domain-name-servers 8.8.8.8, 8.8.4.4;
option subnet-mask 255.255.255.0;
option routers 139.96.30.100;
subnet 139.96.30.0 netmask 255.255.255.0 {
  range 139.96.30.150 139.96.30.250;
}

注意:

  • 如果 eth0 是子网 139.96.30.0/24的仅有接口(往往如此),那么 dhcpd 只监听 eth0
  • 如果您想 dhcpd 监听其他接口,通过指定使用其他接口的子网修改配置文件以监听。

如果你要为一台特定的设备提供一个固定的 IP 地址,你可以定义主机块:

/etc/dhcpd.conf
option domain-name-servers 8.8.8.8, 8.8.4.4;
option subnet-mask 255.255.255.0;
option routers 139.96.30.100;
subnet 139.96.30.0 netmask 255.255.255.0 {
  range 139.96.30.150 139.96.30.250;
}
host macbookpro{
  hardware ethernet 70:56:81:22:33:44;
  fixed-address 139.96.30.199;
}

domain-name-servers 选项包含提供给客户的 DNS 服务器地址,这个例子中使用了谷歌的公共 DNS 服务器。如果你知道一个本地的DNS服务器(例如,由你的服务商提供的),那么你应该使用这个 DNS。如果 DNS 服务器部署在本地设备上,应该使用子网络中的地址(如 139.96.30.100)。

subnet-maskrouters 定义子网掩码和子网上可用路由器的列表。在大多数情况下,对于小型网络,您可以使用 255.255.255.0 作为掩码,并指定将 DHCP 服务器配置为路由器的机器的 IP 地址。

subnet 块定义了单独子网的选项,这些子网映射到运行“dhcpd”的网络接口。在我们的示例中,这是一个用于单个接口 eth0 的子网 139.96.30.0/24,我们为其定义了可用 IP 地址的范围。此范围内的地址将分配给连接的客户端。

只侦听单一网口

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: 虽然手册界面 dhcpd(8) 建议以下描述的行为,但实践中,dhcpd 仅监听在其配置文件中被声明的子网接口。 (Discuss in Talk:Dhcpd (简体中文))

如果你的计算机已经是一个或多个网络中的一部分,那在你的计算机给其他网络的计算机分配 IP 地址时可能会有问题。这可以通过配置 dhcpd 或使用 systemctl 以守护进程的形式启动。

配置 dhcpd

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: dhcpd 不监听子网不在配置文件中声明的接口。 (Discuss in Talk:Dhcpd (简体中文))

为了排除接口,您必须为将在该接口上配置的子网创建一个空声明。

这是通过编辑配置文件来完成的(例如):

/etc/dhcpd.conf
# No DHCP service in DMZ network (192.168.2.0/24)
subnet 192.168.2.0 netmask 255.255.255.0 {
}

服务文件

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: 使用 systemd 251 测试时无效。 (Discuss in Talk:Dhcpd (简体中文))

dhcpd 提供的默认服务文件没有指定接口。为 dhcpd4.service 使用 drop-in unit file,如下所示:

/etc/systemd/system/dhcpd4.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpd -4 -q -cf /etc/dhcpd.conf -pf /run/dhcpd4/dhcpd.pid %I

这允许使用 dhcpd4.service 作为模板单元,将“dhcpd”绑定到特定接口;例如 dhcpd4@eth0.service,其中 eth0第一个枚举到的以太网设备

用于 PXE

PXE 配置通过以下两个选项完成:

/etc/dhcpd.conf
next-server 192.168.0.2;
filename "/pxelinux.0";

此部分可以在整个 subnet 中或仅在 host 定义中。 next-server 是 TFTP 服务器的 IP,filename 是要引导的映像的文件名。有关详细信息,请参阅 PXE

参阅