分类: LINUX
2008-05-04 21:31:29
动态主机配置协议(DHCP)是用来自动给客户机器分配TCP/IP信息的网络协议。每个DHCP客户都连接到位于中心的DHCP服务器,该服务器会返回包括IP地址、网关和DNS服务器信息的客户网络配置。
DHCP在快速发送客户网络配置方面很有用场。当配置客户系统时,若管理员选择了DHCP,他就不必输入IP地址、子网掩码、网关、或DNS服务器。客户从DHCP服务器中检索这些信息。DHCP在管理员想改变大量系统的IP地址时也大有用途。与其重新配置所有系统,管理员只需编辑服务器上的一个用于新IP地址集合的DHCP配置文件即可。如果某机构的DNS服务器改变了,这种改变只需在DHCP服务器上而不必在DHCP客户上进行。一旦客户的网络被重新启动(或客户重新引导系统),改变就会生效。
除此之外,如果便携电脑或任何类型的可移计算机被配置使用DHCP,只要每个办公室都有一个允许它联网的DHCP服务器,它就可以不必重新配置而在办公室间自由移动。
要配置DHCP服务器,请修改配置文件/etc/dhcpd.conf。
DHCP还使用/var/lib/dhcpd/dhcpd.leases文件来贮存客户租期数据库。
配置DHCP服务器的第一步是创建贮存客户网络信息的配置文件。全局选项可以为所有客户声明,可选选项可以为每个客户系统声明。该配置文件可以使用任何附加的制表符或空行来进行简单格式化。关键字是区分大小写的,起首为井号(#)的行是注释。
目前实现了两种DNS更新方案 ——特殊DNS更新模式和过渡性DHCP-DNS互动草图更新模式。如果这两种模式被接受为IETF标准进程的一部分,就会出现第三个模式——标准DNS更新方法。DHCP服务器必须配置使用这两种当前方案中的一种。版本3.0b2pl11以及更早的版本使用特殊模式;不过,这种模式已经过时。如果你想保留相同的行为方式,在配置文件的开头添加以下一行:
ddns-update-style ad-hoc;
要使用推荐的模式,在配置文件的开头添加以下一行:
ddns-update-style interim;
配置文件中有两类陈述:
• 参数 — 表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户。
• 声明 — 描述网络的布局;描述客户;提供客户的地址;或把一组参数应用到一组声明中。
某些参数必须以option关键字开头,它们也被称为选项。选项配置DHCP的可选选项;而参数配置的是必选的或控制DHCP服务器行为的值。在使用大括号({ })的部分之前声明的参数(包括选项)通常被当做全局参数。全局参数应用位于其下的所有部分。
在下例中,routers、subnet-mask、 domain-name、domain-name-servers和time-offset选项被用于所有在它们下面声明的host声明中。
如下例所示,你可以声明subnet。你必须为你的网络中的每一个子网包括一个subnet声明,否则,DHCP服务器可能无法启动。
在这个例子中,子网中的每个DHCP客户都带有全局选项,并且声明了range。客户被分配给range之内的IP地址。
subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.254; option subnet-mask 255.255.255.0; option domain-name "example.com"; option domain-name-servers 192.168.1.1; option time-offset -18000; # Eastern Standard Time range 192.168.1.10 192.168.1.100; }
所有共享同一物理网络的子网应该在shared-network声明之内声明,如下例所示。在shared-network之内,但在被包围起来的subnet声明之外的参数被当做全局参数。shared-network的名称应该是对网络有描述性的标题,例如,使用test-lab来描述所有处于实验室(test lab)环境中的子网。
shared-network name { option domain-name "test.turbolinux.com.cn"; option domain-name-servers ns1.turbolinux.com.cn, \ ns2.turbolinux.com.cn; option routers 192.168.1.254; more parameters for EXAMPLE shared-network subnet 192.168.1.0 netmask 255.255.255.0 { parameters for subnet range 192.168.1.1 192.168.1.31; } subnet 192.168.1.32 netmask 255.255.255.0 { parameters for subnet range 192.168.1.33 192.168.1.63; } }
如下例中所演示,group声明可以用来把全局参数应用到一组声明中。例如,你可以组合共享的网络、子网、主机或其它组群。
group { option routers 192.168.1.254; option subnet-mask 255.255.255.0; option domain-name "example.com"; option domain-name-servers 192.168.1.1; option time-offset -18000; # Eastern Standard Time host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address 192.168.1.4; } }
要配置将动态IP地址租给子网内系统的DHCP服务器,用你的数值来修改下例。它为客户声明一个默认租期、最长租期、以及网络配置值。范例中把range 192.168.1.10和192.168.1.100之间的IP地址分配给客户。
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 "example.com"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.100; }
要根据网卡的MAC地址给客户分配IP地址,使用host声明内的hardware ethernet参数。 如下例中所演示,host apex声明表明:网卡的MAC地址为00:A0:78:8E:9E:AA的系统所分配的IP地址将一直是192.168.1.4。注意,你还可以使用可选的参数host-name来为客户分配主机名。
host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address 192.168.1.4; }
在DHCP服务器上,/var/lib/dhcpd/dhcpd.leases文件中存放着DHCP的客户租期数据库。该文件不应该被手工修改。每个新近分配的IP地址的DHCP租期信息都会自动储存在租期数据库中。该信息包括租期的长度;IP地址被分配的对象;租期的开始和终止日期;以及用来检索租期的网卡的MAC地址。
租期数据库中所用的时间是格林威治标准时间(GMT),不是本地时间。
租期数据库不时被重建,因此它不算太大。首先,所有已知的租期会被储存到一个临时的租期数据库中,dhcpd.leases文件被重命名为dhcpd.leases~,然后,临时租期数据库被写入dhcpd.leases文件。
在租期数据库被重命名为备份文件,新文件被写入之前,DHCP守护进程有可能被杀死,系统也有可能会崩溃。如果发生了这种情况,dhcpd.leases文件不存在,但它却是启动服务所必需的。这时,请不要创建新租期文件。因为这样做会丢失所有原有的旧租期文件,从而导致更多问题。正确的办法是把dhcpd.leases~备份文件重命名为dhcpd.leases,然后再启动守护进程。
要启动DHCP服务,使用/sbin/service dhcpd start命令。要停止DHCP服务,使用/sbin/service dhcpd stop命令。如果你的系统连接了不止一个网络接口,但是你只想让DHCP服务器启动其中之一,你可以配置DHCP服务器只在那个设备上启动。在/etc/sysconfig/dhcpd中,把接口的名称添加到DHCPDARGS的列表中:
# Command line options here DHCPDARGS=eth0
如果你有一个带有两个网卡的防火墙机器,这种方法就会大派用场。一个网卡可以被配置成DHCP客户来从互联网上检索IP地址;另一个网卡可以被用作防火墙之后的内部网络的DHCP服务器。仅指定连接到内部网络的网卡使系统更加安全,因为用户无法通过互联网来连接它的守护进程。其它可在/etc/sysconfig/dhcpd中指定的命令行选项包括:
-p
• -f — 把守护进程作为前台进程运行。这在调试时最常用。
• -d — 把DCHP服务器守护进程记录到标准错误描述器中。这在调试时最常用。如果它没有指定,日志将被写入/var/log/messages。
• -cf
• -lf
• -q — 在启动该守护进程时,不要显示整篇版权信息。
DHCP的转发代理(dhcrelay)允许你把无DHCP服务器的子网内的DHCP和BOOTP请求转发给其它子网内的一个或多个DHCP服务器。当某个DHCP客户请求信息时,DHCP转发代理把该请求转发给DHCP转发代理启动时所指定的一列DHCP服务器。当某个DHCP服务器返回一个回应时,该回应被广播或单播给发送最初请求的网络。
除非使用INTERFACES指令在/etc/sysconfig/dhcrelay文件中指定了接口,DHCP转发代理监听所有接口上的DHCP请求。要启动DHCP转发代理,使用service dhcrelay start 命令。
配置DHCP客户的第一步是确定内核能够识别网卡。多数网卡会在安装过程中被识别,系统会为该卡配置使用恰当的内核模块。如果你在安装后添加了一张网卡,Kudzu[1]应该会识别它,并提示你为它配置相应的内核模块。
要手工配置DHCP客户,你需要修改/etc/sysconfig/network文件来启用联网;并修改/etc/sysconfig/network-scripts目录中每个网络设备的配置文件。在该目录中,每个设备都应该有一个叫做ifcfg-eth0的配置文件,这里的eth0是网络设备的名称。
/etc/sysconfig/network文件应该包含以下行:
NETWORKING=yes
如果你想在引导时启动联网,NETWORKING变量必须被设为yes。
/etc/sysconfig/network-scripts/ifcfg-eth0文件应该包含以下几行:
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
每个你想配置使用DHCP的设备都需要一个配置文件。
其它网络脚本的选项包括:
• DHCP_HOSTNAME — 只有当DHCP服务器在接收IP地址前需要客户指定主机名的时候才使用该选项。(GTES10.5中的DHCP服务器守护进程不支持该功能。)
• PEERDNS=
yes — 使用来自服务器的信息来修改 /etc/resolv.conf。若使用DHCP,那么yes是默认值。
no — 不要修改 /etc/resolv.conf。
• SRCADDR=,这里的 是用于输出包的指定源IP地址。
• USERCTL=
yes — 允许非根用户控制 该设备。
no — 不允许非根用户控制该设备。