}}二、建立客户租约文件运行DHCP服务器还需要一个名为dhcpd.leases的文件,保持所有已经分发出去的 IP 地址。
在Redhat Linux 发行版本中,该文件位于 /var/lib/dhcp/ 目录中。
如果您通过RPM安装ISC DHCP,那么该目录应该已经存在。
dhcpd.leases的文件格式为:Leases address {statement}一个典型的文件内容如下:lease 192.168.1.255 { #DHCP服务器分配的IP地址# starts 1 2005/05/02 03:02:26; # lease 开始租约时间#ends 1 2005/05/02 09:02:26; # lease 结束租约时间#binding state active;next binding state free;hardware ethernet 00:00:e8:a0:25:86; #客户机网卡MAC地址#uid "%content%01%content%00%content%00\350\240%\206"; #用来验证客户机的UID标示#client-hostname "cjh1"; #客户机名称#}注意lease 开始租约时间和lease 结束租约时间是格林威治标准时间(GMT),不是本地时间。
第一次运行DHCP服务器时dhcpd.leases是一个空文件,也不用手工建立。
如果不是通过RP M安装ISC DHCP,或者 dhcpd 已经安装,那么您应该试着确定 dhcpd 将其 lease 文件写到何处,并确保该文件存在。
也可以手工建立一个空文件:#touch /var/lib/dhcp/dhcpd.leases三、启动和检查DHCP服务器使用命令启动DHCP服务器:#service dhcpd start使用ps命令检查dhcpd进程:#ps -ef | grep dhcpdroot 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpdroot 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd使用检查dhcpd运行的端口:# netstat -nutap | grep dhcpdudp 0 00.0.0.0:67 0.0.0.0:* 2402/dhcpd四、配置DHCP客户端通常网管员使用选择手工配置 DHCP 客户,需要修改 /etc/sysconfig/network文件来启用联网;并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。
在该目录中,每个设备都有一个叫做 ifcfg-eth?的配置文件,eth?是网络设备的名称。
如eth0等。
如果你想在引导时启动联网,NETWORKING变量必须被设为 yes。
除了此处之外/etc/sysconfig/network 文件应该包含以下行:NETWORKING=yesDEVICE=eth0BOOTPROTO=dhcpONBOOT=yes五、DHCP配置常见错误排除通常配置DHCP 服务器很容易,不过,在这里有一些技巧可以帮助您避免出现问题。
对服务器而言,要确保网卡正常工作,并具备广播功能。
对客户机而言,还要确保客户机的网卡正常工作。
最后,要考虑网络的拓扑,并考虑客户机向DHCP服务器发出的广播消息是否会受到阻碍。
另外如果dhcpd进程没有启动,那么可以浏览syslog 消息文件来确定是哪里出了问题。
这个消息文件通常是/var/l og/messages。
典型故障:1.DHCP服务器配置完成,没有语法错误。
但是网络中的客户机却没办法取得IP地址。
通常是Linux DHCP服务器沒有办法接收來自255.255.255.255 的DHCP 客户机的Requ est 封包造成的。
一般是Linux DHCP服务器的网卡没有设置具有MULTICAST功能。
为了让dhcpd(dhcp程序的守护进程)能够正常的和DHCP客户机沟通,dhcpd必须传送封包到255.255.255.255这个IP地址,但是有些Linux系统里255.255.255.255这个IP地址被用来做为监听区域子网域(localsubnet)广播的IP地址,所以需要在路由表(routing table)里加入255.255.255.255以激活MULTICAST功能;使用命令:route add -host 255.255.255.255 dev eth0如果报告错误消息:255.255.255.255:Unkown host那么请先修改/etc/hosts加入一行:255.255.255.255dhcp2. DHCP客户端程序和DHCP服务器不兼容由于Linux有许多发现版本,不同版本使用DHCP客户端程序和DHCP服务器也不相同。
Linux提供了四种DHCP客户端程序:pump, dhclient, dhcpxd, 和dhcpcd。
了解不同Linux发行版本的服务器端和客户端程序对于常见错误排除是必要的。
笔者曾经遇到过使用SuSE Linux 9.1 DHCP服务器和使用Mandrake Linux 9.0客户机不兼容的情况。
此时就必须更换客户端程序。
方法是先停止客户机的网络服务,卸载原程序,安装和服务器端兼容程序。
附表:主要Linux发行版使用的DHCP客户端。
将软件chroot化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot目录中,通常称这个目录为chroot jail(chroot"监牢")。
如果要在"监牢"中运行dhc pd,而事实上根本看不到文件系统中那个真正的目录。
因此需要事先创建目录,并将dhcpd复制到其中。
同时dhcpd需要几个库文件,可以使用ldd(library Dependency Display缩写)命令,ldd 作用是显示一个可执行程序必须使用的共享库。
ldd dhcpdlibc.so.6 =>/lib/tls/libc.so.6 (0x42000000)/lib/ld-linux.so.2=> /lib/ld-linux.so.2 (0x40000000)style='font-family:宋体'>这意味着还需要在"监牢"中创建lib目录,并将库文件复制到其中。
手工完成这一工作是非常麻烦的,此时可以用jail软件包来帮助简化chroot"监牢"建立的过程。
(1)Jail软件的编译和安装Jail官方网站是: ,最新版本:1.9a。
#Wget#tar xzvf jail.tar.gz; cd jail/src#make; make install(2)用jail创建监牢jail软件包提供了几个Perl脚本作为其核心命令,包括mkjailenv、addjailuser和add jailsw。
mkjailenv:创建chroot"监牢"目录,并且从真实文件系统中拷贝基本的软件环境。
addjailsw:从真实文件系统中拷贝二进制可执行文件及其相关的其它文件(包括库文件、辅助性文件和设备文件)到该"监牢"中。
addjailuser:创建新的chroot"监牢"用户。
首先停止目前dhcpd服务,然后建立chroot目录:#/sbin/service dhcpd start#mkjailenv /chroot/mkjailenvA component of Jail (version 1.9 for linux)Juan M. CasillasMaking chrooted environment into /chrootDoing preinstall()Doing special_devices()Doing gen_template_password()Doing postinstall()Done.下面的例子展示为"监牢"添加dhcpd程序的过程: # addjailsw /chroot/ -P /usr/sbin/dhcpd addjailswA component of Jail (version 1.9 for linux)Juan M. CasillasGuessing dhcpd args(0)Warning: exists. Overwritting itWarning: exists. Overwritting it………Done.不用在意那些警告信息,因为jail会调用ldd检查dhcpd用到的库文件。
而几乎所有基于共享库的二进制可执行文件都需要上述的几个库文件。
接下来将dhcpd的相关文件拷贝到"监牢"中:# mkdir -p /chroot/dhcp/etc# cp /etc/dhcpd.conf /chroot/dhcp/etc/# mkdir -p /chroot/dhcp/var/state/dhcp# touch /chroot/dhcp/var/state/dhcp/dhcp.leases重新启动dhcpd:[root@]# /chroot/usr/sbin/dhcpd使用ps命令检查dhcpd进程:#ps -ef | grep dhcpdroot 2402 1 0 14:25 ? 00:00:00/chroot/usr/sbin/dhcpdroot 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd注意此时进程名称已经改变,使用检查dhcpd运行的端口:# netstat -nutap | grep dhcpdudp 0 00.0.0.0:67 0.0.0.0:* 2402/dhcpd端口号没有改变。
现在dhcpd已经成功运行在"监牢"中。
到此为止一个这样,一个完整和安全的DHCP服务器就完成了。