30.6.动态主机设置协议(DHCP)
动态主机配置协议 (DHCP) 允许系统连接到网络,以便为该网络上的通信分配必要的寻址信息。FreeBSD 包括 OpenBSD 版本,dhclient
使用它来获取寻址信息。FreeBSD 不安装 DHCP 服务器,但是在 FreeBSD Ports Collection 中有好几个服务器可用。DHCP 协议在 RFC 2131 中进行了全面描述。isc.org/downloads/dhcp/ 也提供信息资源。
本节介绍如何使用内置 DHCP 客户端。然后,它描述了如何安装和配置 DHCP 服务器。
注意 |
---|
在 FreeBSD 中,DHCP 服务器和 DHCP 客户端都需要 bpf(4) 设备。这个设备包含在随 FreeBSD 一起安装的 GENERIC 内核中。如果使用 DHCP,则喜欢创建自定义内核的用户需要保留此设备。应该注意的是,bpf 还允许特权用户在该系统上运行网络数据包嗅探器。 |
30.6.1. 配置 DHCP 客户端
DHCP 客户端支持包含在 FreeBSD 安装程序中,使得配置新安装的系统很容易,以自动从现有的 DHCP 服务器接收其网络寻址信息。有关网络配置的示例,请参阅帐户、时区、服务和强化。
在客户端计算机上执行 时,它将开始广播配置信息请求。默认情况下,这些请求使用 UDP 端口 68。服务器在 UDP 端口 67 上进行回复,为客户端提供 IP 地址和其他相关网络信息,如子网掩码、默认网关和 DNS 服务器地址。此信息采用 DHCP“租约”的形式,在可配置的时间内有效。这允许自动重用不再连接到网络的客户端的陈旧 IP 地址。DHCP 客户端可以从服务器获取大量信息。详尽的列表可以在 dhcp-options(5) 中找到。
缺省情况下,当 FreeBSD 系统引导时,它的 DHCP 客户端在后台运行,或者异步运行。在 DHCP 进程完成时,其他启动脚本将继续运行,从而加快系统启动速度。
当 DHCP 服务器快速响应客户端的请求时,后台 DHCP 可以很好地工作。但是,DHCP 在某些系统上可能需要很长时间才能完成。如果网络服务尝试在 DHCP 分配网络寻址信息之前运行,则它们将失败。在同步模式下使用 DHCP 可防止此问题,因为它会暂停启动,直到 DHCP 配置完成。
/etc/rc.conf 中的这一行用于配置后台或异步模式:
ifconfig_fxp0="DHCP"
如果系统配置为在安装过程中使用 DHCP,则此行可能已存在。将这些示例中所示的 fxp0 替换为要动态配置的接口的名称,如 “设置网络接口卡” 中所述。
要改为将系统配置为使用同步模式,并在 DHCP 完成时在启动期间暂停,请使用 “SYNCDHCP”:
ifconfig_fxp0="SYNCDHCP"
其他客户端选项可用。在 rc.conf(5) 中搜索 dhclient
。
DHCP 客户端使用以下文件:
/etc/dhclient.conf
dhclient
使用的配置文件。通常,此文件仅包含注释,因为默认值适用于大多数客户端。此配置文件在 dhclient.conf(5) 中进行了描述。/sbin/dhclient
有关命令本身的更多信息可以在 dhclient(8) 中找到。
/sbin/dhclient-script
FreeBSD 特定的 DHCP 客户端配置脚本。它在 dhclient-script(8) 中进行了描述,但不需要任何用户修改即可正常运行。
/var/db/dhclient.leases.interface
DHCP 客户端在此文件中保留一个有效租约数据库,该文件以日志形式写入,并在 dhclient.leases(5) 中进行了描述。
30.6.2. 安装和配置 DHCP 服务器
本节演示如何使用 DHCP 服务器的互联网系统联盟 (ISC) 实现来配置 FreeBSD 系统以充当 DHCP 服务器。可以使用 net/isc-dhcp44-server 包或端口安装此实现及其文档。
net/isc-dhcp44-server 的安装将安装一个示例配置文件。将 /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)。 |
---|
此选项指定客户端应使用的以逗号分隔的 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) 启动。
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 服务器。如果需要此功能,请安装 net/isc-dhcp44-relay 包或 port。安装包括 dhcrelay(8),它提供了更多细节。