您的位置:新葡亰496net > 服务器网络 > 新葡亰496net:排查DHCP服务器故障的经验,DHCP服务

新葡亰496net:排查DHCP服务器故障的经验,DHCP服务

发布时间:2019-08-31 16:26编辑:服务器网络浏览(129)

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

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

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

    在wdOS操作系统上DHCP服务基本配置

    CentOS7系统架设DHCP服务

    我架设DHCP服务使用的是CentOS 7.0.1406,核心版本号为3.10.0-123.el7.x86_64。CentOS系统安装在虚拟机上面,然后通过虚拟网卡来串接到GNS 3中架设的虚拟网络上面。整个网络拓扑是这样的:

    新葡亰496net 1

    如果你不是很清楚虚拟机中的CentOS系统到底是怎么接到GNS 3中的虚拟网络上面,也没关系,就把上图中的那个标注为虚拟机的PC看做是运行着CentOS 7系统的服务器就行了。我这篇文章也只是介绍怎么在CentOS 7系统上架设DHCP服务,并不介绍关于GNS 3的使用和网络的知识。

    要架设DHCP服务,可按照如下步骤进行:

    1.安装DHCP软件

    安装DHCP软件使用命令:yum install dhcp

    安装完成后,就可看到有dhcp.x86_64这个软件,如下图所示。另外两个软件(dhcp-common.x86_64和dhcp-libs.x86_64)是连带安装上去的。

    新葡亰496net 2

    2.设置配置文件/etc/dhcp/dhcpd.conf

    安装好DHCP软件后,就需要设置配置文件/etc/dhcp/dhcpd.conf。要设置dhcpd.conf这个配置文件,可以先看一下档案/usr/share/doc/dhcp*/dhcpd.conf.example,里面有一些例子和简单的说明。也可以使用命令man 5 dhcpd.conf查看更详细的说明。

    在我这个案例中,我是这么设置dhcpd.conf文档的:


    [[email protected]~]# vim /etc/dhcp/dhcpd.conf

    authoritative;

    default-lease-time600;

    max-lease-time7200;

    optiondomain-name "test.com";

    optiondomain-name-servers 114.114.114.114;

    #

    #authoritative指明本DHCP服务器是所服务网段的官方DHCP服务器。一般情况下,配置文件中要设置authoritative,如果不设置,可能会有一些问题。

    #default-lease-time设置默认租约有效期,以秒为单位。如果客户端在请求IP地址时并未要求租约有效期,DHCP服务器就会将租约有效期设置为这个值。

    #max-lease-time,单位为秒。在鸟哥的书中,这个值是设置客户端可请求的最大租约有效期,而不是客户端所能使用一个IP的最长时间。man文档里面也有解释“Time should be the maximumlength in seconds that will be assigned to a lease”,不过这到底是哪个意思,我就不太确定了。

    #optiondomain-name设置域名。

    #optiondomain-name-servers设置DNS服务器,这里只设置了一个DNS服务器,也可以设置两个 ,格式参照文档/usr/share/doc/dhcp*/dhcpd.conf.example。

    #

    subnet172.31.3.0 netmask 255.255.255.0 {

    range 172.31.3.10 172.31.3.200;

    option routers 172.31.3.254;

    option broadcast-address 172.31.3.255;

    }

    host pc2 {

    hardware ethernet 00:50:79:66:68:01;

    fixed-address 172.31.3.201;

    }

    #

    subnet172.31.1.0 netmask 255.255.255.0 {

    range 172.31.1.10 172.31.1.200;

    option routers 172.31.1.254;

    option broadcast-address 172.31.1.255;

    }

    host pc4 {

    hardware ethernet 00:50:79:66:68:03;

    fixed-address 172.31.1.201;

    }

    host pc5 {

    新葡亰496net,hardware ethernet 00:50:79:66:68:04;

    fixed-address 172.31.1.202;

    }

    #

    #subnet语句指定子网和子网掩码。

    #range语句指定可动态分配的IP的IP地址范围。

    #option routers语句指定网关地址。

    #optionbroadcast-address指定广播地址。这个不是很确定是不是一定要设置,在我这个虚拟网络中,不设置也能正常运行,但在实际网络中,不设置的话不知道会不会有问题。

    #host语句可以给指定MAC地址(hardware ethernet所设置的值)的主机分配固定的IP地址(fixed-address所设置的值)。host后面接的那个是一个名称来的(如pc2),这个名称是可以随便设置的,不用跟实际的主机名一致,但是该名称在本配置文件中必须是唯一的。


    3.启动dhcpd服务

    设置完配置文件后,最后就是启动dhcpd服务了,使用命令:systemctl start dhcpd.service

    如果没什么问题的话,DHCP服务器就部署好了。此时,可以查看到dhcpd在监听端口67,如下图所示:

    新葡亰496net 3

    如果服务未成功启动的话,此时可以查看一下/var/log/messages日志文件(使用命令cat/var/log/messages | grep dhcp),默认DHCP的日志都会记录在该文件中。如果要查看已分配的IP,可以查看文件/var/lib/dhcpd/dhcpd.leases,不过好像里面只会记录了动态分配的IP,而不会记录固定IP(如前面配置文件中的172.31.3.201),即使该IP已被分配出去。正如前面已经提到的,要了解配置文件dhcpd.conf的更详细配置信息,可查看man文档(使用命令man 5 dhcpd.conf)。而要了解配置文件dhcpd.conf里面各option的详细信息,则要查看另一个man文档(使用命令man 5 dhcp-options)。

    要查看服务状态的话,可使用命令systemctl statusdhcpd.service。如果要停止DHCP服务的话,则是使用命令systemctl stop dhcpd.service。修改配置文件后,要使配置文件生效,则可使用命令systemctl restart dhcpd.service。当然,如果是在实际生产环境中,就不能随意改变配置文件并重启DHCP服务了,而是要使用omshell这个命令,按官方文档的说法,这个命令可以在服务不中止的情况下改变配置。

    4.设置服务开机启动

    要设置dhcpd服务开机启动,使用命令:systemctl enable dhcpd.service。

    如果要检查服务是否的确已设置为开机启动,可使用命令systemctl list-unit-files。如果要取消服务开机启动,可使用命令systemctldisable dhcpd.service。

    5.检查测试

    到上面为止,所有的配置都已完成。最后,就是要看一下客户端能否通过DHCP协议正常获取IP了:

    新葡亰496net 4

    可以看到,所有客户端都有正常获取到IP,子网掩码和网关也都是正确的。

    注:上面的很多信息主要来自于红帽的官方文档,附上链接 Guide,就在这个文档里面有介绍如何架设DHCP服务器,有兴趣可以看看。

    我架设DHCP服务使用的是CentOS 7.0.1406,核心版本号为3.10.0-123.el7.x86_64。CentOS系统安装在虚拟机上面,然后通过虚拟网卡...

    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)是一个简化主机IP地址分配管理的TCP/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地址是烧录在计算机网卡中的。

    新葡亰496net 5

    用户可以利用DHCP服务器管理动态的IP地址分配及其他相关的环境配置工作(如:DNS、WINS、Gateway的设置)。 

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

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

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

      www.2cto.com  

    一是在治理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 避免了因手工设置IP地址及子网掩码所产生的错误,同时也避免了把一个IP地址分配给多台工作站所造成的地址冲突。降低了管理IP地址设置的负担,使用DHCP 服务器大大缩短了配置或重新配置网络中工作站所花费的时间,同时通过对DHCP服务器的设置可灵活的设置地址的租期。同时,DHCP 地址租约的更新过程将有助于用户确定那个客户的设置需要经常更新(如:使用便携机的客户经常更换地点),且这些变更由客户机与DHCP服务器自动完成,无需网络管理员干涉。 

    二是不仅要在本地进行备份,而且,还需要进行异地备份。这主要是为了预防这台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)。

    安装之前,先用 rpm –qa |grep dhcp命令查看一下系统中是否已经安装了DHCP软件包

    笔者经过一番寻找,发现分配出去的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四种基础的报文类型,还有以下四种:

    新葡亰496net 6

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

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

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

     

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

    图1 点击看大图

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

    注:Dhcpv6-client-l.0.10-20.e15 这个是dhcp客户端Ipv6软件包,帮助客户端获取动态IP地址,没有显示dhcp的主程序包,说明还没有安装dhcp服务。  www.2cto.com  

    第一步:打开命令行窗口。若是微软的操纵系统的话,则在开始、运行处,输入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报文至服务器。

    可以用yum install dhcp命令一键自动完成。简单、方便。

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

    新葡亰496net:排查DHCP服务器故障的经验,DHCP服务器管理维护心得体会。小提示:如果我们不执行释放IP信息的命令直接运行ipconfig /renew的话将无法重新获得IP信息。因此第三步必不可少。

            附:四种常见dhcp报文:

     

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

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

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

    新葡亰496net 7

    ...

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

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

     

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

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

    注:如果在运行yum install dhcp时显示以下错误时,原因是在使用yum命令前,先要对这个命令创建一个软件库。要创建软件库的话,就会使用到另一个命令,即createrepo这个命令就是用来给yum创建软件库的。由于createrepo这个命令在默认的安装里面没有安装,所以先得用rpm命令把它安装上。

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

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

     

    图3 点击看大图

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

    新葡亰496net 8

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

    新葡亰496net 9

     

    图4 点击看大图

            yum安装DHCP:yum install dhcp.x86_64

    安装完成时,再次查看安装情况:

    图5

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

     

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

            cd /etc/dhcp/

    新葡亰496net 10

    图6 点击看大图

            cat dhcpd.conf

     

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

    新葡亰496net 11

    注:dhcp-3.0.5-31.el5 这个是DHCP的主程序包,包括DHCP服务和中继代理程序

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

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

      www.2cto.com  

    三、服务器排障:

            先介绍一下笔者的网络情况,笔者之前配的马赛克地址(一直以来称作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地址。

    新葡亰496net:排查DHCP服务器故障的经验,DHCP服务器管理维护心得体会。dhcpv6-client-1.0.10-20.el5这个是DHCP客户端IPv6软件包,帮助客户端获取动态IP地址

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

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

     

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

            vi dhcpd.conf

    当DHCP主程序包安装好之后会自动生成主配置文件的范本文件/usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample,而在/etc目录下会建立一个空白的dhcpd.conf主配置文件,现在我们将范本配置文件复制到/etc目录下替换掉空白的dhcpd.conf主配置文件。然后才能对dhcpd.conf文件进行编辑。

    小提示:凡是提供DHCP服务的服务器都必须设置固定IP地址,想在动态获得IP信息的计算机上启用DHCP服务是不可以的。而且虽然微软公司在限制 DHCP服务上做了规定,例如同一个网络中不容许两台DHCP存在。但是目前有很多第三方软件可以建立DHCP服务器,甚至是宽带路由器也将DHCP功能集成于自身配置中,因此在这种情况下就无法清楚的查询出网络中到底存在几个DHCP服务器了,我们只能将怀疑对象一一关闭或者在交换机及路由器上将怀疑对象进行访问控制列表过滤。总之网络中存在非法DHCP服务器引起的网络故障是非常难解决的,需要反复调查循序渐进。

            首先进行全局设置:

     

    总结:当DHCP 服务出现问题时不要盲目的去服务器上查找结果,大部分时候都是因为客户机故障造成的,另外客户机与服务器之间的媒介也要值得注意,网线是否连接正常,交换机是否工作正常都是需要考虑的,必要时一定要多多替换,换几个网线或几个交换机端口来判断。切记不要想当然去操作,要脚踏实地的去测量才能得到真正的结果。

            ddns-update-style none;

    新葡亰496net 12

    ...

            调整ddns的方式为none,DDNS为域名解析提供了一种动态关联的机制,其目的是为了实现客户端地址变动时,dns解析可以跟随主机的IP地址变动。由于客户端完全可以通过mac-ip的绑定不使其地址变动,所以该功能在网络中应用意义不大,就直接设置为none了。

     

            

    注:问是否覆盖/etc/dhcpd.conf,打y ,表示覆盖。

            ignore client-updates;

     

            同上,客户端更新,直接关闭。

    二、简单案例配置步骤

            default-lease-time 3600;

     

            该字段是标识dhcp租约的时间,笔者在全局模式下设置为1小时=3600秒。

    环境:有30台计算机,IP地址段为192.168.1.0/24,网关是192.168.1.1,要求192.168.1.10-192.168.1.20保留作为服务器固定地址,普通客户端地址段为192.168.1.200-192.168.1.250。其他的剩余地址作为备用地址  www.2cto.com  

            max-lease-time 86400;

     

            最大租约时间,如果某地址池设置的租约时间大于该阈值,则生效。设置为1天。

    1、Dhcp服务器端的配置:

            option domain-name "hbai.com";

     

            option domain-name-servers 10.150.101.249;

    接下来需要对主配置文件dhcpd.conf进行相应的配置

            设置dns服务器为本机地址,使得dhcp server可以同时下发dns供服务器域名解析。

     

            class "aruba" {

    查看主配置文件,并进行修改配置

                   match if substring (option vendor-class-identifier, 0, 7) = "ArubaAP";

     

            }

    新葡亰496net 13

            定义一个class规则,匹配字符“ArubaAP”。

     

            option serverip code 43 = string;

    新葡亰496net 14

            option serverip31:31:2e:31:31:31:2e:31:2e:31:31:31;

     

            设置option 43下发的ac地址为11.111.1.111以ascii来表示。

    option routers 192.168.1.1;#设置默认网关地址

            全局模式下配置差不多就这些,下面就是定义一些地址池,新建两段地址用做测试。整个文件的配置如下:

      www.2cto.com  

    新葡亰496net 15

    option subnet-mask   255.255.255.0;#设置子网掩码

            配置中,笔者新建了同网段的一个地址池10.150.101.10-10.150.101.100,对匹配到字符为Aruba的设备下发地址,同时,笔者有台mac后四位为137d的设备,对其绑定地址10.150.101.55。

     

            同时,笔者新建了一段10.150.100.0的网段,进行地址分配。

    range dynamic-bootp 192.168.1.200 192.168.1.250;#设置地址池的范围

            配置参数完成后参考之前的策略,开放防火墙udp67端口。

     

            firewall-cmd --list-all

    default-lease-time 21600;#设置默认地址的租约时间

            firewall-cmd --zone=public --del-port=67/udp–permanent

     

            firewall-cmd –reload

    max-lease-time 43200;#设置客户端最大地址的租约时间

            cd /etc/firewalld/zones/

     

            cat public.xml

    以下内容为特定机器保留的IP(我没有做任何配置)

    新葡亰496net 16

     

    新葡亰496net 17

    新葡亰496net 18

            开启dhcp服务:systemctl start dhcpd

     

            开启dns服务:systemctl start named

    现在安装配置完成,不过,现在是没法起作用的,原因如下:VMware自带有DHCP功能,而且默认是开启的,我们这里必须把它关了才行,还有就是网络必须通。

            对于一台客户机而言,取到地址是一件非常简单的事情,只要在操作系统上设置为自动获取地址,等待地址获取就可以了。由于故障排查的要求,笔者需要对整个dhcp地址获取、续租、释放等过程都需要有深刻的理解,因此笔者在内网的一台跳板机抓包分析dhcp的获取过程和option字段。

     

            在同网段的某台内网windows设备上开启wireshark,选择网卡后在搜索栏中筛选关于dhcp的报文:bootp

       关闭VMware自带的DHCP功能:点“Edit”=》“virtual Network Editor”。出现下图,由于这里我网络连接选择的是NAT,所以是VMnet8,点击一下VMnet8,发现下面的“Use local DHCP service to distribute IP address to VMs”选项是选中状态的,我们把前面的勾去了,点击确定,保存。这样就关闭了自带的DHCP功能了

            (wireshark官网地址:https://www.wireshark.org/#download)

      www.2cto.com  

            很幸运,笔者的专网比较干净(无大量设备自动获取地址),因此抓到了一个完整的dhcp四次交互过程:

    新葡亰496net 19

    新葡亰496net 20

     

            如上图所示,是笔者一台mac末尾为137d的设备进行dhcp获取地址的过程。在这台设备接入网络后,即开始发送DHCP Discover报文,当笔者的dhcp服务器在67端口监听到该报文后就会恢复客户端DHCP Offer报文,由于笔者在配置文件中将其mac绑定了地址10.150.101.55,因此服务器将该地址返回给客户端,再经过request和ack两个阶段后客户端成功获取地址。

    修改完之后需要重启dhcpd服务,让其生效

            首先笔者查看discover报文,在该报文中首先看option 55的请求参数列表,客户端会向服务器请求如下option参数。

     

    新葡亰496net 21

    新葡亰496net 22

            在报文中并没有看到客户端请求option 43的信息,笔者的客户端在发起dhcp请求时,除了获取到想要的IP地址之外,还请求了包括子网掩码、广播地址、网关、dns、主机名、NTP、MTU的信息。

     

            查看一下discover报文中的option 60,是F5Nerworks。该字段标识了客户端的厂商信息。

    2、DHCP客户端的配置:

    新葡亰496net 23

     

            当客户端发起一次请求之后,dhcp服务器就会对其进行响应,这个报文就是DHCP offer报文。

    打开在VM的另一个操作系统,配置DHCP客户端

    新葡亰496net 24

     

            查看报文中的option 53、option 54信息,看到报文类型为offer,dhcp服务器地址为笔者服务器的地址。

    可以用dhclient eth0 ,或者先关闭再启动网卡eth0

    新葡亰496net 25

     

            查看报文中option 51,看到笔者在服务器端设置的默认lease time为1H。

    新葡亰496net 26

    新葡亰496net 27

     

            查看报文中option 1、option 3,看到笔者设置的掩码和网关。

    新葡亰496net 28

    新葡亰496net 29

     

            查看该报文中的option 15、option 6,看到笔者下发的dns server ip为10.150.101.249,dns下发成功。

    重启网络服务,让修改生效

    新葡亰496net 30

      www.2cto.com  

            后面两个交互的报文是客户端和服务器确认地址获取成功,option信息基本相同,就不再细看了。

    新葡亰496net 31

            最后再看一下dhcp的租约信息。Linux的租约目录在/var/lib/dhcpd/下,进入该目录cat dhcpd.leases文件就可以看到地址和租约了~

     

    新葡亰496net 32

    再用ifconfig 查看IP地址的获取是否成功。 

            该文件记录了某时间点IP地址和客户端MAC地址的对应关系,一旦需要溯源,就可以以这个文件为准了。笔者测试时间测试跨度比较长,其间地址绑定等操作陆陆续续测试了多次,这个租约是某周末前后笔者截取的一段log,其中137d的地址绑定已经被笔者释放了,这个测试阶段测试了已经获取地址设备的续约,使用了两台设备分别下发了地址池第一个和最后一个地址。

     

            还有一些遗憾,由于出差笔者没法找到合适的设备测试option 60字段是否下发成功,文中关于option 60的一些配置是查看相关的文档资料配置的,这个在文件“cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example”中就有配置的例子,但要抓到option 43的报文还需要进行下一步的验证。

    注:DHCP客户端获取IP地址是从最大的IP地址开始获取的,我们可以看到获取的IP地址是192.168.1.250,这个跟widows正好相反了。

    新葡亰496net 33

    新葡亰496net 34

            附上一个客户端dhcp状态图,度娘上直接搜的。可以更方便的理解客户端在不同状态间的转换,有兴趣的朋友可以根据不同的状态抓取相应的报文仔细分析。到此为止客户端获取地址并续约的过程已经实现。

     

    新葡亰496net 35

     

            CSDN一篇对DHCP option解读:

    作者 周_chuchu

    动态主机分配协议(DHCP)是一个简化主机IP地址分配管理的TCP/IP 标准协议。 用户可以利用DHCP服务器管理...

    本文由新葡亰496net发布于服务器网络,转载请注明出处:新葡亰496net:排查DHCP服务器故障的经验,DHCP服务

    关键词: