4. DHCP 服务器设置

4.1. UNIX 的 DHCP 服务器

对于类 U*X 操作系统,有几种可用的 DHCP 服务器,包括商业的和免费的。其中一个比较流行的免费 DHCP 服务器是 Paul Vixie/ISC DHCPd。目前最新版本是 2.0(建议大多数用户使用),但 3.0 正在进行 beta 测试。您可以从以下地址获取它们

ftp://ftp.isc.org/isc/dhcp/

某些发行版为 dhcpd 提供了二进制软件包,如果您通过这种方式安装了它,请跳过以下部分。

下载后解压缩它。解压缩后,cd 进入发行目录并输入:./configure

配置设置需要一些时间。完成后输入:makemake install

4.2. DHCP 服务器配置

完成安装后,输入 ifconfig -a。您应该看到类似这样的内容

eth0      Link encap:10Mbps Ethernet  HWaddr 00:C0:4F:D3:C4:62
          inet addr:183.217.19.43  Bcast:183.217.19.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2875542 errors:0 dropped:0 overruns:0
          TX packets:218647 errors:0 dropped:0 overruns:0
          Interrupt:11 Base address:0x210

如果它没有显示 MULTICAST,您应该重新配置您的内核并添加多播支持。在大多数系统中,您不需要这样做。

下一步是为 255.255.255.255 添加路由。引自 DHCPd README

“为了使 dhcpd 能够与挑剔的 DHCP 客户端(例如 Windows 95)正确工作,它必须能够发送 IP 目标地址为 255.255.255.255 的数据包。不幸的是,Linux 坚持将 255.255.255.255 更改为本地子网广播地址(这里是 192.5.5.223)。这导致了 DHCP 协议冲突,虽然许多 DHCP 客户端没有注意到这个问题,但有些客户端(例如,所有 Microsoft DHCP 客户端)会注意到。遇到此问题的客户端似乎看不到来自服务器的 DHCPOFFER 消息。”

输入:route add -host 255.255.255.255 dev eth0

如果您收到消息“255.255.255.255:未知主机”,您应该尝试将以下条目添加到您的/etc/hosts文件

255.255.255.255 all-ones

然后,尝试

route add -host all-ones dev eth0

route add 255.255.255.0 dev eth0

eth0当然是您正在使用的网络设备的名称。如果不同,请进行相应的更改。

4.3. DHCPd 的选项

现在您需要配置 DHCPd。为了做到这一点,您将必须创建或编辑/etc/dhcpd.conf。KDE ( http://www.kde.org/ ) 下有一个用于 dhcpd 配置的图形界面,名为 kcmdhcpd,它与 Windows NT 上的 DHCP 配置器非常相似。当 KDE 2.0 发布时,它应该会带有 kcmdhcpd,或者您可以直接从以下地址获取它

ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/

如果您想手动配置它,请按照以下说明进行操作。

最常见的需求是随机分配 IP 地址。这可以通过以下设置完成

# Sample /etc/dhcpd.conf
# (add your comments here) 
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.org";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
   range 192.168.1.150 192.168.1.200;
}

这将使 DHCP 服务器为客户端分配一个 IP 地址,范围为 192.168.1.10-192.168.1.100 或 192.168.1.150-192.168.1.200。如果客户端没有请求特定的时间范围,它将租用 IP 地址 600 秒。否则,最大(允许的)租期为 7200 秒。服务器还将“建议”客户端应使用 255.255.255.0 作为其子网掩码,192.168.1.255 作为其广播地址,192.168.1.254 作为路由器/网关,以及 192.168.1.1 和 192.168.1.2 作为其 DNS 服务器。

如果您需要为 Windows 客户端指定 WINS 服务器,您将需要包含netbios-name-servers选项,例如

option netbios-name-servers 192.168.1.1;

您还可以根据客户端的以太网地址分配特定的 IP 地址,例如

host haagen {
   hardware ethernet 08:00:2b:4c:59:23;
   fixed-address 192.168.1.222;
}

这将为以太网地址为 08:00:2b:4c:59:23 的客户端分配 IP 地址 192.168.1.222。

您还可以混合搭配,例如,您可以让某些客户端获得“静态”IP 地址(例如服务器),而其他客户端获得动态 IP 地址(例如使用笔记本电脑的移动用户)。还有许多其他选项,例如 nis 服务器地址、时间服务器地址等,如果您需要任何这些选项,请阅读dhcpd.confman 手册页。

4.4. 启动服务器

在启动服务器之前,只有一件事要做。在大多数情况下,DHCP 安装不会创建dhcpd.leases文件。此文件由 DHCPd 用于存储有关当前租用的信息。它是纯文本格式,因此您可以在 DHCPd 运行时查看它。要创建dhcpd.leases输入
touch /var/state/dhcp/dhcpd.leases

这将创建一个空文件(文件大小 = 0)。一些较旧版本的 dhcpd 2.0 将文件放在/etc/dhcpd.leases。您无需对 leases 文件进行任何更改,它将由 dhcpd 操作。如果您收到消息说文件已存在,只需忽略它并转到下一步。

您现在可以调用 DHCP 服务器。只需输入(或包含在启动脚本中)

/usr/sbin/dhcpd

这将在 eth0 设备上调用 dhcpd。如果您想在另一个设备上调用它,只需在命令行上提供它,例如

/usr/sbin/dhcpd eth1

为了验证一切正常,您应该首先打开调试模式并将服务器置于前台。您可以通过输入

/usr/sbin/dhcpd -d -f

然后启动您的一个客户端并查看服务器的控制台。您将看到出现许多调试消息。如果一切正常,您就完成了 :-)。退出 dhcpd 并在不带 -d -f 和参数的情况下启动它。如果您希望 dhcpd 在启动时启动,请将 dhcpd 包含在例如

/etc/rc.d/rc.local

4.5. 其他有趣的文档

Linux Magazine 在其四月刊中发表了一篇非常好的文章,名为 网络涅槃:如何使网络配置像 DHCP 一样简单,讨论了 DHCP 的设置。