图片 3

排查DHCP服务器故障的经验

笔者在DHCP服务器治理中也碰到过一些麻烦。固然经过笔者的一番努力,终极都解决了。但是,一想起DHCP服务器出现题目时,还是感到非常紧张的。在今天,笔者就对自己在
DHCP服务器治理中碰到的题目做一些简单的总结。也许这些题目大家也碰到过,大家就一起讨论一下,看看是否有更好的解决方法。

众所周知每台计算机要想正常上网需要有一个地址,这个地址就是我们常说的IP地址。在实际工作中身为网络管理员的我们如何有效的管理这些IP地址呢?为每台计算机设置对应的IP地址,子网掩码,网关地址,DNS地址等网络参数的话固然是可以的,但是非常的烦琐,工作量大不说,在实际应用中很可能经常会出现冲突的现象。

        DHCP(Dynamic Host Configuration
Protocol/动态主机配置协议)是到目前为止笔者接触到的比较复杂的协议,在传输过程中,DHCP有8种报文类型来实现不同的过程,而当客户端成功获取地址之后也会有多种状态的变化。因此笔者打算先从dhcp的报文入手,理清楚一台终端设备从无到有取得IP地址的过程。

DHCP服务器管理维护心得一:如何备份DHCP服务器配置

我们如何有效的分配这些网络参数呢?DHCP服务可以帮我们大忙,通过将DHCP服务配置在专业的服务器上,然后为网络中所有普通客户机分配IP等信息是件效率非常高的工作。不过DHCP在为我们网络管理提供便利的同时也带来了一些问题。例如网络带宽受影响,客户机经常无法获得正确的地址信息,甚至是无法获得任何信息。其实这些故障我们都可以按照一定的规律去解决的,今天就由笔者为各位读者全面介绍排查DHCP故障的方法。

        为何要使用DHCP呢?首先,终端设备接入互联网一定是需要IP地址的,就像普通的电脑,而最初分配IP地址的方式就是手动输入IP地址,如有10台设备A/B/C/D…I/G那么就找出10个IP地址如192.168.0.2/3/4/5…11。只需要一对一的设定好每台设备的IP不冲突,设置好网关、掩码、dns等就可以正常上网了。笔者第一章架设linux服务器和第二章接入专网的时候都是用的这种方式。但随着接入量的增加,地址分配、更改会变得非常繁琐,有时候一个内网环境下用户接入量少则几千多则几万,这要是一个一个手动设置IP地址,工作量根本无法统计。

网络治理员往往希望能够备份DHCP服务器的相关配置。等到下次服务器出现故障的时候,可以利用这个备份文件进行迅速的恢复,而不用再对
DHCP服务器进行手工的配置。若在DHCP服务器中,有一些MAC地址的治理,那么重新配置起来是一件工作量很大的内容。而且,DHCP服务器也是一个比较复杂的治理系统,若由于配置上的疏漏,导致DHCP服务器运行故障的时候,若有备份文件,则就可以利用它迅速的恢复原先的配置。故,在相关配置调整之后,即使的对DHCP服务器配置进行相关的备份,则无疑是一个很好的工作习惯。

一、概念篇:

        其实对于网管而言,哪台电脑是什么IP地址似乎并不是很重要,大多数人配置IP地址的目的也仅仅是为了上网。那么是否存在一种方式可以使得接入终端在连入互联网后可以自动获取一个IP地址,而网管可以看到一张IP对应电脑的关系表来进行维护呢?

若DHCP服务器是一个独立的服务器的话,那就好办了。只要对整个操纵系统,包括DHCP服务器的配置进行备份即可。可是,往往很少有企业会用一台独立的服务器来运行DHCP服务,那就显得太浪费了。所以,大部分企业DHCP服务都跟其他的应用程序服务适用一台服务器。碰到这种情况,若备份操纵系统的话,则工作量就会很大。而且,后续还原的话,也会碰到麻烦。在还原DHCP服务器的同时,也会把其他的应用程序服务器进行还原。很明显,这不是我们愿意看到的。所以,对于不是独立的DHCP服务器的话,这种方法不可行。

在介绍排查DHCP故障之前首先为大家阐明几个概念性的东西,只有理论上充实了,才能更好的理解下面介绍的故障排除的思路。

        方案上肯定是可行的,这就涉及到了IP地址的动态分配,即DHCP。如下所示是客户端一次完整的DHCP请求、续约的过程。其中涉及三次数据交互,分别为两次请求(Discover-Offer、Request-ACK)一次续约(Request-ACK)。基于这三次交互客户端就顺利获取并延续使用IP地址来访问互联网。

另外,我们就是只导出DHCP服务器的相关配置,而不备份操纵系统或者其他应用程序服务的信息。如笔者企业的DHCP服务器,是建立在微软的
2003上面的。在DHCP服务器治理器窗口,没有这个功能。不过其提供了一个命令,通过这个命令可以导出服务器的相关配置,把他导入到一个TXT文件中。如我们可以利用这条命令:netsh
dhcp server export e:\dhcp.txt
all。把服务器的配置文件导出到E盘的根目录下,其文件名字为dchp.txt。若下次服务器出现故障的时候,我们则可以利用命令进行恢复。命令格式如下:netsh
dhcp server import e:\dhcp.txt all。

第一:DHCP服务能够提供什么数据?DHCP服务不是万能的,他只能提供网络层相关的参数,例如IP地址,MASK地址,网关地址,WINS与DNS服务器地址等。对于更低层的地址,诸如MAC地址等信息是无法提供的。MAC地址是烧录在计算机网卡中的。

图片 1

最后,必要要向网络治理员提两个建议。

第二:多台DHCP服务器是否可以同时运行?DHCP服务器是通过广播包向客户机发送网络信息的,因此如果同一个网络中确切的说是同一个广播域中存在多台
DHCP服务器的话,就会出现各个服务器提供各自的网络信息,这样就造成网络中广播数据包的冲突。客户机不知道该接受哪台DHCP服务器发来的信息。因此微软公司设置默认情况下同一个广播域网络中只能存在一台DHCP服务器,后设置建立或启用的DHCP将无法工作。

        笔者来仔细看一下这几个请求过程:

一是在治理DHCP服务器的时候,若需要调整相关的配置,则当测试完毕没有错误之后,要及时的把当前的配置导出来,进行备份。只有如此,下次出现故障的时候,才能够从容的应付。

第三:租约是什么?在配置DHCP服务器过程中会设置租约的天数,那么什么是租约呢?在DHCP服务器将网络信息分配数据包发给客户机后会收到客户机发回的答复数据包,接着DHCP服务器会将已经分配出去的IP地址与从客户机接收到的该计算机MAC地址建立一个对应关系,并把这个对应关系保存在DHCP服务器的租约池中。为什么需要这个租约池呢?一方面为下次分配网络参数信息提高了速度。不过如果该MAC地址对应条目的客户计算机被移到其他地方或者MAC
地址发生了改变的话,如果上面建立的对应关系一直保存在DHCP服务器的租约池中就会造成可用的IP地址数量越来越少,很多有效的地址被无效的MAC占用,因此微软引入了租约这个概念。通过租约我们可以强制每隔一段时间将DHCP服务器的租约池中保存的对应条目全部清空,从而防止了非法MAC地址霸占合法IP的现象。

        DHCP
Discover:客户端在刚接入网络时,本身是没有IP地址的,这时候,客户端需要在网络内发起一次discover的请求,这时候源地址是0.0.0.0,目的地址为255.255.255.255,来询问网络中哪台设备是dhcp
server。Discover报文只是在客户端所在的子网内进行广播。

二是不仅要在本地进行备份,而且,还需要进行异地备份。这主要是为了预防这台DHCP服务器下次出现硬件故障,如磁盘错误的时候,能够及时的进行异地恢复。

第四:我的客户机可以从DHCP服务器获得169.254.*.*形式的IP信息,这句话是错误的。为什么呢?微软公司在windows2000系统中提供了这样的功能,即如果网络中不存在任何DHCP服务器,客户机本地网络信息又被设置为自动获得IP方式的话,那么windows2000及其以上操作系统将自动为自己分配一个诸如169.254.*.*形式的IP信息。因此如果你发现自己的客户机只能获得169.254.*.*这样的IP地址的话,说明你的DHCP服务器没有正常工作。

        DHCP Offer:dhcp
server收到客户端的discover报文后,为了响应客户端而回复一个offer报文。服务器会匹配客户端所在的子网信息后会送给客户端IP地址。并在地址池中暂时保留该地址。

DHCP服务器管理维护心得二:地址池的IP地址不够分配的题目

二、客户端排障:

        DHCP
Request:对于实际使用的网络,没有网络协议可以规定网络中只能有一台dhcp
server。当客户端收到多个dhcp
offer的时候会根据先到先得的原则从中选取最先获得的报文。之后客户端会再次广播一个名为request的报文告知所有响应的dhcp
server。

笔者以前刚接触DHCP服务器的时候,碰到过一个很头疼的题目。那时候,一个员工出差了一段时间回来后,发现自己的电脑无法获得IP地址。笔者通过线路测试发现网络通讯是正常的;网卡也是工作正常。最后没有办法,怀疑是操纵系统的题目。为此重新安装电脑之后,发现题目照旧。现在应该可以确定不是客户真个题目。可是其他DHCP客户端运行正常,为什么偏偏这台主机确不能够获得IP地址呢,难道题目是出在DHCP服务器上?

DHCP故障主要有两个方面,客户机存在问题以及服务器自身问题。首先我们来介绍下在客户端进行的排除故障方法。

        DHCP ACK:dhcp server收到request报文,保留客户端ip-mac地址。

笔者查看了DHCP服务器的运行状态,竟然意外的发现,DHCP的IP地址已经分配光了。可是,根据笔者当时的设计,在给DHCP分配IP地址池的时候,还考虑到了30%多的余量。那IP地址怎么可能会用光呢?由于用户翠的急,我只好暂时加了几个IP地址进去,先解决用户的上网题目,然后再仔细的查找原因。

第一步:通过任务栏的“开始->运行->输入CMD”进入命令行模式。
第二步:在命令行模式中输入ipconfig后回车,看是否可以自动获得IP地址。

        DHCP
Request(Renew/ACK):当客户端到了最大租期的一半时,会向dhcp
server发送一个request报文来申请续约,dhcp server给出回复(ACK)。

笔者经过一番寻找,发现分配出去的IP地址中,有近四十个现在是不活跃的。除了扣除一些没开主机的电脑之外,还有三十几个IP地址根本没用。看到这种情况,笔者也清楚为什么会造成这个故障了。原来最近公司在上ERP系统,但是,这个系统对于系统的配置要求比较高。所以,我们最近就淘汰了三十几台的老电脑,几百元一台当作福利买给了员工。而由于在DHCP服务器中,笔者把租约设置了200天。则就导致固然那些旧电脑已经下岗了,但是,由于其租约没有到期,所以DHCP服务器还没有把这些IP地址收回去。为此,到新电脑连接到企业网络上之后,其只能够使用新的IP地址,这就导致了DHCP服务器中
IP地址的饱和。所以,当某个客户端想连上DHCP服务器获取IP地址的时候,服务器就没有空去的IP地址给他了。这就导致客户端无法得到IP地址,无法胜利上网。

小提示:在进行前两步操作前首先要保证客户机的IP地址分配方式被设置为自动获得IP地址。

        DHCP报文的8种类型:

有了这个教训之后,以后我就学乖了。不过为了IP地址的稳定性,笔者还是没有更改DHCP服务器的租约。后来为了实现固定IP地址,还把租约设置成为了无穷制。如此的话,DHCP服务器就不会主动收回IP地址。不过以后有电脑报废的时候,我会先通过命令把这个IP地址开释掉。另外也会不时的查看
DHCP的运行状态,及时的把不用的IP地址重新启用。如此的话,在以后的工作中,就没有再次碰到类似的题目。

第三步:如果可以获得正确的IP地址说明DHCP正常,如果发现获得错误的地址,其中包括169.254.*.*这样的形式,则执行ipconfig
/release命令,该命令是将当前获得的网络参数信息释放。

        经过上述步骤,客户端与服务器已经建立了连接并进行租期的续约。除了上述discover、offer、request、ack四种基础的报文类型,还有以下四种:

DHCP服务器管理维护心得三:当出现无法从DHCP服务器中获得地址的常见处理步骤

第四步:释放网络参数后再次执行ipconfig我们会看到当前得到的网络参数已经为空,所有信息变成0.0.0.0。如图1)

        DHCP
NAK:当DHCP收到客户端的request报文之后,没有发现相应的租约记录或某些原因(如地址池用尽)无法分配IP地址,则返回客户端NAK报文。

若我们发现网络连接不上,而原因是无法从DHCP服务器那边获得IP地址的话,其是有一套处理流程的。笔者在这里把他总结为五步走。

图1 点击看大图

        DHCP
Release:当客户端不使用所分配的IP地址时,会发送release报文告知dhcp
server。

第一步:打开命令行窗口。若是微软的操纵系统的话,则在开始、运行处,输入CMD命令,就可以打开命令行窗口。若是在Linux等非微软的操纵系统中,也有对应的命令行窗口。如在Linux中,则可以通过工具、终端打开命令行窗口。

第五步:释放得到的错误信息后执行ipconfig
/renew将自动获得新的信息。如图2)

        DHCP
Decline:当客户端收到dhcp的地址信息后,发现由于某些原因地址不可用(如地址冲突)会发送decline报文告知dhcp
server。

第二步:查看现有的网络参数配置信息。我们可以通过命令IPCONFIG /ALL
来查看具体的网络配置信息。一般情况下,若无法从DHCP服务器那边获得IP地址的话,则客户端会自己给自己分配一个IP地址。通常情况下,若是客户端给自己分配IP地址的话,是以169.254开头的。所以,若看到这个IP地址的话,可以确定的是客户真个网卡等没有什么题目。

图2 点击看大图

        DHCP Inform:当客户端希望获取dhcp
server详细信息时会发送inform报文至服务器。

第三步:把现有的网络参数开释掉。接下去,我们就要利用IPCONFIG
/RELEASE命令,把现有的网络配置参数开释掉。开释掉之后,我们再利用IPCONFG
/ALL命令查看网络参数,我们可以看到IP地址改为了0.0.0.0。则就说明原有的网络配置参数已经开释掉。

小提示:如果我们不执行释放IP信息的命令直接运行ipconfig
/renew的话将无法重新获得IP信息。因此第三步必不可少。

        附:四种常见dhcp报文:

  1. DHCP服务器配置管理全攻略
  2. 管理好DHCP服务器 为企业网管员减负
  3. 注重点滴 让DHCP服务器工作效能更高

第六步:重新获得IP信息后我们查看当前的地址参数,如果无法获得任何信息的话还是要从本机入手解决问题,如果获得的是错误信息的话则需要找到DHCP服务器,对其进行检查。

        DHCP协议:https://tools.ietf.org/html/rfc2131

第七步:将本地网卡禁用然后再次启用,按照上面介绍的步骤重新做一次。

        熟悉了客户端自动获取IP地址的过程,下一步笔者就开始搭建一台DHCP服务器了。老样子,先把上一章的TFTP服务停掉:/bin/systemctl
stop xinetd.service

第八步:如果我们知道DHCP服务器的IP地址的话,可以在客户机上使用ping命令“ping
服务器ip”查看网络连通情况。

        查看一下状态确认关闭:/bin/systemctl status xinetd.service

第九步:在系统的“事件查看器”中寻找有无关于DHCP服务相关的故障记录。方法是“开始->控制面板->管理工具->事件查看器”。如图3)

        查看yum已经安装的dhcp软件:yum list installed | grep dhcp

图3 点击看大图

        查看yum源关于dhcp的安装软件:yum list | grep dhcp

第十步:通过“开始->控制面板->管理工具->服务”打开服务设置窗口,在服务列表中找到dhcp
client
service。如图4)在其上双击,然后点停止按钮,接着再点启动按钮将其重新启动。如果发现该服务本身没有启用则更说明了故障的根源所在,直接启动并设置启动方式为“自动”即可。如图5)

图片 2

图4 点击看大图

        yum安装DHCP:yum install dhcp.x86_64

图5

        安装好之后,和之前TFTP一样,笔者先对其进行初始化设置:

第十一步:打开网络的本地连接进行修复,方法是“网上邻居->属性->本地连接->修复”。系统将自动清除ARP缓存与NETBS信息,接着更新DNS与DHCP服务组件与相关信息。如图6)

        cd /etc/dhcp/

图6 点击看大图

        cat dhcpd.conf

第十二步:如果上面十一步仍然不能解决问题的话,我们只能先使用静态IP地址与DNS等网络信息配置本机来进行检测了。如果配置了静态IP信息后可以正常上网,连接LAN的话,则说明问题的出在客户机与DHCP服务器的连接或者DHCP服务器自身上。我们就要将问题的起因放到DHCP服务器上。

图片 3

小提示:有的时候为客户端设置一个其他用户,然后使用该用户登录也可以解决部分DHCP故障,另外用
lspfix.exe或winsockxpfix.exe,修复tcpip的栈区错误,结合“开始->运行->输入sfc
/scannow”扫描一遍系统文件也能得到意想不到的结果。

        笔者看到第四行似乎有个example的配置文件,果断进去看了看语句的格式。熟悉之后笔者开始对dhcp的策略配置:
cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example

三、服务器排障:

        先介绍一下笔者的网络情况,笔者之前配的马赛克地址(一直以来称作192.168.101.2)是笔者园区网络的地址,这段地址在笔者的数据中心,一般是固定地址供服务器使用。其余的一些地址则是由现网中的DHCP
server分配,园区网络中除了客户端获取地址之外,基于ap-ac架构的无线接入点也需要获取地址,并同时需要下发option选项。而笔者园区网络比较复杂,现网业务不能中断,因此笔者考虑找两段没有用过的地址,在专网(10.150.101.0/24)中进行测试。首先笔者在10.150.101.0/24网段中测试一下同网段前半部分地址分发,并为某台设备绑定地址;其次笔者新建一段地址10.150.100.0/24通过dhcp
relay的方式为option 60字符为Aruba的设备下发ac地址。

DHCP
服务器的排障方法我们已经介绍过很多了,感兴趣的读者可以查阅以前服务器频道相关文章。主要的手段就是查询服务器上的dhcp
server的设置是否正常,如果没有启用将其开启。另外还要时不时的将DHCP服务器关闭查看是否网络中还存在其他DHCP服务器从而产生冲突。另外在网络建立域的情况下,要想开启DHCP服务器是需要由域控制对该DHCP服务器授权的,所以授权工作不要遗忘。

        明确了测试目标,笔者进行dhcpd.conf的配置:

还需要提的一点就是租约的问题,如果发现DHCP工作正常,一部分客户机无法获得IP信息,执行ipconfig
/renew提示找不到DHCP服务器,而另外一部分可以正常获得的话,百分之九十是因为租约的原因,要嘛租约里保存的信息过多,需要我们手工清除一次;要嘛租约时间设置的过长,以至于大量非法MAC占用了有效IP地址。

        vi dhcpd.conf