29.6. 动态主机设置协定(DHCP

动态主机设置协定(Dynamic Host Configuration Protocol,DHCP)可分配必要的位置信息给一个联机到网络的系统以在该网络通信。FreeBSD内含OpenBSD版本的dhclient,可用来做为客户端来取得位置信息。FreeBSD预设并不会安装DHCP服务器,但在FreeBSD Port套件集中有许多可用的服务器。有关DHCP通信协定的完整说明位于RFC 2131,相关资源也可至isc.org/downloads/dhcp/取得。

本节将介绍如何使用内置的DHCP客户端,接着会介绍如何安装并设定一个DHCP服务器。

注意:

在FreeBSD中,bpf(4)装置同时会被DHCP服务器与DHCP客户端所使用。这个装置会在GENERIC核心中被引用并随着FreeBSD安装。想要建立自定义核心的使用者若要使用DHCP则须保留这个装置。

另外要注意bpf也会让有权限的使用者在该系统上可执行网络封包监听程序。

29.6.1. 设定DHCP客户端

DHCP客户端内含在FreeBSD安装程序当中,这让在新安装的系统上设定自动从DHCP服务器接收网络位置信息变的更简单。请参考第 2.8 节 “帐户,时区,服务和加固”取得网络设置的示例。

dhclient在客户端机器上执行时,它便会开始广播请求取得设置信息。预设这些请求会使用UDP端口号68。而服务器则会在UDP端口号67来回复,将 IP 位址与其他相关的网络信息,如:子网络掩码、预设网关及DNS服务器位址告诉客户端,详细的清单可在dhcp-options(5)找到。

预设当FreeBSD系统开机时,其DHCP客户端会在背景执行或称非同步(Asynchronously)执行,在完成DHCP程序的同时其他启动Script会继续执行,来加速系统启动。

背景DHCPDHCP服务器可以快速的响应客户端请求时可运作的很好。然而DHCP在某些系统可能需要较长的时间才能完成,若网络服务尝试在DHCP尚未分配网络位置信息前执行则会失败。使用同步(Synchronous)模式执行DHCP可避免这个问题,因为同步模式会暂停启动直到DHCP已设置完成。

/etc/rc.conf中的这行用来设定采用背景(非同步模式):

ifconfig_fxp0="DHCP"

若系统已经在安装时设定使用DHCP,这行可能会已存在。替换在例子中的fxp0为实际要动态设置的网络界面名称,如第 11.5 节 “设定网络界面卡”中的说明。

要改设定系统采用同步模式,在启动时暂停等候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客户端设定Script。在dhclient-script(8)中有说明,但应不须做任何修改便可正常运作。

  • /var/db/dhclient.leases.interface

    DHCP客户端会在这个档案中储存有效租约的数据,写入的格式类似日志,在dhclient.leases(5)有说明。

29.6.2. 安装并设定DHCP服务器

本节将示范如何设定FreeBSD系统成为DHCP服务器,使用Internet Systems Consortium(ISC)所实作的DHCP服务器,这个服务器及其文件可使用net/ isc-dhcp43-server套件或Port安装。

net/isc-dhcp43-server的安装程序会安装一份示例配置文件,复制/usr/local/etc/dhcpd.conf.example/usr/local/etc/dhcpd.conf并在这个新档案做编辑。

这个配置文件内容包括了子网络及主机的宣告,用来定义要提供给DHCP客户端的信息。如以下行设定:

option domain-name "example.org";1
option domain-name-servers ns1.example.org;2
option subnet-mask 255.255.255.0;3

default-lease-time 600;4
max-lease-time 72400;5
ddns-update-style none;6

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

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

1

这个选项指定了要提供给客户端的预设搜寻网域。请参考resolv.conf(5)取得更多资讯。

2

这个选项指定了客户端应使用的DNS服务器清单(以逗号分隔)。如示例中所示,可使用服务器的完整网域名称(Fully Qualified Domain Names,FQDN)或服务器的 IP位址。

3

要提供给客户端的子网络掩码。

4

预设租约到期时间(秒)。客户端可以自行设定覆盖这个数值。

5

一个租约最多允许的时间长度(秒)。若客户端请求更长的租约,仍会发出租约,但最多只会在max-lease-time内有效。

6

预设的none会关闭动态DNS更新。更改此值为interim可让DHCP服务器每当发出一个租约便通知DNS服务器更新,如此一来DNS服务器便知道网络中该电脑的 IP 位址。不要更改此预设值,除非DNS服务器已设定为支持动态DNS

7

此行会建立一个可用 IP 位址的储存池来保留这些要分配给DHCP客户端的位址。位址范围必须在前一行所指定的网络或子网络中有效。

8

宣告在开始的{括号之前所指定的网络或子网络中有效的预设通信闸。

9

指定客户端的硬件MAC位址,好让DHCP服务器在客户端发出请求时可以辨识客户端。

10

指定这个主机应分配相同的 IP 位址。在此处用主机名称是正确的,由于DHCP服务器会在回传租约信息前先解析主机名称。

此配置文件还支持其他选项,请参考随服务器一并安装的dhcpd.conf(5)来取得详细信息与示例。

完成dhcpd.conf的设定之后,在/etc/rc.conf启动DHCP服务器:

dhcpd_enable="YES"
dhcpd_ifaces="dc0"

替换dc0DHCP服务器要倾听DHCP客户端请求的网络界面(多个界面可以空白分隔)。

执行以下指令来启动服务器:

# service isc-dhcpd start

往后任何对服务器设定的变更会需要使用service(8)中止dhcpd服务然后启动。

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

    这个Daemon会用在更进阶的环境中,在一个DHCP服务器要转发来自客户端的请求到另一个网络的另一个DHCP服务器的环境。若需要使用此功能,请安装net/ isc-dhcp43-relay套件或Port,安装会包含dhcrelay(8),里面有提供更详细的信息。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.