本发明涉及网络技术领域,具体涉及一种单物理网卡多VLAN的DHCP服务器实现方法。
背景技术:
当前,随着硬件的不断升级,很多公司会逐渐使用Linux服务来对整个公司提供DHCP服务,在现有技术下,Linux的存在一些开源的DHCP服务,不过这些服务要对多个VLAN提供IP分配服务,一般需要多个物理网卡,且配置一般比较复杂。
另外,在讲究信息安全的今天,很多时候DHCP不仅仅是提供IP这么一个简单的功能,可能还会涉及到DCHP dicover、offer等数据包数据的处理,从而根据策略来决定如何分配,因此如果仅仅是借助Linux上的第三方DHCP服务是无法满足这个需求的。
技术实现要素:
为了解决上述问题,本发明提供了一种单物理网卡多VLAN的DHCP服务器实现方法。本发明提供的一种单物理网卡多VLAN的DHCP服务器实现方法,是虚拟VLAN网卡技术和JAVA程序的结合,具有良好的扩展和编程能力,具有良好的适应性,同时能够有效降低成本,提高效率,以更好的适应时代和市场的要求。
本发明采用的技术方案如下:
一种单物理网卡多VLAN的DHCP服务器实现方法,包括步骤S1,虚拟VLAN网卡的配置,所述步骤S1包括如下步骤:
S11,基于物理网卡针对每个VLAN新建一个虚拟VLAN网卡;
S12,给每个虚拟VLAN网卡配置所述网段的IP,并加载802.1q模块。
上述的一种单物理网卡多VLAN的DHCP服务器实现方法,其中,所述步骤S1还包括:
S101,判断所述物理网卡的网卡驱动是否支持802.1q协议;如果是,至步骤S102;
S102,判断所述物理网卡所在的服务器内核是否能加载802.1q模块,如果是,至步骤S11。
上述的一种单物理网卡多VLAN的DHCP服务器实现方法,其中,还包括步骤S2,对每个虚拟VLAN网卡进行DHCP报文的监听。
上述的一种单物理网卡多VLAN的DHCP服务器实现方法,其中,还包括步骤S3,核心报文解析,所述步骤S3包括如下步骤:
S31,判断接收到的报文是否属于DHCP报文,如果是,至步骤S32,如果否,则结束;
S32,解析接收到的报文对应的报文种类。
上述的一种单物理网卡多VLAN的DHCP服务器实现方法,其中,还包括步骤S4,根据接收到的报文种类,做对应DHCP数据包封装和发送:当接收到DHCP请求报文,计算出对应分配的IP并发送报文;当接收到DHCP需求报文,确认对应的IP并发送报文;当接收到DHCP通知报文,确认报文参数信息并发送报文;当接收到DHCP释放报文,进行租赁周期的释放。
本发明过程具体分为虚拟VLAN网卡的配置、网卡监听报文、核心报文解析和IP分配算法逻辑、DHCP数据包封装和发送。只需要单物理网卡即可实现对多个VLAN提供DHCP服务。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一种单物理网卡多VLAN的DHCP服务器实现方法的流程图;
图2是本发明一种单物理网卡多VLAN的DHCP服务器实现方法一实施例中PC机的DHCP请求过程;
图3是本发明一种单物理网卡多VLAN的DHCP服务器实现方法的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
如图1所示,一种单物理网卡多VLAN的DHCP服务器实现方法,包括如下步骤:
S1,虚拟VLAN网卡的配置:
S101,判断所述物理网卡的网卡驱动是否支持802.1q协议;如果是,至步骤S102;
S102,判断所述物理网卡所在的服务器内核是否能加载802.1q模块,如果是,至步骤S11。
S11,基于物理网卡针对每个VLAN新建一个虚拟VLAN网卡;使用vconfig命令,使最后一个参数和交换机对应的VLAN号相同;
S12,给每个虚拟VLAN网卡配置所述网段的IP,并加载802.1q模块。每个虚拟VLAN网卡都要分配IP,那么把该虚拟VLAN网卡和要分配的IP组即ip范围一一对应。
S2,对每个虚拟VLAN网卡进行DHCP报文的监听。
S3,核心报文解析:
S31,判断接收到的报文是否属于DHCP报文,如果是,至步骤S32,如果否,则结束;
S32,解析接收到的报文对应的报文种类。
S4,根据接收到的报文种类,做对应DHCP数据包封装和发送:当接收到DHCP请求报文,计算出对应分配的IP并发送报文;当接收到DHCP需求报文,确认对应的IP并发送报文;当接收到DHCP通知报文,确认报文参数信息并发送报文;当接收到DHCP释放报文,进行租赁周期的释放。
如图2所示,在一具体实施例中,当PC机发起DHCP请求时,具体请求过程如下:
(1)PC主机启动,DHCP处于INTITIAL状态为了获取IP地址,DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCP discover广播包,请求租用IP地址。该广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名,本地所有的DHCP server会收到这个报文,数据包中的目标端口设为BOOTP67端口。这时PC主机会处于SELECT状态。
(2)处于SELECT状态的PC主机会接受DHCP server发来的DHCP offer报文,每个报文中会包含为客户机配置的信息以及server为客户机提供的租用IP,一般主机会收到零个或者多个offer报文,一般PC主机会响应第一个offer报文,并与server协商相关事宜,为此主机会发送一个DHCP request报文,并进入REQUEST状态。
(3)DHCP server会给PC主机一个ack的确认信息,这时一个DHCP获取过程结束。主机进入BOUND稳定状态。
(4)假如PC主机不需要IP地址或者需要换个IP,这时PC主机会发送一个DHCP release报文向DHCP server,这时PC主机重新处于初始状态。
(5)一般服务器给PC主机的IP地址都有租期,时间长短不等,而DHCP主机会有3个计时器,当择期过半50%,这时PC主机会发送一个DHCP request报文要求续租进入RENEW状态,DHCP server会响应这个报文发送ack确认信息,这时DHCP会重新进入BOUND状态。
(6)假如DHCP server没有响应主机的请求,等租期到了87.5%这时主机会重新发送DHCP request报文要求续租,主机进入REBIND状态,假如这时候DHCP server的IP地址不够用,会发送一个nack信息,这时主机会重新进入初始状态再次按照(1)到(4)步骤重新申请IP。假如收到ack信息确认续租成功,说明这个IP我们还可以继续使用。没有响应,PC主机只有等到IP租期耗尽,重新进入初始状态重新获取。
如图3所示,本发明设计在一具体实施例中的DHCP服务流程具体如下:
1、Linux服务器和交换机的trunk口相连,确保能让所有VLAN的报文发送到服务器。
2、服务器上按照每个VLAN id,在某个物理网卡上建立对应的虚拟VLAN网卡,并配置一个IP,同时确保服务器内核加载了802.1q模块。该VLAN id为交换机上的对应的一个VLAN号,具有唯一性。
3、运行JAVA编写的DHCP服务器监听在每个虚拟VLAN网卡,利用libpcap打开每个虚拟VLAN网卡的句柄,能随时抓取报文。
4、按照上文说的PC机请求DHCP的流程,首先PC机会发出discover报文,报文广播到交换机,交换机会将此转发到服务器,由于服务器支持了802.1q,且和交换机是以trunk相连,因此会根据报文中vlan tag将该报文由对应的某个虚拟VLAN网卡来接收。(此分配方式对于所有的DHCP报文都是一样的,下文不再重复。)
5、DHCP服务器从某个虚拟VLAN网卡句柄中抓取到了该报文,首先判断是否该报文是否属于DHCP报文,即是否为发向67端口的UDP报文,否则直接结束,是进行下一步。
6、按照DHCP报文格式,一步一步解析出相应数据,包含客户地址、报文类型,如是请求报文还是回复报文等,以及DHCP的option数据。
7、解析出的数据中option 53为0x01,即为discover类型,转8;为0x03,即为request类型,转9;为0x08,即为inform类型,转10;为0x07,即为release类型,转11;
8、Discover消息处理器接收到discover报文,解析出MAC地址和系统的bock list比较,如果在blocklist中,则直接返回不做处理;如果不在,则判断是否给此MAC预留了IP,如果有,则直接分配预留IP,如果没有,则先找到接收此报文的虚拟VLAN网卡对应的IP组,这个对应关系需要在创建虚拟vlan网卡时配置好,找到对应IP组后,就知道分配IP的范围,从小到大依次比较是否已被分配,如果是,则找下一个,如果不是,则确定分配此IP,并把此IP加入到已分配列表。确定了分配IP,则再从IP组里获取其他的option信息,包括网关、DNS、租赁周期等,并将所有信息封装成offer报文,其目的端口68,通过虚拟vlan网卡句柄发送出去。
9、Request消息处理器接收到request报文,request报文前面的处理流程和discover一样,预留IP判断完后,则直接从报文中解析出请求IP,request报文和discover不一样,包含了一个请求IP,如果请求IP和预留IP不一致,则不符合规则,直接返回;如果一样,则将此IP和option信息封装成ack报文发送,并将IP和MAC对应的租赁关系表更新。
10、Inform消息处理器接收到inform报文,直接从报文中解析出client IP,client IP是否属于系统配置的某个IP组,如果不属于,则直接返回;如果属于,则将此IP组中配置的一些附加的信息封装到ack报文中发送。
11、Release消息处理器接收到release报文,直接从报文中解析出client IP,client IP是否已存在租赁信息,如果不存在,则直接返回;如果存在,则判断租赁信息中MAC地址是否和报文中的client MAC相同,相同则将租赁信息清空,不同则直接返回。
在本发明的一具体实施例中,以物理网卡eth0为例、且网络中存在vlan 100、200、300三个vlan需要提供服务,通过三条命令vconfig add eth0 100、vconfig add eth0 200、vconfig add eth0 200创建了三个虚拟VLAN网卡,此时ifconfig就会看到多出了eth0.100、eth0.200、eth0.300三个网卡,即为虚拟VLAN网卡。然后需要给每个虚拟VLAN网卡配置一个IP,使用ifconfig命令:
ifconfig eth0.100 192.168.100.1 netmask 255.255.255.0
ifconfig eth0.200 192.168.200.1 netmask 255.255.255.0
ifconfig eth0.300 192.168.300.1 netmask 255.255.255.0
创建完成后输入modprobe 8021q命令加载802.1q模块,即完成配置。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
当然,对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。