DHCP服务
一、概述
- 我们以一台装有Linux操作系统的计算机来分析一下,其开机连网的大致流程:上电开机、基本硬件的初始化、Linux kernel的初始化、kernel network相关模块的初始化、network driver初始化、配置IP和路由。
- IP的分配工作一般由网络层完成,大体有以下几种方式:
- IPV4常见以下几种配置方式:
- static IP(用户指定IP,可通过UI手动配置)
- DHCP(平台通过DHCP协议自动获取,这种方式使用最广泛)
- Auto IP(由平台自己计算生成,仅用于局域网内通信,使用较少,范围是169.254.0.0/16)
- IPV6
- Stateful autoconfigure (通过DHCPv6获取)
- Stateless autoconfigure(通过RA message配置)
- Link-local (类似于IPv4的Auto IP,仅用于局域网内通信,以FE80开头)
- IPV4常见以下几种配置方式:
二、DHCP 服务
- DHCP(Dynamic Host Configuration Protcol,动态主机配置协议)。下面以一张图来讲述其配网的基本框架以及流程。
- DHCP Discover: 客户机在其所在的物理网络上广播一个 DHCP DISCOVER消息, DHCP客户端据此可以知道网络中存在的DHCP服务器的位置,请求IP地址租约。代理中继可以将这个消息传送到其它物理网络。
- DHCP Offer: 每个服务器都回应一个DHCPOFFER消息, DHCP服务器向DHCP客户端提供预分配IP地址的阶段。消息中的‘yiaddr’域填写一个可分配的网络地址。服务器不需要保留已提供的地址记录,尽管这样分配地址的时候可能效率更高些。服务器分配地址的时候要检查分配的地址是否已被使用。如可以使用icmp的echo request报文来检测。服务器应该可以被管理员关闭检测地址是否已被分配。中继代理可以传输服务器的DHCPOFFER消息。
- DHCP Request: 客户机会从一个或多个服务器收到一个或多个DHCPOFFER消息。客户机会根据DHCPOFFER消息选择一个服务器来请求网络参数。客户机广播一个DHCPREQUEST消息,消息中的服务器地址段中填写刚才选择的服务器的ip地址。这个DHCPREQUEST消息是广播形式的,并且能够被DHCP/BOOTP中继代理所中继传输。DHCPREQUEST采用和DHCP DISCOVER消息一样的广播方式。如果客户端在一段时间内没有收到DHCPOFFER消息,就会重新发送 DHCP DISCOVERY消息。
- DHCP ACK: 服务器收到广播的DHCPREQUEST 消息。其它服务器通过DHCPREQUEST 中的服务器地址段来判断不回应此报文。服务器将请求的客户参数封装在DHCPACK消息中发回客户机, DHCP ACK报文把在DHCP OFFER报文中准备的IP地址租约给对应DHCP客户端。
- 客户端收到包含配置参数的DHCPACK消息。客户端应该再最后一次检查参数(如arp地址解析一下分配到的ip地址),并且注意到DHCPACK消息中的关于租期的详细说明。然后客户端就开始配置网络参数了。如果客户端检测到地址已经被别人使用了(如通过使用arp),就必须要发送一个DHCPDECLINE消息给服务器,并且重新开始dhcp交互。客户端应该等待至少10秒时间重新开始交互,以避免过多消耗网络资源。客户端在没有收到DHCPACK或DHCPNAK消息的情况下, 等待超时然后重新发送DHCPREQUEST消息。客户端会在放弃前(初始化前)重传四次DHCPREQUEST消息,总共延时60秒。若还是没有收到DHCPACK 或 DHCPNAK消息,就进入初始化状态重新开始。客户端通告用户初始化失败并重新开始。
- 客户端可以送一个DHCPRELEASE 消息来撤销对一个地址的租用。
找了一张图来讲述DHCP报文格式:
-
Htype、Hlen:分别指定DHCP客户端的MAC地址类型及长度,各占8位。
-
Hops:DHCP报文经过的DHCP中继的数目,占8位
-
Xid:客户端通过DHCP Discover报文发起一次IP地址请求时选择的随机数,相当于请求标识,占32位。用来标识一次IP地址请求过程。在一次请求中所有报文的Xid都是一样的。
-
Secs:DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位,占16位。在没有获得IP地址前该字段始终为0。
-
Flags:标志位,占16位,第一位为广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,置0时表示采用单播发送方式,置1时表示采用广播发送方式。其余位保留不用。
-
Ciaddr:指示DHCP客户端的IP地址,占32位(4个字节)。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0,因为在得到DHCP服务器确认前,DHCP客户端是还没有分配到IP地址的。
-
Yiaddr:指示DHCP服务器分配给客户端的IP地址,占32位(4个字节)。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
-
Siaddr:指示下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址,占32位(4个字节)。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。
-
Giaddr:指示DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址,占32位(4个字节)。如果没有经过DHCP中继,则显示为0。
-
Chaddr:指示DHCP客户端的MAC地址,占128位(16个字节)。在每个报文中都会显示对应DHCP客户端的MAC地址。
-
Sname:指示为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式),占512位(64个字节)。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。
-
File:指示DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息,占1024位(128个字节)。仅在DHCP Offer报文中显示,其他报文中显示为空。
-
Option:可选项字段,长度可变。报文类型(代码为53,占1他字节)、有效租约期(代码为51,以秒为单位,占4个字节)、续约时间(代码为58,占4个字节)、子网掩码(代码为1,占4个字节)、默认网关(代码为3,可以是一个路由器IP地址列表,长度可变,但必须是4个字节的倍数)、DNS服务器(代码为6,可以是一个DNS服务器IP地址列表,长度可变,但必须是4个字节的整数倍)、域名称(代码为15,主DNS服务器名称,长度可变)、WINS服务器(代码为44,可以是一个WINS服务器IP列表,长度可变,但必须是4个字节的倍数)等配置信息。
-
上面是一个DHCP配置步骤的例子,其具体是这么执行的:
DHCP OFFER:DHCP:Renewal Time Value (T1) = 8 Days, 0:00:00 !—想要继续租约原来分配的IP地址,则提出续约申请的期限为8天
Rebinding Time Value (T2) = 14 Days, 0:00:00 !—如果上次申请续约失败,再次申请绑定原来分配到的IP地址的期限为14天
IP Address Lease Time = 16 Days, 0:00:00 !—租约期限为16天,也就是DHCP客户端可使用此IP地址的最长时间为16天
Server Identifier = 157.54.48.151 !—DHCP服务器的IP地址为157.54.48.151 ;Router = 157.54.48.1 !—默认网关IP地址为157.54.48.1 NetBIOS Name Service = 157.54.16.154 !—DNS服务器IP地址为157.54.16.154
三、DHCP中继
-
DHCP 中继:它在处于不同网段间的DHCP客户机和服务器之间承担中继服务器,可以将DHCP协议报文跨网段中继到目的DHCP服务器(或客户机),于是许多网络上的DHCP客户机可以使用同一个DHCP服务器。 其大致流程如下图:
其具体实现如下:
- DHCP Relay 设备修改DHCP消息中的相应字段,把DHCP的广播包改成单播包,并负责在服务器与客户机之间的转换
DHCP中继的工作原理如下:
-
当DHCP客户机启动并进行DHCP初始化时,它会在本网络广播配置请求报文;
-
若本地网络存在DHCP服务器则不需要DHCP中继就直接可以进行DHCP配置;
-
若本地网络里无DHCP服务器,则与本地网络相连的、带DHCP中继功能的网络设备在收到该广播报文后做将做适当处理将之转发给指定的存在于其他网络上的DHCP服务器;
-
服务器根据客户机提供的必要信息,为其作响应的配置,并再次通过DHCP中继将该配置信息发送给客户机,完成对客户机的动态配置。
事实上,从开始到最终完成配置,需要多个这样的交互过程。
DHCP配置示例:
-
DHCP Relay的配置
ip dhcp relay 62.183.24.1
Ip dhcp up
-
DHCP Server的配置
Ip dhcp pool pool1
Network range 10.18.1.1 10.18.1.253 mask 255.255.0.0
Default-gateway 10.18.1.254
Ip dns 202.103.24.68 10.15.1.1
Ip dhcp up
四、DHCP Snooping配置
-
Option 82称为中继代理信息选项,该选项记录了DHCP client的位置信息。
DHCP snooping设备通过在DHCP请求报文中添加Option 82,将根据请求报文中的giaddr或接收到请求报文的接口IP地址,为客户端分配IP地址,从而使得DHCP server能够为不同子网的主机分配不同的IP地址和其他配置信息,并实现对客户端的安全和计费等控制。
DHCP Snooping 设备的配置:
-
使能DHCP Snooping 功能
dhcp-snooping
-
配置端口Eth1/4为信任端口
interface Ethernet 1/4
dhcp-snooping trust
quit
-
在端口Eth1/1上使能option82,并配置Option82的Circuit ID为group1
Interface Ethernet 1/1
Dhcp-snooping information enable
Dhcp-snooping information circuit-id string group1
quit
-
对Eth1/2和1/3同样做3
DHCP Server设备的配置:
-
配置接口IP地址
configure terminal
Interface fastethernet 0/0
Ip address 192.168.10.1 255.255.255.0
exit
-
配置Server使用Option82信息进行地址分配
Service dhcp
Ip dhcp use class
-
为group1建立DHCP分类,并配置Option82中的Circuit ID的小组编号为group1
Ip dhcp class group1
Relay agent information
Relay-information hex 010667726F757031
exit
-
对Eth1/2和1/3同样做3
-
创建DHCP地址池,并配置相应的租约期限、网关、DNS服务器地址*/
Ip dhcp pool office
Network 192.168.10.0
Lease 0 12
Default-router 192.168.10.1
Dns-server 192.168.100.2
-
为3个DHCP分类分别指定地址范围
Class group1
Address range 192.168.10.2 192.168.10.25
Class group2
Address range 192.168.10.100 192.168.10.150
Class group3
Address range 192.168.10.151 192.168.10.200
几点总结:
-
DHCP snooping不支持链路聚合。若二层以太网接口加入聚合组,则该接口上进行的DHCP snooping配置不会生效;该接口退出聚合组后,之前的DHCP snooping配置才会生效。
-
设备只有位于DHCP客户端与DHCP服务器之间,或DHCP客户端与DHCP中继之间时,DHCP snooping功能配置后才能正常工作;设备位于DHCP服务器与DHCP中继之间时,DHCP snooping功能配置后不能正常工作。
-
使能DHCP snooping功能的设备,不能作为DHCP服务器和DHCP中继。
-
通过上面的讲解我们肯定知道了,我们的的IP地址是怎么来的了,但是这个IP能为我们带来什么呢?可以参见另外两篇博客:
ARP-地址解析协议
DNS-域名服务器原理分析