30.6.动态主机设置协议(DHCP)

动态主机配置协议(DHCP)允许系统连接到网络,以便为该网络上的通信分配必要的寻址信息。FreeBSD 包括 OpenBSD 版本,dhclient 使用它来获取寻址信息。FreeBSD 不安装 DHCP 服务器,但是在 FreeBSD ports 中有好几个服务器可用。DHCP 协议在 RFC 2131open in new window 中进行了全面描述。isc.org/downloads/dhcp/open in new window 也提供信息资源。

本节介绍如何使用内置 DHCP 客户端。然后,它描述了如何安装和配置 DHCP 服务器。

注意

在 FreeBSD 中,DHCP 服务器和 DHCP 客户端都需要 bpf(4)open in new window 设备。这个设备被包含在随 FreeBSD 安装的 GENERIC 内核中。喜欢创建自定义内核的用户在使用 DHCP 时需要保留这个设备。

应该注意的是,bpf 也允许有特权的用户在该系统上运行网络数据包嗅探器。

30.6.1. 配置 DHCP 客户端

DHCP 客户端支持包含在 FreeBSD 安装程序中,使得配置新安装的系统很容易,以自动从现有的 DHCP 服务器接收其网络寻址信息。有关网络配置的示例请参阅帐户、时区、服务和强化open in new window

在客户端计算机上执行时,它将开始广播配置信息请求。默认情况下,这些请求使用 UDP 端口 68。服务器在 UDP 端口 67 上进行回复,为客户端提供 IP 地址和其他相关网络信息,如子网掩码、默认网关和 DNS 服务器地址。此信息采用 DHCP “租约”的形式,在可配置的时间内有效。这允许自动重用不再连接到网络的客户端的陈旧 IP 地址。DHCP 客户端可以从服务器获取大量信息。详尽的列表可以在 dhcp-options(5)open in new window 中找到。

缺省情况下,当 FreeBSD 系统引导时,它的 DHCP 客户端在后台运行,或者_异步_运行。在 DHCP 进程完成时,其他启动脚本将继续运行,从而加快系统启动速度。

当 DHCP 服务器快速响应客户端的请求时,后台 DHCP 可以很好地工作。但是,DHCP 在某些系统上可能需要很长时间才能完成。如果网络服务尝试在 DHCP 分配网络寻址信息之前运行,则它们将失败。在_同步_模式下使用 DHCP 可防止此问题,因为它会暂停启动,直到 DHCP 配置完成。

/etc/rc.conf 中的这一行用于配置后台或异步模式:

ifconfig_fxp0="DHCP"

如果系统配置为在安装过程中使用 DHCP,则此行可能已存在。将这些示例中所示的 fxp0 替换为要动态配置的接口的名称,如 “设置网卡open in new window” 中所述。

要改为将系统配置为使用同步模式,并在 DHCP 完成时在启动期间暂停,请使用 “SYNCDHCP”:

ifconfig_fxp0="SYNCDHCP"

其他客户端选项可用。在 rc.conf(5)open in new window 中搜索 dhclient

DHCP 客户端使用以下文件:

  • /etc/dhclient.conf

    dhclient 使用的配置文件。通常,此文件仅包含注释,因为默认值适用于大多数客户端。此配置文件在 dhclient.conf(5)open in new window 中进行了描述。

  • /sbin/dhclient

    有关命令本身的更多信息可以在 dhclient(8)open in new window 中找到。

  • /sbin/dhclient-script

    FreeBSD 特定的 DHCP 客户端配置脚本。它在 dhclient-script(8)open in new window 中进行了描述,但不需要任何用户修改即可正常运行。

  • /var/db/dhclient.leases.interface

    DHCP 客户端在此文件中保留一个有效租约数据库,该文件以日志形式写入,并在 dhclient.leases(5)open in new window 中进行了描述。

30.6.2. 安装和配置 DHCP 服务器

本节演示如何使用 DHCP 服务器的互联网系统联盟(ISC)实现来配置 FreeBSD 系统以充当 DHCP 服务器。可以使用二进制包或 ports net/isc-dhcp44-serveropen in new window 安装此实现及其文档。

net/isc-dhcp44-serveropen in new window 的安装将放置一个示例配置文件。将 /usr/local/etc/dhcpd.conf.example 复制到 /usr/local/etc/dhcpd.conf,并对此新文件进行任何编辑。

配置文件由子网和主机的声明组成,这些声明定义了提供给 DHCP 客户端的信息。例如,这些行配置以下内容:

option domain-name "example.org";   ①
option domain-name-servers ns1.example.org;   ②
option subnet-mask 255.255.255.0;   ③

default-lease-time 600;    ④
max-lease-time 72400;    ⑤
ddns-update-style none;    ⑥

subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20;    ⑦
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;    ⑧
}

host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;    ⑨
  fixed-address fantasia.fugue.com;    ⑩
}

①此选项指定将提供给客户端的默认搜索域。有关详细信息,请参阅 resolv.conf(5)open in new window

②此选项指定客户端应使用的以逗号分隔的 DNS 服务器列表。它们可以按其完全限定域名(FQDN)列出(如示例中所示)或按其 IP 地址列出。

③将提供给客户端的子网掩码。

④默认租约到期时间(以秒为单位)。可以将客户端配置为覆盖此值。

⑤租约允许的最大时间长度(以秒为单位)。如果客户端请求更长的租约,仍会发出租约,但该租约仅对 max-lease-time 有效。

⑥默认 none 禁用动态 DNS 更新。将此更改为 interim 将 DHCP 服务器配置为在发出租约时更新 DNS 服务器,以便 DNS 服务器知道哪些 IP 地址与网络中的哪些计算机相关联。除非已将 DNS 服务器配置为支持动态 DNS,否则不要更改默认设置。

⑦此行创建一个可用 IP 地址池,这些 IP 地址保留用于分配给 DHCP 客户端。地址范围必须对上一行中指定的网络或子网有效。

⑧声明对 { 左括号前指定的网络或子网有效的默认网关。

⑨指定客户端的硬件 MAC 地址,以便 DHCP 服务器在发出请求时可以识别客户端。

⑩指定应始终为此主机提供相同的 IP 地址。使用主机名是正确的,因为 DHCP 服务器将在返回租约信息之前解析主机名。

此配置文件支持更多选项。有关详细信息和示例,请参阅随服务器一起安装的 dhcpd.conf(5)。

dhcpd.conf 的配置完成后,在 /etc/rc.conf 中启用 DHCP 服务器:

dhcpd_enable="YES"
dhcpd_ifaces="dc0"

替换 dc0 为 DHCP 服务器应侦听 DHCP 客户端请求的接口(或多个接口,用空格分隔)。

通过发出以下命令启动服务器:

# service isc-dhcpd start

将来对服务器配置的任何更改都需要停止 dhcpd 服务,然后使用 service(8)open in new window 启动。

DHCP 服务器使用以下文件。请注意,手册页随服务器软件一起安装。

  • /usr/local/sbin/dhcpd

    有关 dhcpd 服务器的更多信息可以在 dhcpd(8) 中找到。

  • /usr/local/etc/dhcpd.conf

    服务器配置文件需要包含应提供给客户端的所有信息,以及有关服务器操作的信息。此配置文件在 dhcpd.conf(5) 中进行了描述。

  • /var/db/dhcpd.leases

    DHCP 服务器在此文件中保留它已颁发的租约的数据库,该文件以日志形式写入。请参阅 dhcpd.leases(5),它给出了详细的描述。

  • /usr/local/sbin/dhcrelay

    此守护程序用于高级环境,其中一个 DHCP 服务器将请求从客户端转发到单独网络上的另一个 DHCP 服务器。如果需要此功能,请通过二进制包或 ports 安装 net/isc-dhcp44-relayopen in new window。安装包括 dhcrelay(8),它提供了更多细节。