Quick HOWTO : Ch08 : Configuring the DHCP Server/zh

来自Ubuntu中文
Vitoking留言 | 贡献2008年8月22日 (五) 14:08的版本 →‎总结
跳到导航跳到搜索


{{#ifexist: :Quick HOWTO : Ch08 : Configuring the DHCP Server/zh/zh | | {{#ifexist: Quick HOWTO : Ch08 : Configuring the DHCP Server/zh/zh | | {{#ifeq: {{#titleparts:Quick HOWTO : Ch08 : Configuring the DHCP Server/zh|1|-1|}} | zh | | }} }} }} {{#ifeq: {{#titleparts:Quick HOWTO : Ch08 : Configuring the DHCP Server/zh|1|-1|}} | zh | | }}

简介

一般来讲,如果你有一个有线调制解调器或者数字用户线路,你就可以使用家里的电脑获取由你的服务提供商动态分配的IP地址。如果在调制解调器和本地网络之间安装了有线/数字用户线路的路由器,你的电脑很有可能是在启动过程中从路由器获取了IP地址。你也可以选择禁用本地路由器中DHCP服务器的功能,而设置一个Linux机器作为DHCP服务器。

这一章仅包含对一个可以提供IP地址的DHCP服务器的配置指南。关于Linux系统中,DHCP客户端从DHCP服务器端如何获取IP地址的配置可以参考第三章,“Linux Networking”中的Linux网络互联部分。

下载与安装 DHCP 包

许多 RedHat 以及 Fedora Linux 软件都是RPM格式的. 下载安装这些RPM软件很容易. 如果你想再回顾下如何安装, Chapter 6, "Installing Linux Software", 详细讲解了这部分内容.

找该软件包的时候,请注意DHCP服务器的RPM包的命名往往以dhcp开始,后跟一个版本号,比如这样:dhcp-3.0.1rc14-1.i386.rpm

Debian Note: 对 Debian / Ubuntu 来说软件包名称可能也包含版本号. 用 dpkg --list | grep dhcp 来的到一个所有dhcp软件包的列表,从而找到dhcp服务区的软件包名称. 这里我们不妨认为这个软件包是 dhcp3-server.如果想回顾一下DEB包的安装请参见 Chapter 6, "Installing Linux Software".

root@u-bigboy:/tmp# dpkg --list | grep dhcp
ii  dhcp3-client   3.0.3-6ubuntu7  DHCP Client
ii  dhcp3-common   3.0.3-6ubuntu7  Files used by all the dhcp3* packages
root@u-bigboy:/tmp#

/etc/dhcpd.conf 文件

DHCP 服务器启动时,它读取 /etc/dhcpd.conf文件,并使用里面的命令来配置你的网络。标准的DHCP RPM软件包不会安装这个文件,但是你可以在下面的目录里找到一个配置文件示例作为参照。

/usr/share/doc/dhcp-<version-number>/dhcpd.conf.sample

你需要拷贝这个文件 dhcpd.conf 到 /etc 目录下面然后进行编辑。对于3.0p11版本的RPM包,拷贝文件命令如下:

[root@bigboy tmp]# cp /usr/share/doc/dhcp-3.0pl1/dhcpd.conf.sample /etc/dhcpd.conf

Debian Note: 对 Debian / Ubuntu 来说配置文件是 /etc/dhcp*/dhcpd.conf ,语法跟 Redhat / Fedora一样.

下面是对dhcpd.conf文件的简单解释:最重要的是,你的Linux主机的每个网络接口都必须有一个子网段

ddns-update-style interim
ignore client-updates
 
subnet 192.168.1.0 netmask 255.255.255.0 {
 
   # 当DHCP客户端主机启动网络时
   # 服务器能够分配给他的IP地址
   # 的范围
 
   range 192.168.1.201 192.168.1.220;
 
   # 客户端能使用该IP地址的时间
   # 以秒计算

  default-lease-time 86400;
  max-lease-time 86400;
 
   # 客户端默认网关
 
   option routers 192.168.1.1;
   # 不从一个网口向另一个网口转发
   # DHCP请求
 
   option ip-forwarding off;
 
   # 设置客户端广播地址和子网掩码

  option broadcast-address 192.168.1.255;
  option subnet-mask 255.255.255.0;
 
   # 设置客户端DNS服务器

  option domain-name-servers 192.168.1.100;
 
   # 设置客户端NTP服务器
 
   option nntp-server 192.168.1.100;
 
   # 如果你为Windows客户端指定了一个WINS服务器,
   # 你必须在 dhcpd.conf中加入以下选项 

  option netbios-name-servers 192.168.1.100;
 
   # 你也可以根据客户端MAC地址分配给他静态IP
   # (主机名是 "laser-printer"):

  host laser-printer {
      hardware ethernet 08:00:2b:4c:59:23;
     fixed-address 192.168.1.222;
   }
}
#
# 未使用网络接口
#
subnet 192.168.2.0 netmask 255.255.255.0 {
}

还有许多其他选项来配置 DHCP, 包括告诉 DHCP客户端哪里提供 finger 以及 IRC服务。在安装后请查看 dhcp-options man page :

[root@bigboy tmp]# man dhcp-options

Note: 示例文件dhcpd.conf文件里面的host指令非常有用. 像网络上打印机这样一些设备默认是通过DHCP获得IP地址的, 但是用户可以用固定IP地址区访问. 这个指令可以用来为一个已经预先知道网卡MAC地址的DHCP客户端提供静态IP地址。这可以降低系统管理开销

启动DHCP:

1) DHCP的一些旧版本的Fedora/RedHat将无法使用除非已有dhcpd.leases文件。如果没有的话可以用命令 touch /var/lib/dhcp/dhcpd.leases 去创建一个。 

[root@bigboy tmp]# touch /var/lib/dhcp/dhcpd.leases
2) 使用chkconfig命令配置DHCP在电脑启动时自动运行;

[root@bigboy tmp]# chkconfig dhcpd on

对 Debian / Ubuntu,dhcp3-server 软件包相应的命令为:

root@u-bigboy:/tmp# sysv-rc-conf dhcp3-server on


3) 然后用 service 命令执行 /etc/init.d/dhcpd 脚本来 start/stop/restart (启动/停止/重新起动) DHCP


启动

[root@bigboy tmp]# service dhcpd start

[root@bigboy tmp]# service dhcpd stop [root@bigboy tmp]# service dhcpd restart

对 Debian / Ubuntu 相应命令是:

root@u-bigboy:/tmp# /etc/init.d/dhcp*-server start

root@u-bigboy:/tmp# /etc/init.d/dhcp*-server stop root@u-bigboy:/tmp# /etc/init.d/dhcp*-server restart

4)每次更改配置文件后,要重启DHCP服务以使更改生效。你也可以用下面的命令测试DHCP是否在运行,如果是则返回DHCP进程的ID;

[root@bigboy tmp]# pgrep dhcpd


5) 最后,一定要记得设置你的电脑以使其可以通过DHCP来获得它的IP地址。


address via DHCP.

有多个网卡的DHCP 服务器

当一台被配置为动态获得IP(DHCP)的电脑启动时,他向DHCP服务器申请一个IP地址。这是通过向DHCP服务器发送一个标准的DHCP申请实现的。这个申请是一个广播桢,源IP地址为255.255.255.255

如果你的DHCP服务器有多个网络接口你必须为这个255.255.255.255添加一条路由表项,让服务器进程知道往哪个接口发送回应;否则,回应会被发往默认网关(下面两个例子中,我们假设DHCP请求来自接口eth0)

Note: 更多关于路由以及Linux添加路由表项的信息参见 Chapter 3, "Linux Networking".

Note: 你不能在多个网口上运行多个DHCP服务器,因为网络255.255.255.255只能有一个路由表项。如果你一定要这样,你会发现DHCP服务器只在一个网口上工作。


临时解决方案

你可以使用route add 命令临时为 255.255.255.255添加一个路由项,如下。

[root@bigboy tmp]# route add -host 255.255.255.255 dev eth0

如果你想让该路由项重启后仍能使用,那用下面的永久解决方案


永久解决方案

新的Fedora Linux添加静态路由的方法不支持将数据发往一个IP地址不是某一网关IP的接口。对地址为255.255.255.255的DHCP数据包的响应不应该发送给网关,而应该使用以太网帧中的MAC地址发送。

你有两个选择。往 /etc/rc.local 中加入一条命令, 或者往 /etc/sysconfig/static-routes 中添加一项,如下:

#
# File /etc/sysconfig/static-routes
#
eth0 host 255.255.255.255

Note: /etc/sysconfig/static-routes 是被声明为不赞成的(deprecated),最终会被Fedora去除

现在已经配置好服务器了,谈谈客户端吧。

配置客户端使用DHCP

Linux网络接口可以配置为通过DHCP获取IP地址,参考"Linux Networking"。如果你需要回顾DHCP客户端的配置,请查阅这一章。


配置Windows客户端使用 DHCP

Windows默认对所有网口使用DHCP,所以你不用担心需要重新配置

使用一个DHCP服务器为多个网络服务

如前所述,DHCP客户端发送一个请求IP地址的广播桢,而广播桢是被限制在局域网里面的。这本来意味着每个子网都需要一个DHCP服务器。但是,可以通过配置路由器向许多跳之外的DHCP服务器转发DHCP请求。这是通过将路由器在DHCP客户端接口的IP地址插入到转发的桢里面。对于DHCP服务器,非空的路由器的IP地址优先于广播地址考虑,并向该地址提供对DHCP客户端很重要的IP地址。DHCP服务器用一个广播桢响应(译者注:怎么是广播桢呢?应该发给当初转发DHCP请求的路由器才对,原文如此:The DHCP server replies with a broadcast packet), 而记录了原先的DHCP请求的路由器再把这个响应桢转发给DHCP客户端。 你可以用 ip helper-address 命令让Cisco路由器在所有有DHCP客户端的接口中启用该功能。下面是一个配置实例,DHCP服务器的地址为192.168.36.25:

interface FastEthernet 2/1
  ip address 192.168.1.30 255.255.255.0
  ip helper-address 192.168.36.25

简单的 DHCP 故障排解

DHCP最常见的问题常跟服务器无关;在服务器端被正确配置之后就没必要作任何更改,服务器会运行的很好。问题常常由客户端各种各样的原因导致。接下来部分讲述了简单的故障排除步骤。执行这些步骤使DHCP在你的网络上正常工作。


DHCP 客户端包含 169.254.0.0 地址

当Microsoft DHCP 客户端找不到DHCP服务器,他们就会默认从169.254.0.0网络中选择一个IP地址,直到找到DHCP服务器为止,这常被称为Automatic Private IP Addressing(APIPA)。你可以采取一下步骤解决该问题:

  • 确定DHCP服务器配置正确并使用先前讲到的 pgrep 命令来确定DHCP服务器进程在运行。特别注意 255.255.255.255 路由项,尤其当你有多个网口时。
  • 从DHCP服务器能够分配的IP地址里面选一个给DHCP客户端,然后看客户端能不能ping通DHCP服务器。如果不能,再次检查线缆与网卡。
  • DHCP使用 BOOTP 协议在客户端与服务器间交换信息。确定防火墙没有阻止通信。DHCP服务器在UDP端口67接收请求,DHCP客户端在UDP端口68等待响应,在服务器网卡上使用 tcpdump 检查通信数据流是否正确。

== == ==

DHCP的其它错误

如果你的DHCP服务器无法启动,可以使用第四章所描述的查错纠错技术,“常见网络错误及其解决方法”,来帮助纠正错误。 以下原因常导致初始化时的一些错误:

  • Incorrect settings in the /etc/dhcpd.conf file such as not defining the networks for which the DHCP server is responsible;
  • /etc/dhcpd.conf 文件配置错误,例如没有定义DHCP服务器负责的网络。
  • Firewall rules that block the DHCP bootp protocol on UDP ports 67 and 68;
  • 防火墙阻止了依赖于UDP端口67和68的 DHCP bootp 协议;
  • Routers failing to forward the bootp packets to the DHCP server when the clients reside on a separate network.
  • 当客户端位于另外一个网络时,路由器没有转发DHCP服务器的bootp数据包

经常地查看/var/logs/messages文件以确定是否有DHCP错误发生,同时记得当你升级操作系统的时候寄存在配置文件里的关键字可能改变。经常检阅版本发布通知以确保关键字没有改变。

总结

大多数的家庭网络,一个CHCP 服务器是没有必要的,因为DSL 路由器/防火墙(router / firewall)一般都有DHCP的功能,但是出于兴趣也可以尝试一下。务必确保一个网络的所有DHCP 服务器 提供的IP地址不要重复,否则将有可能导致不可预料的错误。 要想在你的Linux 服务器上尝试提供DHCP服务,最好关闭路由器/防火墙所提供的DHCP服务。

在办公环境中,如果让一个网络工程师配置网络的时间以及资金投入都不大的话,让一个Linux系统管理员自己做这些事情会更简单,这时DHCP服务器也就不再需要了.


配置一台DHCP服务器很简单,也涉及到了前面章节讲到的所有重要话题. 现在是时候尝试一些比较有难度的操作了,不过在开始之前,我们将快速地复习一下怎样创建将使用本书馀下部分介绍的许多功能的用户的方法。