Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103683171
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: 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 — 指定dhcpd应该监听的UDP端口号码。默认值为67。DHCP服务器在比指定的UDP端口大一位的端口号码上把回应传输给DHCP客户。譬如,如果你使用了默认的端口67,服务器就会在端口67上监听请求,然后在端口68上回应客户。如果你在此处指定了一个端口号码,并且使用了DHCP转发代理,你所指定的DHCP转发代理所监听的端口就必须是同一端口。
• -f — 把守护进程作为前台进程运行。这在调试时最常用。
• -d — 把DCHP服务器守护进程记录到标准错误描述器中。这在调试时最常用。如果它没有指定,日志将被写入/var/log/messages。
• -cf — 指定配置文件的位置。默认位置是/etc/dhcpd.conf。
• -lf — 指定租期数据库文件的位置。如果租期数据库文件已存在,在DHCP服务器每次启动时使用同一个文件至关重要。强烈建议你只在无关紧要的机器上为调试目的才使用该选项。默认的位置是/var/lib/dhcpd/dhcpd.leases。
• -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 — 不允许非根用户控制该设备。

阅读(296) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~